diff options
| author | PikalaxALT <pikalaxalt@gmail.com> | 2018-02-07 00:40:22 -0500 |
|---|---|---|
| committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-02-07 00:40:22 -0500 |
| commit | dcd35c895cb1c5680f92360cb084e6924ed3b76f (patch) | |
| tree | e3b12bfd9f67e1237832602f03fe5bfd7380ab0b /Makefile | |
| parent | eff6795887cc27f2c5139df9a6da70f4f02338b4 (diff) | |
| parent | c79d259508d47a8b5bde5b9060b8fe8c6989bd44 (diff) | |
Merge branch 'master' into unk_text_8095904
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 280 |
1 files changed, 134 insertions, 146 deletions
@@ -1,183 +1,171 @@ -SHELL := /bin/bash -o pipefail -AS := $(DEVKITARM)/bin/arm-none-eabi-as -ASFLAGS := -mcpu=arm7tdmi +include config.mk -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 -Werror -Wno-trigraphs +#### Tools #### -LD := $(DEVKITARM)/bin/arm-none-eabi-ld +SHELL := /bin/bash -o pipefail +AS := $(DEVKITARM)/bin/arm-none-eabi-as +CC1 := tools/agbcc/bin/agbcc +CPP := $(DEVKITARM)/bin/arm-none-eabi-cpp +LD := $(DEVKITARM)/bin/arm-none-eabi-ld +OBJCOPY := $(DEVKITARM)/bin/arm-none-eabi-objcopy +SHA1SUM := sha1sum -c +GBAGFX := tools/gbagfx/gbagfx +RSFONT := tools/rsfont/rsfont +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 -I include --defsym $(GAME_VERSION)=1 --defsym REVISION=$(GAME_REVISION) --defsym $(GAME_LANGUAGE)=1 --defsym DEBUG=$(DEBUG) +CC1FLAGS := -mthumb-interwork -Wimplicit -Wparentheses -Wunused -Werror -O2 -fhex-asm +CPPFLAGS := -I tools/agbcc/include -iquote include -nostdinc -undef -Werror -Wno-trigraphs -D $(GAME_VERSION) -D REVISION=$(GAME_REVISION) -D $(GAME_LANGUAGE) -D DEBUG=$(DEBUG) -LIBGCC := tools/agbcc/lib/libgcc.a -SHA1 := sha1sum -c +#### Files #### -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 := poke$(BUILD_NAME).gba +MAP := $(ROM:%.gba=%.map) -REVISION := 0 +SUBDIRS := \ + sound \ + sound/songs \ + asm \ + data \ + src \ + src/battle \ + src/battle/anim \ + src/field \ + src/debug \ + src/scene \ + src/pokemon \ + src/engine \ + src/libs +BUILD_DIR := build/$(BUILD_NAME) -VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 ruby_de sapphire_de +C_SOURCES := $(foreach dir, $(SUBDIRS), $(wildcard $(dir)/*.c)) +ASM_SOURCES := $(foreach dir, $(SUBDIRS), $(wildcard $(dir)/*.s)) -# Clear the default suffixes. -.SUFFIXES: +C_OBJECTS := $(addprefix $(BUILD_DIR)/, $(C_SOURCES:%.c=%.o)) +ASM_OBJECTS := $(addprefix $(BUILD_DIR)/, $(ASM_SOURCES:%.s=%.o)) +ALL_OBJECTS := $(C_OBJECTS) $(ASM_OBJECTS) -# Secondary expansion is required for dependency variables in object rules. -.SECONDEXPANSION: - -.PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin sound/direct_sound_samples/cry_%.bin +LIBC := tools/agbcc/lib/libc.a +LIBGCC := tools/agbcc/lib/libgcc.a -.PHONY: all clean tidy all_versions compare compare_all \ -$(VERSIONS) $(VERSIONS:%=compare_%) +LD_SCRIPT := $(BUILD_DIR)/ld_script.ld +# Special configurations required for lib files +%src/libs/siirtc.o: CC1FLAGS := -mthumb-interwork +%src/libs/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork +%src/libs/agb_flash_1m.o: CC1FLAGS := -O1 -mthumb-interwork +%src/libs/agb_flash_mx.o: CC1FLAGS := -O1 -mthumb-interwork +%src/libs/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc +%src/libs/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc +%src/libs/libisagbprn.o: CC1 := tools/agbcc/bin/old_agbcc +%src/libs/libisagbprn.o: CC1FLAGS := -mthumb-interwork -$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,asm,data,src{,/battle{,/anim},/field,/debug,/scene,/pokemon,/engine,/libs}})) -C_SRCS := $(shell find src -iname "*.c") -ASM_SRCS := $(wildcard asm/*.s) -DATA_ASM_SRCS := $(wildcard data/*.s) +#### Main Rules #### -SONG_SRCS := $(wildcard sound/songs/*.s) -SONG_OBJS := $(SONG_SRCS:%.s=%.o) +# Disable dependency scanning when NODEP is used for quick building +ifeq ($(NODEP),) + $(BUILD_DIR)/src/%.o: C_FILE = $(*D)/$(*F).c + $(BUILD_DIR)/src/%.o: C_DEP = $(shell $(SCANINC) -I include $(C_FILE:$(BUILD_DIR)/=)) + $(BUILD_DIR)/asm/%.o: ASM_DEP = $(shell $(SCANINC) asm/$(*F).s) + $(BUILD_DIR)/data/%.o: ASM_DEP = $(shell $(SCANINC) data/$(*F).s) +endif -all: ruby - @: +# 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: -all_versions: $(VERSIONS) - @: +# Create build subdirectories +$(shell mkdir -p $(addprefix $(BUILD_DIR)/, $(SUBDIRS))) -# For contributors to make sure a change didn't affect the contents of the ROM. -compare: compare_ruby -compare_all: $(VERSIONS:%=compare_%) +all: $(ROM) +ifeq ($(COMPARE),1) + @$(SHA1SUM) $(BUILD_NAME).sha1 +endif clean: tidy - rm -f sound/direct_sound_samples/*.bin - rm -f $(SONG_OBJS) + find sound/direct_sound_samples \( -iname '*.bin' \) -exec rm {} + + $(RM) $(ALL_OBJECTS) find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' \) -exec rm {} + +ALL_BUILDS := ruby ruby_rev1 ruby_rev1 sapphire sapphire_rev1 sapphire_rev2 ruby_de sapphire_de ruby_de_debug tidy: - rm -f $(VERSIONS:%=poke%{.gba,.elf,.map}) - rm -r build/* + $(RM) $(ALL_BUILDS:%=poke%{.gba,.elf,.map}) + $(RM) -r build -include castform.mk -include tilesets.mk -include fonts.mk -include misc.mk -include override.mk +$(ROM): %.gba: %.elf + $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@ -%.s: ; -%.png: ; -%.pal: ; -%.aif: ; - -%.1bpp: %.png ; $(GFX) $< $@ -%.4bpp: %.png ; $(GFX) $< $@ -%.8bpp: %.png ; $(GFX) $< $@ -%.gbapal: %.pal ; $(GFX) $< $@ -%.gbapal: %.png ; $(GFX) $< $@ -%.lz: % ; $(GFX) $< $@ -%.rl: % ; $(GFX) $< $@ -sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(AIF) $< $@ --compress -%.bin: %.aif ; $(AIF) $< $@ -sound/songs/%.s: sound/songs/%.mid - cd $(@D) && ../../$(MID) $(<F) +%.elf: $(LD_SCRIPT) $(ALL_OBJECTS) + cd $(BUILD_DIR) && $(LD) -T ld_script.ld -Map ../../$(MAP) ../../$(LIBGCC) ../../$(LIBC) -o ../../$@ -%src/libs/libc.o: CC1 := tools/agbcc/bin/old_agbcc -%src/libs/libc.o: CFLAGS := -O2 +$(LD_SCRIPT): ld_script.txt $(BUILD_DIR)/sym_common.ld $(BUILD_DIR)/sym_ewram.ld $(BUILD_DIR)/sym_bss.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" > $@ -%src/libs/siirtc.o: CFLAGS := -mthumb-interwork +$(C_OBJECTS): $(BUILD_DIR)/%.o: %.c $$(C_DEP) + $(CPP) $(CPPFLAGS) $< -o $(BUILD_DIR)/$*.i + $(PREPROC) $(BUILD_DIR)/$*.i charmap.txt | $(CC1) $(CC1FLAGS) -o $(BUILD_DIR)/$*.s + @printf ".text\n\t.align\t2, 0\n" >> $(BUILD_DIR)/$*.s + @$(AS) $(ASFLAGS) -o $@ $(BUILD_DIR)/$*.s -%src/libs/agb_flash.o: CFLAGS := -O -mthumb-interwork -%src/libs/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork -%src/libs/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork +# Only .s files in data need preproc +$(BUILD_DIR)/data/%.o: data/%.s $$(ASM_DEP) + $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ -%src/libs/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc -%src/libs/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc +$(BUILD_DIR)/%.o: %.s $$(ASM_DEP) + $(AS) $(ASFLAGS) $< -o $@ -$(SONG_OBJS): %.o: %.s - $(AS) $(ASFLAGS) -I sound -o $@ $< +# "friendly" target names for convenience sake +ruby: ; @$(MAKE) --no-print-directory GAME_VERSION=RUBY +ruby_rev1: ; @$(MAKE) --no-print-directory GAME_VERSION=RUBY GAME_REVISION=1 +ruby_rev2: ; @$(MAKE) --no-print-directory GAME_VERSION=RUBY GAME_REVISION=2 +sapphire: ; @$(MAKE) --no-print-directory GAME_VERSION=SAPPHIRE +sapphire_rev1: ; @$(MAKE) --no-print-directory GAME_VERSION=SAPPHIRE GAME_REVISION=1 +sapphire_rev2: ; @$(MAKE) --no-print-directory GAME_VERSION=SAPPHIRE GAME_REVISION=2 +ruby_de: ; @$(MAKE) --no-print-directory GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN +sapphire_de: ; @$(MAKE) --no-print-directory GAME_VERSION=SAPPHIRE GAME_LANGUAGE=GERMAN +ruby_de_debug: ; @$(MAKE) --no-print-directory GAME_VERSION=RUBY GAME_LANGUAGE=GERMAN DEBUG=1 -define VERSION_RULES +#### Graphics Rules #### -$1_C_OBJS := $$(C_SRCS:%.c=build/$1/%.o) -$1_ASM_OBJS := $$(ASM_SRCS:%.s=build/$1/%.o) -$1_DATA_ASM_OBJS := $$(DATA_ASM_SRCS:%.s=build/$1/%.o) +GFX_OPTS := -ifeq ($$(NODEP),) -build/$1/src/%.o: c_path = $$(*D)/$$(*F).c -build/$1/src/%.o: c_dep = $$(shell $$(SCANINC) -I include $$(wildcard $$(c_path:build/$1/=))) -build/$1/asm/%.o: asm_dep = $$(shell $$(SCANINC) asm/$$(*F).s) -build/$1/data/%.o: asm_dep = $$(shell $$(SCANINC) data/$$(*F).s) -endif +include castform.mk +include tilesets.mk +include fonts.mk +include misc.mk +include override.mk + +%.1bpp: %.png ; $(GBAGFX) $< $@ $(GFX_OPTS) +%.4bpp: %.png ; $(GBAGFX) $< $@ $(GFX_OPTS) +%.8bpp: %.png ; $(GBAGFX) $< $@ $(GFX_OPTS) +%.gbapal: %.pal ; $(GBAGFX) $< $@ $(GFX_OPTS) +%.gbapal: %.png ; $(GBAGFX) $< $@ $(GFX_OPTS) +%.lz: % ; $(GBAGFX) $< $@ $(GFX_OPTS) +%.rl: % ; $(GBAGFX) $< $@ $(GFX_OPTS) -$1_OBJS := $$($1_C_OBJS) $$($1_ASM_OBJS) $$($1_DATA_ASM_OBJS) $$(SONG_OBJS) -$1_OBJS_REL := $$($1_OBJS:build/$1/%=%) -$1_OBJS_REL := $$($1_OBJS_REL:sound/%=../../sound/%) - -$$($1_C_OBJS): VERSION := $2 -$$($1_C_OBJS): REVISION := $3 -$$($1_C_OBJS): LANGUAGE := $4 -build/$1/%.o : %.c $$$$(c_dep) - @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) -D $$(LANGUAGE) $$< -o build/$1/$$*.i - @$$(PREPROC) build/$1/$$*.i charmap.txt | $$(CC1) $$(CFLAGS) -o build/$1/$$*.s - @printf ".text\n\t.align\t2, 0\n" >> build/$1/$$*.s - $$(AS) $$(ASFLAGS) -o $$@ build/$1/$$*.s - -$$($1_ASM_OBJS): VERSION := $2 -$$($1_ASM_OBJS): REVISION := $3 -$$($1_ASM_OBJS): LANGUAGE := $4 -build/$1/asm/%.o: asm/%.s $$$$(asm_dep) - $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) --defsym $$(LANGUAGE)=1 -o $$@ $$< - -$$($1_DATA_ASM_OBJS): VERSION := $2 -$$($1_DATA_ASM_OBJS): REVISION := $3 -$$($1_DATA_ASM_OBJS): LANGUAGE := $4 -build/$1/data/%.o: data/%.s $$$$(asm_dep) - $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) --defsym $$(LANGUAGE)=1 -o $$@ - -build/$1/sym_bss.ld: LANGUAGE := $4 -build/$1/sym_bss.ld: sym_bss.txt - cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt $$(LANGUAGE) >sym_bss.ld - -build/$1/sym_common.ld: LANGUAGE := $4 -build/$1/sym_common.ld: sym_common.txt $$($1_C_OBJS) $$(wildcard common_syms/*.txt) - cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt $$(LANGUAGE) -c src,../../common_syms >sym_common.ld - -build/$1/sym_ewram.ld: LANGUAGE := $4 -build/$1/sym_ewram.ld: sym_ewram.txt - cd build/$1 && ../../$$(RAMSCRGEN) ewram_data ../../sym_ewram.txt $$(LANGUAGE) >sym_ewram.ld - -build/$1/ld_script.ld: ld_script.txt build/$1/sym_bss.ld build/$1/sym_common.ld build/$1/sym_ewram.ld - cd build/$1 && sed -f ../../ld_script.sed ../../ld_script.txt | sed "s#tools/#../../tools/#g" | sed "s#sound/#../../sound/#g" >ld_script.ld - -poke$1.elf: build/$1/ld_script.ld $$($1_OBJS) - cd build/$1 && $$(LD) -T ld_script.ld -Map ../../poke$1.map -o ../../$$@ $$($1_OBJS_REL) ../../$$(LIBGCC) - -poke$1.gba: %.gba: %.elf - $$(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $$< $$@ - -compare_$1: poke$1.gba - @$$(SHA1) $1.sha1 - -$1: poke$1.gba - @: -endef - -$(eval $(call VERSION_RULES,ruby,RUBY,0,ENGLISH)) -$(eval $(call VERSION_RULES,ruby_rev1,RUBY,1,ENGLISH)) -$(eval $(call VERSION_RULES,ruby_rev2,RUBY,2,ENGLISH)) -$(eval $(call VERSION_RULES,sapphire,SAPPHIRE,0,ENGLISH)) -$(eval $(call VERSION_RULES,sapphire_rev1,SAPPHIRE,1,ENGLISH)) -$(eval $(call VERSION_RULES,sapphire_rev2,SAPPHIRE,2,ENGLISH)) -$(eval $(call VERSION_RULES,ruby_de,RUBY,0,GERMAN)) -$(eval $(call VERSION_RULES,sapphire_de,SAPPHIRE,0,GERMAN)) +#### Sound Rules #### + +sound/direct_sound_samples/cries/cry_%.bin: sound/direct_sound_samples/cries/cry_%.aif + $(AIF2PCM) $< $@ --compress + +sound/%.bin: sound/%.aif + $(AIF2PCM) $< $@ + +sound/songs/%.s: sound/songs/%.mid + cd $(@D) && ../../$(MID2AGB) $(<F) |
