diff options
-rw-r--r-- | Makefile | 178 | ||||
-rw-r--r-- | ruby_rev1.sha1 | 2 | ||||
-rw-r--r-- | ruby_rev2.sha1 | 2 | ||||
-rw-r--r-- | sapphire_rev1.sha1 | 2 | ||||
-rw-r--r-- | sapphire_rev2.sha1 | 2 |
5 files changed, 80 insertions, 106 deletions
@@ -26,6 +26,8 @@ RAMSCRGEN := tools/ramscrgen/ramscrgen REVISION := 0 +VERSIONS := ruby sapphire ruby_rev1 sapphire_rev1 ruby_rev2 sapphire_rev2 + # Clear the default suffixes. .SUFFIXES: @@ -34,74 +36,28 @@ REVISION := 0 .PRECIOUS: %.1bpp %.4bpp %.8bpp %.gbapal %.lz %.rl %.pcm %.bin -.PHONY: all clean tidy compare \ -ruby ruby_rev1 ruby_rev2 \ -compare_ruby compare_ruby_rev1 compare_ruby_rev2 \ -sapphire sapphire_rev1 sapphire_rev2 \ -compare_sapphire compare_sapphire_rev1 compare_sapphire_rev2 +.PHONY: all clean tidy all_versions compare compare_all \ +$(VERSIONS) $(VERSIONS:%=compare_%) -C_SRCS := $(wildcard src/*.c) -C_OBJS := $(C_SRCS:%.c=%.o) -ASM_SRCS := $(wildcard asm/*.s) -ASM_OBJS := $(ASM_SRCS:%.s=%.o) +$(shell mkdir -p build/ $(VERSIONS:%=build/%/{,src,asm,data})) +C_SRCS := $(wildcard src/*.c) +ASM_SRCS := $(wildcard asm/*.s) DATA_ASM_SRCS := $(wildcard data/*.s) -DATA_ASM_OBJS := $(DATA_ASM_SRCS:%.s=%.o) SONG_SRCS := $(wildcard sound/songs/*.s) SONG_OBJS := $(SONG_SRCS:%.s=%.o) -OBJS := $(C_OBJS) $(ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) - all: ruby @: -ruby: VERSION := RUBY -ruby: pokeruby.gba - @: - -sapphire: VERSION := SAPPHIRE -sapphire: pokesapphire.gba - @: - -ruby_rev1: REVISION := 1 -ruby_rev1: ruby - @: - -sapphire_rev1: REVISION := 1 -sapphire_rev1: sapphire - @: - -ruby_rev2: REVISION := 2 -ruby_rev2: ruby - @: - -sapphire_rev2: REVISION := 2 -sapphire_rev2: sapphire +all_versions: $(VERSIONS) @: # For contributors to make sure a change didn't affect the contents of the ROM. - compare: compare_ruby - -compare_ruby: ruby - @$(SHA1) ruby.sha1 - -compare_sapphire: sapphire - @$(SHA1) sapphire.sha1 - -compare_ruby_rev1: ruby_rev1 - @$(SHA1) ruby_rev1.sha1 - -compare_sapphire_rev1: sapphire_rev1 - @$(SHA1) sapphire_rev1.sha1 - -compare_ruby_rev2: ruby_rev2 - @$(SHA1) ruby_rev2.sha1 - -compare_sapphire_rev2: sapphire_rev2 - @$(SHA1) sapphire_rev2.sha1 +compare_all: $(VERSIONS:%=compare_%) clean: tidy rm -f sound/direct_sound_samples/*.bin @@ -109,15 +65,8 @@ clean: tidy find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' \) -exec rm {} + tidy: - rm -f pokeruby.gba pokesapphire.gba - rm -f pokeruby.elf pokesapphire.elf - rm -f ld_script.ld sym_bss.ld sym_common.ld sym_ewram.ld - rm -f pokeruby.map pokesapphire.map - 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 $(VERSIONS:%=poke%{.gba,.elf,.map}) + rm -r build/* include castform.mk include tilesets.mk @@ -140,59 +89,84 @@ sound/direct_sound_samples/cry_%.bin: sound/direct_sound_samples/cry_%.aif ; $(A sound/songs/%.s: sound/songs/%.mid cd $(@D) && ../../$(MID) $(<F) -src/libc.o: CC1 := tools/agbcc/bin/old_agbcc -src/libc.o: CFLAGS := -O2 +%src/libc.o: CC1 := tools/agbcc/bin/old_agbcc +%src/libc.o: CFLAGS := -O2 -src/siirtc.o: CFLAGS := -mthumb-interwork +%src/siirtc.o: CFLAGS := -mthumb-interwork -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 +%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 -src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc -src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc +%src/m4a_2.o: CC1 := tools/agbcc/bin/old_agbcc +%src/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc -ifeq ($(NODEP),) -%.o: c_dep = $(shell $(SCANINC) $*.c) -else -%.o: c_dep := -endif +$(SONG_OBJS): %.o: %.s + $(AS) $(ASFLAGS) -I sound -o $@ $< -$(C_OBJS): %.o : %.c $$(c_dep) - @$(CPP) $(CPPFLAGS) -D $(VERSION) -D REVISION=$(REVISION) $< -o $*.i - @$(PREPROC) $*.i charmap.txt | $(CC1) $(CFLAGS) -o $*.s - @printf ".text\n\t.align\t2, 0\n" >> $*.s - $(AS) $(ASFLAGS) -o $@ $*.s -ifeq ($(NODEP),) -%.o: asm_dep = $(shell $(SCANINC) $*.s) -else -%.o: asm_dep := +define VERSION_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) + +ifeq ($$(NODEP),) +build/$1/src/%.o: c_dep = $$(shell $$(SCANINC) src/$$(*F).c) +build/$1/asm/%.o: asm_dep = $$(shell $$(SCANINC) asm/$$(*F).s) +build/$1/data/%.o: asm_dep = $$(shell $$(SCANINC) data/$$(*F).s) endif -$(ASM_OBJS): %.o: %.s $$(asm_dep) - $(AS) $(ASFLAGS) --defsym $(VERSION)=1 --defsym REVISION=$(REVISION) -o $@ $< +$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/%) -$(DATA_ASM_OBJS): %.o: %.s $$(asm_dep) - $(PREPROC) $< charmap.txt | $(AS) $(ASFLAGS) --defsym $(VERSION)=1 --defsym REVISION=$(REVISION) -o $@ +$$($1_C_OBJS): VERSION := $2 +$$($1_C_OBJS): REVISION := $3 +build/$1/%.o : %.c $$$$(c_dep) + @$$(CPP) $$(CPPFLAGS) -D $$(VERSION) -D REVISION=$$(REVISION) $$< -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 -$(SONG_OBJS): %.o: %.s - $(AS) $(ASFLAGS) -I sound -o $@ $< +$$($1_ASM_OBJS): VERSION := $2 +$$($1_ASM_OBJS): REVISION := $3 +build/$1/asm/%.o: asm/%.s $$$$(asm_dep) + $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) -o $$@ $$< -sym_bss.ld: sym_bss.txt - $(RAMSCRGEN) .bss sym_bss.txt >$@ +$$($1_DATA_ASM_OBJS): VERSION := $2 +$$($1_DATA_ASM_OBJS): REVISION := $3 +build/$1/data/%.o: data/%.s $$$$(asm_dep) + $$(PREPROC) $$< charmap.txt | $$(AS) $$(ASFLAGS) --defsym $$(VERSION)=1 --defsym REVISION=$$(REVISION) -o $$@ -sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) - $(RAMSCRGEN) COMMON sym_common.txt -c src,common_syms >$@ +build/$1/sym_bss.ld: sym_bss.txt + cd build/$1 && ../../$$(RAMSCRGEN) .bss ../../sym_bss.txt >sym_bss.ld -sym_ewram.ld: sym_ewram.txt - $(RAMSCRGEN) ewram_data sym_ewram.txt >$@ +build/$1/sym_common.ld: sym_common.txt $$($1_C_OBJS) $$(wildcard common_syms/*.txt) + cd build/$1 && ../../$$(RAMSCRGEN) COMMON ../../sym_common.txt -c src,../../common_syms >sym_common.ld -ld_script.ld: ld_script.txt sym_bss.ld sym_common.ld sym_ewram.ld - sed -f ld_script.sed ld_script.txt >ld_script.ld +build/$1/sym_ewram.ld: sym_ewram.txt + cd build/$1 && ../../$$(RAMSCRGEN) ewram_data ../../sym_ewram.txt >sym_ewram.ld -%.elf: ld_script.ld $(OBJS) - $(LD) -T ld_script.ld -T shared_syms.txt -Map $*.map -o $@ $(OBJS) $(LIBGCC) +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 -pokeruby.gba pokesapphire.gba: %.gba: %.elf - $(OBJCOPY) -O binary --gap-fill 0xFF --pad-to 0x9000000 $< $@ +poke$1.elf: build/$1/ld_script.ld $$($1_OBJS) + cd build/$1 && $$(LD) -T ld_script.ld -T ../../shared_syms.txt -Map ../../$$*.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)) +$(eval $(call VERSION_RULES,ruby_rev1,RUBY,1)) +$(eval $(call VERSION_RULES,ruby_rev2,RUBY,2)) +$(eval $(call VERSION_RULES,sapphire,SAPPHIRE,0)) +$(eval $(call VERSION_RULES,sapphire_rev1,SAPPHIRE,1)) +$(eval $(call VERSION_RULES,sapphire_rev2,SAPPHIRE,2)) diff --git a/ruby_rev1.sha1 b/ruby_rev1.sha1 index 2d25b30f6..86f6d8f61 100644 --- a/ruby_rev1.sha1 +++ b/ruby_rev1.sha1 @@ -1 +1 @@ -610b96a9c9a7d03d2bafb655e7560ccff1a6d894 pokeruby.gba +610b96a9c9a7d03d2bafb655e7560ccff1a6d894 pokeruby_rev1.gba diff --git a/ruby_rev2.sha1 b/ruby_rev2.sha1 index f4c5340f5..de9def01f 100644 --- a/ruby_rev2.sha1 +++ b/ruby_rev2.sha1 @@ -1 +1 @@ -5b64eacf892920518db4ec664e62a086dd5f5bc8 pokeruby.gba +5b64eacf892920518db4ec664e62a086dd5f5bc8 pokeruby_rev2.gba diff --git a/sapphire_rev1.sha1 b/sapphire_rev1.sha1 index a66e7c206..7c94eae57 100644 --- a/sapphire_rev1.sha1 +++ b/sapphire_rev1.sha1 @@ -1 +1 @@ -4722efb8cd45772ca32555b98fd3b9719f8e60a9 pokesapphire.gba +4722efb8cd45772ca32555b98fd3b9719f8e60a9 pokesapphire_rev1.gba diff --git a/sapphire_rev2.sha1 b/sapphire_rev2.sha1 index 8f1db4452..a0665359a 100644 --- a/sapphire_rev2.sha1 +++ b/sapphire_rev2.sha1 @@ -1 +1 @@ -89b45fb172e6b55d51fc0e61989775187f6fe63c pokesapphire.gba +89b45fb172e6b55d51fc0e61989775187f6fe63c pokesapphire_rev2.gba |