summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2017-03-23 21:40:45 -0400
committerGitHub <noreply@github.com>2017-03-23 21:40:45 -0400
commitd51cdb6e052b3944241881ec80fe0e92f3e8893c (patch)
tree90c0b95146f3d768b536658eac6a63ff9adcaaec
parente3c26e52ae6ab881ade913ca1fad2cd9629bbcb1 (diff)
parent7acbfe40778bfbd03b0e2d357efef9ee9b0a34e9 (diff)
Merge pull request #242 from yenatch/master
Build multiple versions at a time.
-rw-r--r--Makefile178
-rw-r--r--ruby_rev1.sha12
-rw-r--r--ruby_rev2.sha12
-rw-r--r--sapphire_rev1.sha12
-rw-r--r--sapphire_rev2.sha12
5 files changed, 80 insertions, 106 deletions
diff --git a/Makefile b/Makefile
index 54fcc5662..cd97efbbd 100644
--- a/Makefile
+++ b/Makefile
@@ -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