diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 77 |
1 files changed, 29 insertions, 48 deletions
@@ -1,48 +1,37 @@ -# python 2.7 PYTHON := python - -# md5sum -c is used to compare rom hashes. The options may vary across platforms. MD5 := md5sum -c --quiet +2bpp := $(PYTHON) extras/pokemontools/gfx.py 2bpp +1bpp := $(PYTHON) extras/pokemontools/gfx.py 1bpp +pic := $(PYTHON) extras/pokemontools/pic.py compress +includes := $(PYTHON) extras/pokemontools/scan_includes.py + +base_obj := \ + audio.o \ + main.o \ + text.o \ + wram.o + +red_obj := $(base_obj:.o=_red.o) +blue_obj := $(base_obj:.o=_blue.o) +all_obj := $(red_obj) $(blue_obj) + +$(foreach obj, $(base_obj:.o=), \ + $(eval $(obj)_dep := $(shell $(includes) $(obj).asm)) \ +) -# Clear the default suffixes. .SUFFIXES: .SUFFIXES: .asm .o .gbc .png .2bpp .1bpp .pic - -# Secondary expansion is required for dependency variables in object rules. .SECONDEXPANSION: - # Suppress annoying intermediate file deletion messages. .PRECIOUS: %.2bpp - .PHONY: all clean red blue compare - -poketools := extras/pokemontools -gfx := $(PYTHON) $(poketools)/gfx.py -2bpp := $(gfx) 2bpp -1bpp := $(gfx) 1bpp -pic := $(PYTHON) $(poketools)/pic.py compress -includes := $(PYTHON) $(poketools)/scan_includes.py - -versions := red blue - -# Collect file dependencies for objects in red/ and blue/. -$(foreach ver, $(versions), \ - $(eval $(ver)_asm := $(shell find $(ver) -iname '*.asm')) \ - $(eval $(ver)_obj := $($(ver)_asm:.asm=.o)) \ - $(eval all_obj += $($(ver)_obj)) \ -) -$(foreach obj, $(all_obj), \ - $(eval $(obj:.o=)_dep := $(shell $(includes) $(obj:.o=.asm))) \ -) - - roms := pokered.gbc pokeblue.gbc -all: $(roms) -red: pokered.gbc -blue: pokeblue.gbc +all: $(roms) +red: pokered.gbc +blue: pokeblue.gbc # For contributors to make sure a change didn't affect the contents of the rom. compare: red blue @@ -52,29 +41,21 @@ clean: rm -f $(roms) $(all_obj) $(roms:.gbc=.sym) find . \( -iname '*.1bpp' -o -iname '*.2bpp' -o -iname '*.pic' \) -exec rm {} + +%.asm: ; +$(red_obj): %_red.o: %.asm $$(%_dep) + rgbasm -D "_RED" -h -o $@ $*.asm +$(blue_obj): %_blue.o: %.asm $$(%_dep) + rgbasm -D "_BLUE" -h -o $@ $*.asm -# Don't fix halts. -asm_opt = -h - -# Make a symfile for debugging. -link_opt = -n poke$*.sym - -# Header options for rgbfix. dmg_opt = -jsv -k 01 -l 0x33 -m 0x13 -p 0 -r 03 red_opt = $(dmg_opt) -t "POKEMON RED" blue_opt = $(dmg_opt) -t "POKEMON BLUE" +poke%.gbc: $$(%_obj) + rgblink -n poke$*.sym -o $@ $^ + rgbfix $($*_opt) $@ %.png: ; %.2bpp: %.png ; @$(2bpp) $< %.1bpp: %.png ; @$(1bpp) $< %.pic: %.2bpp ; @$(pic) $< - -# Assemble source files into objects. -$(all_obj): $$*.asm $$($$*_dep) - rgbasm $(asm_opt) -o $@ $*.asm - -# Link objects to produce a rom. -poke%.gbc: $$(%_obj) - rgblink $(link_opt) -o $@ $^ - rgbfix $($*_opt) $@ |