summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authornullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com>2018-10-16 17:11:54 +0800
committervoid <30564701+nullableVoidPtr@users.noreply.github.com>2018-11-18 18:29:52 +0800
commit9e5147a9adf9dc0aba908f38637cd0b4da2cbbcc (patch)
tree4c6d69c6023e4bb9adb728b75b59f24cd5801002 /Makefile
parent97ab00ba2189c4d8b483ddcad3fc7cf97386122b (diff)
Makefile overhaul
Addition of a build directory, and more flexible to allow for possible blue build.
Diffstat (limited to 'Makefile')
-rwxr-xr-xMakefile160
1 files changed, 88 insertions, 72 deletions
diff --git a/Makefile b/Makefile
index 6d5d120..0b86d1d 100755
--- a/Makefile
+++ b/Makefile
@@ -1,99 +1,115 @@
-AS := $(DEVKITARM)/bin/arm-none-eabi-as
-ASFLAGS := -mcpu=arm7tdmi
-
-CC1 := tools/agbcc/bin/agbcc
-override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
-
-CPP := $(DEVKITARM)/bin/arm-none-eabi-cpp
-CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
-
-LD := $(DEVKITARM)/bin/arm-none-eabi-ld
+include $(DEVKITARM)/base_tools
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+
+#### Tools ####
+
+SHELL := /bin/bash -o pipefail
+AS := $(PREFIX)as
+CC1 := tools/agbcc/bin/agbcc
+CPP := $(PREFIX)cpp
+LD := $(PREFIX)ld
+OBJCOPY := $(PREFIX)objcopy
+SHA1SUM := sha1sum -c
+GBAGFX := tools/gbagfx/gbagfx
+AIF2PCM := tools/aif2pcm/aif2pcm
+MID2AGB := tools/mid2agb/mid2agb
+PREPROC := tools/preproc/preproc
+SCANINC := tools/scaninc/scaninc
+RAMSCRGEN := tools/ramscrgen/ramscrgen
-OBJCOPY := $(DEVKITARM)/bin/arm-none-eabi-objcopy
+ASFLAGS := -mcpu=arm7tdmi
+override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm
+CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef
-LIBGCC := tools/agbcc/lib/libgcc.a
-LIBC := tools/agbcc/lib/libc.a
+#### Files ####
-MD5 := md5sum -c
+BUILD_NAME = red
-GFX := tools/gbagfx/gbagfx
-AIF := tools/aif2pcm/aif2pcm
-MID := tools/mid2agb/mid2agb
-SCANINC := tools/scaninc/scaninc
-PREPROC := tools/preproc/preproc
-RAMSCRGEN := tools/ramscrgen/ramscrgen
+ROM := pmd_$(BUILD_NAME).gba
+MAP := $(ROM:%.gba=%.map)
-# Clear the default suffixes.
-.SUFFIXES:
+BUILD_DIR := build/pmd_$(BUILD_NAME)
-# Secondary expansion is required for dependency variables in object rules.
-.SECONDEXPANSION:
+C_SOURCES := $(wildcard src/*.c)
+ASM_SOURCES := $(wildcard asm/*.s data/*.s)
-.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
+C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o))
+ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o))
+ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS)
-.PHONY: all clean tidy
+SUBDIRS := $(sort $(dir $(ALL_OBJECTS)))
-C_SRCS := $(wildcard src/*.c)
-C_OBJS := $(C_SRCS:%.c=%.o)
+LIBC := tools/agbcc/lib/libc.a
+LIBGCC := tools/agbcc/lib/libgcc.a
-ASM_SRCS := $(wildcard asm/*.s)
-ASM_OBJS := $(ASM_SRCS:%.s=%.o)
+LD_SCRIPT := $(BUILD_DIR)/ld_script.ld
-DATA_ASM_SRCS := $(wildcard data/*.s)
-DATA_ASM_OBJS := $(DATA_ASM_SRCS:%.s=%.o)
+# Special configurations required for lib files
+%/src/agb_flash.o : CC1FLAGS := -O -mthumb-interwork
+%/src/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork
+%/src/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork
-OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS)
+#### Main Rules ####
-all: pmd_red.gba
+ALL_BUILDS := red
-# For contributors to make sure a change didn't affect the contents of the ROM.
+# Available targets
+.PHONY: all clean tidy
-compare: all
- @$(MD5) rom.md5
+MAKEFLAGS += --no-print-directory
+# Secondary expansion is required for dependency variables in object rules.
+.SECONDEXPANSION:
+# Clear the default suffixes
+.SUFFIXES:
+# Don't delete intermediate files
+.SECONDARY:
+# Delete files that weren't built properly
+.DELETE_ON_ERROR:
-clean: tidy
+.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin
-tidy:
- rm -f pmd_red.gba pmd_red.elf pmd_red.map
- rm -f $(ASM_OBJS)
- rm -f $(DATA_ASM_OBJS)
- rm -f $(C_OBJS)
- rm -f $(ASM_OBJS)
- rm -f $(DATA_ASM_OBJS)
- rm -f $(C_SRCS:%.c=%.i)
- rm -f $(C_SRCS:%.c=%.s)
- rm -f *.ld
-src/agb_flash.o: CFLAGS := -O -mthumb-interwork
-src/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork
-src/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork
+# Create build subdirectories
-$(C_OBJS): %.o : %.c
- @$(CPP) $(CPPFLAGS) $< -o $*.i
- @$(CC1) $(CFLAGS) $*.i -o $*.s
- @printf ".text\n\t.align\t2, 0\n" >> $*.s
- $(AS) $(ASFLAGS) -o $@ $*.s
+$(shell mkdir -p $(SUBDIRS))
-$(ASM_OBJS): %.o: %.s
- $(AS) $(ASFLAGS) -o $@ $<
+all: $(ROM)
+ifeq ($(COMPARE),1)
+ @$(SHA1SUM) $(BUILD_NAME).sha1
+endif
-$(DATA_ASM_OBJS): %.o: %.s
- $(AS) $(ASFLAGS) -o $@ $<
+clean: tidy
+ $(RM) $(ALL_OBJECTS)
+tidy:
+ $(RM) $(ALL_BUILDS:%=pmd_%{.gba,.elf,.map})
+ $(RM) -r build
-sym_ewram.ld: sym_ewram.txt
- $(RAMSCRGEN) ewram_data sym_ewram.txt ENGLISH >$@
+$(ROM): %.gba: %.elf
+ $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
-sym_ewram2.ld: sym_ewram2.txt
- $(RAMSCRGEN) ewram_data sym_ewram2.txt ENGLISH >$@
+%.elf: $(LD_SCRIPT) $(ALL_OBJECTS) $(LIBC)
+ cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) -o ../../$@ ../../$(LIBC) ../../$(LIBGCC)
-sym_iwram.ld: sym_iwram.txt
- $(RAMSCRGEN) iwram_data sym_iwram.txt ENGLISH >$@
+$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_ewram2.ld $(BUILD_DIR)/sym_iwram.ld
+ cd $(BUILD_DIR) && sed -e "s#tools/#../../tools/#g" ../../ld_script.txt >ld_script.ld
+$(BUILD_DIR)/sym_%.ld: sym_%.txt
+ $(CPP) -P $(CPPFLAGS) $< | sed -e "s#tools/#../../tools/#g" > $@
-ld_script.ld: ld_script.txt sym_ewram.ld sym_ewram2.ld sym_iwram.ld
- sed -f ld_script.sed ld_script.txt >ld_script.ld
+$(C_OBJECTS): $(BUILD_DIR)/%.o: %.c
+ @$(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i
+ echo $(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s
+ @$(CC1) $(CC1FLAGS) $(BUILD_DIR)/$*.i -o $(BUILD_DIR)/$*.s
+ @printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s
+ $(AS) $(ASFLAGS) -o $@ $(BUILD_DIR)/$*.s
-pmd_red.elf: ld_script.ld $(OBJS) $(LIBC)
- $(LD) -T ld_script.ld -Map pmd_red.map -o $@ $(OBJS) $(LIBC) $(LIBGCC)
+$(BUILD_DIR)/data/%.o: data/%.s
+ $(AS) $(ASFLAGS) $< -o $@
-pmd_red.gba: pmd_red.elf
- $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@
+$(BUILD_DIR)/%.o: %.s
+ $(AS) $(ASFLAGS) $< -o $@ \ No newline at end of file