Files
pokegold-spaceworld/Makefile
T

191 lines
5.1 KiB
Makefile

ROMS := pokegold-spaceworld.gb \
pokesilver-spaceworld.gb
CORRECTEDROMS := $(ROMS:%.gb=%-correctheader.gb)
GOLD_BASEROM := baserom-gold.gb
SILVER_BASEROM := baserom-silver.gb
DIRS := home engine data gfx audio maps scripts ram dumps garbage
FILES :=
BUILD := build
rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2))
ASMFILES := $(call rwildcard, $(DIRS), *.asm) $(FILES)
GOLD_OBJS := $(patsubst %.asm, $(BUILD)/%_gold.o, $(ASMFILES))
SILVER_OBJS := $(patsubst %.asm, $(BUILD)/%_silver.o, $(ASMFILES))
### Build tools
ifeq (,$(shell which sha1sum))
SHA1 := shasum
else
SHA1 := sha1sum
endif
PYTHON := python3
RGBDS ?=
RGBASM ?= $(RGBDS)rgbasm
RGBFIX ?= $(RGBDS)rgbfix
RGBGFX ?= $(RGBDS)rgbgfx
RGBLINK ?= $(RGBDS)rgblink
RGBASMFLAGS ?= -Weverything -Wtruncation=1
RGBLINKFLAGS ?= -Weverything -Wtruncation=1
RGBFIXFLAGS ?= -Weverything
RGBGFXFLAGS ?= -Weverything
tools/gfx :=
### Build targets
.SECONDEXPANSION:
.PHONY: all
all: $(ROMS) $(CORRECTEDROMS) compare
.PHONY: gold
gold: pokegold-spaceworld.gb pokegold-spaceworld-correctheader.gb
.PHONY: silver
silver: pokesilver-spaceworld.gb pokesilver-spaceworld-correctheader.gb
.PHONY: compare
compare: $(ROMS) $(CORRECTEDROMS)
@$(SHA1) -c roms.sha1
.PHONY: tools
tools tools/pkmncompress tools/gfx tools/scan_includes:
"$(MAKE)" -C tools/
# Remove files generated by the build process.
.PHONY: clean
clean:
rm -rf $(ROMS) $(CORRECTEDROMS) \
$(ROMS:.gb=.sym) $(CORRECTEDROMS:.gb=.sym) \
$(ROMS:.gb=.map) $(CORRECTEDROMS:.gb=.map) \
$(BUILD) rgbdscheck.o
"$(MAKE)" -C tools clean
# Remove generated files except for graphics.
.PHONY: tidy
tidy:
rm -rf $(ROMS) $(CORRECTEDROMS) \
$(ROMS:.gb=.sym) $(CORRECTEDROMS:.gb=.sym) \
$(ROMS:.gb=.map) $(CORRECTEDROMS:.gb=.map) \
$(GOLD_OBJS) $(SILVER_OBJS) rgbdscheck.o
# Visualize disassembly progress.
.PHONY: coverage
coverage: $(ROMS:.gb=.map)
$(PYTHON) utils/coverage.py $<
### Build products
rgbdscheck.o: rgbdscheck.asm
$(RGBASM) -o $@ $<
%.map: %.gb
pokegold-spaceworld-correctheader.gb: RGBFIXFLAGS += -f hg -m 0x10 -Wno-overwrite
pokegold-spaceworld-correctheader.gb: pokegold-spaceworld.gb
cp $< $@
cp $(<:.gb=.sym) $(@:.gb=.sym)
$(RGBFIX) $(RGBFIXFLAGS) $@
pokesilver-spaceworld-correctheader.gb: RGBFIXFLAGS += -f hg -m 0x10 -Wno-overwrite
pokesilver-spaceworld-correctheader.gb: pokesilver-spaceworld.gb
cp $< $@
cp $(<:.gb=.sym) $(@:.gb=.sym)
$(RGBFIX) $(RGBFIXFLAGS) $@
RGBLINKFLAGS += -d
pokegold-spaceworld.gb: RGBFIXFLAGS += -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t POKEMON2GOLD
pokegold-spaceworld.gb: layout.link $(GOLD_OBJS) | $(BASEROM)
$(RGBLINK) $(RGBLINKFLAGS) -l layout.link -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(GOLD_BASEROM) -o $@ $(filter-out $<, $^)
$(RGBFIX) $(RGBFIXFLAGS) $@
pokesilver-spaceworld.gb: RGBFIXFLAGS += -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t POKEMON2SILVER
pokesilver-spaceworld.gb: layout.link $(SILVER_OBJS) | $(BASEROM)
$(RGBLINK) $(RGBLINKFLAGS) -l layout.link -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(SILVER_BASEROM) -o $@ $(filter-out $<, $^)
$(RGBFIX) $(RGBFIXFLAGS) $@
baserom-gold.gb:
@echo "Please obtain a copy of Gold_debug.sgb and put it in this directory as $@"
@exit 1
baserom-silver.gb:
@echo "Please obtain a copy of Silver_debug.sgb and put it in this directory as $@"
@exit 1
### Misc file-specific graphics rules
include gfx/gfx.mk
### Catch-all build target rules
RGBASMFLAGS += -E -i $(BUILD)/
$(GOLD_OBJS): RGBASMFLAGS += -D _GOLD
$(SILVER_OBJS): RGBASMFLAGS += -D _SILVER
$(BUILD)/%_gold.o: $(BUILD)/%.asm | $$(dir $$@) rgbdscheck.o
$(RGBASM) $(RGBASMFLAGS) $(OUTPUT_OPTION) $<
$(BUILD)/%_gold.o: %.asm | $$(dir $$@) rgbdscheck.o
$(RGBASM) $(RGBASMFLAGS) $(OUTPUT_OPTION) $<
$(BUILD)/%_silver.o: $(BUILD)/%.asm | $$(dir $$@) rgbdscheck.o
$(RGBASM) $(RGBASMFLAGS) $(OUTPUT_OPTION) $<
$(BUILD)/%_silver.o: %.asm | $$(dir $$@) rgbdscheck.o
$(RGBASM) $(RGBASMFLAGS) $(OUTPUT_OPTION) $<
$(BUILD)/%_gold.d: %.asm | $$(dir $$@) tools/scan_includes
@tools/scan_includes -b $(BUILD)/ -i $(BUILD)/ -i ./ -o $@ -t $(@:.d=.o) $<
$(BUILD)/%_silver.d: %.asm | $$(dir $$@) tools/scan_includes
@tools/scan_includes -b $(BUILD)/ -i $(BUILD)/ -i ./ -o $@ -t $(@:.d=.o) $<
.PRECIOUS: $(BUILD)/%.pic
$(BUILD)/%.pic: $(BUILD)/%.2bpp tools/pkmncompress | $$(dir $$@)
tools/pkmncompress $< $@
.PRECIOUS: $(BUILD)/%.2bpp
$(BUILD)/%.2bpp: %.png tools/gfx | $$(dir $$@)
$(RGBGFX) -c dmg $(RGBGFXFLAGS) $(OUTPUT_OPTION) $<
tools/gfx $(tools/gfx) $(OUTPUT_OPTION) $@
.PRECIOUS: $(BUILD)/%.1bpp
$(BUILD)/%.1bpp: %.1bpp.png tools/gfx | $$(dir $$@)
$(RGBGFX) -c dmg $(RGBGFXFLAGS) -d1 $(OUTPUT_OPTION) $<
tools/gfx $(tools/gfx) -d1 $(OUTPUT_OPTION) $@
.PRECIOUS: $(BUILD)/%.tilemap
$(BUILD)/%.tilemap: %.png | $$(dir $$@)
$(RGBGFX) -c dmg $(RGBGFXFLAGS) -t $@ $<
.PRECIOUS: $(BUILD)/%.sgb.tilemap
export LC_ALL=C
$(BUILD)/%.sgb.tilemap: %.bin | $$(dir $$@)
tr < $< -d '\000' > $@
.PRECIOUS: %/
%/:
mkdir -p $@
### Scan .asm files for INCLUDE dependencies
ifeq (,$(filter clean tools,$(MAKECMDGOALS)))
-include $(patsubst %.o, %.d, $(GOLD_OBJS) $(SILVER_OBJS))
endif