diff options
Diffstat (limited to 'Makefile')
-rwxr-xr-x | Makefile | 174 |
1 files changed, 104 insertions, 70 deletions
@@ -1,99 +1,133 @@ -AS := $(DEVKITARM)/bin/arm-none-eabi-as -ASFLAGS := -mcpu=arm7tdmi +include $(DEVKITARM)/base_tools + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +TITLE := POKE DUNGEON +GAME_CODE := B24E +MAKER_CODE := 01 +REVISION := 0 + +#### 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 +GBAFIX := tools/gbafix/gbafix +AIF2PCM := tools/aif2pcm/aif2pcm +MID2AGB := tools/mid2agb/mid2agb +PREPROC := tools/preproc/preproc +SCANINC := tools/scaninc/scaninc +RAMSCRGEN := tools/ramscrgen/ramscrgen -CC1 := tools/agbcc/bin/agbcc -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm +ASFLAGS := -mcpu=arm7tdmi +override CC1FLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm +CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef -CPP := $(DEVKITARM)/bin/arm-none-eabi-cpp -CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef +#### Files #### -LD := $(DEVKITARM)/bin/arm-none-eabi-ld +BUILD_NAME = red -OBJCOPY := $(DEVKITARM)/bin/arm-none-eabi-objcopy +ROM := pmd_$(BUILD_NAME).gba +MAP := $(ROM:%.gba=%.map) -LIBGCC := tools/agbcc/lib/libgcc.a -LIBC := tools/agbcc/lib/libc.a +BUILD_DIR := build/pmd_$(BUILD_NAME) -MD5 := md5sum -c +C_SOURCES := $(wildcard src/*.c) +ASM_SOURCES := $(wildcard asm/*.s data/*.s) -GFX := tools/gbagfx/gbagfx -AIF := tools/aif2pcm/aif2pcm -MID := tools/mid2agb/mid2agb -SCANINC := tools/scaninc/scaninc -PREPROC := tools/preproc/preproc -RAMSCRGEN := tools/ramscrgen/ramscrgen +C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o)) +ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o)) +ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) -# Clear the default suffixes. -.SUFFIXES: - -# Secondary expansion is required for dependency variables in object rules. -.SECONDEXPANSION: +SUBDIRS := $(sort $(dir $(ALL_OBJECTS))) -.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin +ifeq ($(OS),Windows_NT) +LIB := ../../tools/agbcc/lib/libc.a ../../tools/agbcc/lib/libgcc.a +else +LIB := -L ../../tools/agbcc/lib -lc -lgcc +endif -.PHONY: all clean tidy +LD_SCRIPT := $(BUILD_DIR)/ld_script.ld -C_SRCS := $(wildcard src/*.c) -C_OBJS := $(C_SRCS:%.c=%.o) +# Special configurations required for lib files +$(BUILD_DIR)/src/agb_flash.o : CC1FLAGS := -O -mthumb-interwork +$(BUILD_DIR)/src/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork +$(BUILD_DIR)/src/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork -ASM_SRCS := $(wildcard asm/*.s) -ASM_OBJS := $(ASM_SRCS:%.s=%.o) +$(BUILD_DIR)/src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc +$(BUILD_DIR)/src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc -DATA_ASM_SRCS := $(wildcard data/*.s) -DATA_ASM_OBJS := $(DATA_ASM_SRCS:%.s=%.o) +#### Main Rules #### -OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) +# Disable dependency scanning when NODEP is used for quick building +ifeq ($(NODEP),) +$(BUILD_DIR)/src/%.o: C_DEP = $(shell $(SCANINC) -I include src/$(*F).c) +$(BUILD_DIR)/asm/%.o: ASM_DEP = $(shell $(SCANINC) asm/$(*F).s) +$(BUILD_DIR)/data/%.o: ASM_DEP = $(shell $(SCANINC) data/$(*F).s) +endif -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 $< $@ + $(GBAFIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) --silent -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 ../../$@ $(LIB) -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 $$(C_DEP) + @$(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i + @$(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 $$(ASM_DEP) + $(AS) $(ASFLAGS) $< -o $@ -pmd_red.gba: pmd_red.elf - $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0xA000000 $< $@ +$(BUILD_DIR)/%.o: %.s $$(ASM_DEP) + $(AS) $(ASFLAGS) $< -o $@
\ No newline at end of file |