diff options
| author | pfero <ohpee@loves.dicksinhisan.us> | 2018-05-30 22:53:12 +0200 |
|---|---|---|
| committer | pfero <ohpee@loves.dicksinhisan.us> | 2018-05-30 22:53:59 +0200 |
| commit | cd9191b074ad1f0cc76375f535a2e487b0451532 (patch) | |
| tree | e11e3f8d679217ac4ecd747de6c06edad4cc6e86 /Makefile | |
| parent | 9ab9ea4ab59cc3c226a7fe15b4fcc92b4af57243 (diff) | |
Clean up Makefile
This makefile can now figure graphics dependencies on its own, creates
dependency files for each compilation unit and compiles everything
separately.
This is a proposal. Please try it out, read the Makefile to see if you
get what I'm trying to do, and propose any improvements you want.
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 130 |
1 files changed, 75 insertions, 55 deletions
@@ -1,74 +1,94 @@ +BUILD := build + MD5 := md5sum -c +PYTHON := python -.PHONY: all compare clean mostlyclean text +RGBASM := rgbasm +RGBGFX := rgbgfx +RGBLINK := rgblink +RGBFIX := rgbfix -.SUFFIXES: -.SUFFIXES: .asm .o .gb .png -.SECONDEXPANSION: -.PRECIOUS: %.1bpp %.2bpp %.pic +RGBASMFLAGS := -E -i $(BUILD)/ +tools/gfx := ROMS := pokegold-spaceworld.gb BASEROM := baserom.gb -OBJS := home.o main.o audio.o sram.o wram.o hram.o shim.o - -# Link objects together to build a rom. -all: $(ROMS) compare - -tools: - $(MAKE) -C tools/ - -define DEP -$1: $2 $$(shell tools/scan_includes $2) - rgbasm -E -o $$@ $$< -endef - -ifeq (,$(filter clean tools,$(MAKECMDGOALS))) -$(info $(shell $(MAKE) -C tools)) +DIRS := home engine data audio +OBJS := $(addprefix $(BUILD)/, gfx.o sram.o wram.o hram.o shim.o) -$(foreach obj, $(OBJS), $(eval $(call DEP,$(obj),$(obj:.o=.asm)))) +rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) +OBJS += $(patsubst %.asm, $(BUILD)/%.o, $(call rwildcard, $(DIRS), *.asm)) -endif +GFX := $(patsubst %.png, $(BUILD)/%.2bpp, \ + $(patsubst %.1bpp.png, $(BUILD)/%.1bpp, \ + $(patsubst gfx/pokemon/%/front.png, $(BUILD)/gfx/pokemon/%/front.pic, \ + $(patsubst gfx/pokemon/%/back.png, $(BUILD)/gfx/pokemon/%/back.pic, \ + $(call rwildcard, gfx, *.png))))) -shim.asm: tools/make_shim.py shim.sym - python tools/make_shim.py -w -- $(filter-out $<, $^) > $@ +.SECONDEXPANSION: -$(ROMS): $(OBJS) - rgblink -d -n $(ROMS:.gb=.sym) -m $(ROMS:.gb=.map) -O $(BASEROM) -o $@ $^ - rgbfix -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2GOLD" $@ +.PHONY: all +all: $(ROMS) compare +.PHONY: compare compare: $(ROMS) - @$(MD5) roms.md5 + $(MD5) roms.md5 + +.PHONY: tools +tools tools/pkmncompress tools/gfx: + $(MAKE) -C tools/ # Remove files generated by the build process. +.PHONY: clean clean: - rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) build/* shim.asm - find . \( -iname '*.1bpp' -o -iname '*.2bpp' -o -iname '*.pic' -o -iname '*.pcm' \) -exec rm {} + + rm -rf $(ROMS) $(BUILD) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) # Remove files except for graphics. +.PHONY: mostlyclean mostlyclean: - rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) build/* shim.asm - find . \( -iname '*.pcm' \) -exec rm {} + - -gfx/sgb/sgb_border_alt.2bpp: tools/gfx += --trim-whitespace -gfx/sgb/sgb_border.2bpp: tools/gfx += --trim-whitespace -gfx/title/title.2bpp: tools/gfx += --trim-whitespace -gfx/trainer_card/leaders.2bpp: tools/gfx += --trim-whitespace -gfx/minigames/slots.2bpp: tools/gfx += --trim-whitespace -gfx/minigames/poker.2bpp: tools/gfx += --trim-whitespace -gfx/intro/purin_pikachu.2bpp: tools/gfx += --trim-whitespace - -%.2bpp: %.png - rgbgfx -o $@ $< - $(if $(tools/gfx),\ - tools/gfx $(tools/gfx) -o $@ $@) - -%.1bpp: %.png - rgbgfx -d1 -o $@ $< - $(if $(tools/gfx),\ - tools/gfx $(tools/gfx) -d1 -o $@ $@) - -%.tilemap: %.png - rgbgfx -t $@ $< - -%.pic: %.2bpp + rm -rf $(ROMS) $(OBJS) $(ROMS:.gb=.sym) $(ROMS:.gb=.map) + +$(ROMS): $(OBJS) + $(RGBLINK) -d -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(BASEROM) -o $@ $^ + $(RGBFIX) -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2GOLD" $@ + +$(BUILD)/shim.asm: tools/make_shim.py shim.sym | $$(dir $$@) + $(PYTHON) tools/make_shim.py -w -- $(filter-out $<, $^) > $@ + +$(BUILD)/gfx.o: | $(GFX) +$(BUILD)/%.o: $(BUILD)/%.asm | $$(dir $$@) + $(RGBASM) $(RGBASMFLAGS) -M $(@:.o=.d) $(OUTPUT_OPTION) $< +$(BUILD)/%.o: %.asm | $$(dir $$@) + $(RGBASM) $(RGBASMFLAGS) -M $(@:.o=.d) $(OUTPUT_OPTION) $< + +$(BUILD)/gfx/sgb/sgb_border_alt.2bpp: tools/gfx += --trim-whitespace +$(BUILD)/gfx/sgb/sgb_border.2bpp: tools/gfx += --trim-whitespace +$(BUILD)/gfx/title/title.2bpp: tools/gfx += --trim-whitespace +$(BUILD)/gfx/trainer_card/leaders.2bpp: tools/gfx += --trim-whitespace +$(BUILD)/gfx/minigames/slots.2bpp: tools/gfx += --trim-whitespace +$(BUILD)/gfx/minigames/poker.2bpp: tools/gfx += --trim-whitespace +$(BUILD)/gfx/intro/purin_pikachu.2bpp: tools/gfx += --trim-whitespace + +.PRECIOUS: $(BUILD)/%.pic +$(BUILD)/%.pic: $(BUILD)/%.2bpp tools/pkmncompress | $$(dir $$@) tools/pkmncompress $< $@ + +.PRECIOUS: $(BUILD)/%.2bpp +$(BUILD)/%.2bpp: %.png tools/gfx | $$(dir $$@) + $(RGBGFX) $(OUTPUT_OPTION) $< + tools/gfx $(tools/gfx) $(OUTPUT_OPTION) $@ + +.PRECIOUS: $(BUILD)/%.1bpp +$(BUILD)/%.1bpp: %.1bpp.png tools/gfx | $$(dir $$@) + $(RGBGFX) -d1 $(OUTPUT_OPTION) $< + tools/gfx $(tools/gfx) -d1 $(OUTPUT_OPTION) $@ + +.PRECIOUS: $(BUILD)/%.tilemap +$(BUILD)/%.tilemap: %.png | $$(dir $$@) + $(RGBGFX) -t $@ $< + +.PRECIOUS: %/ +%/: + mkdir -p $@ + +-include $(call rwildcard, $(BUILD)/, *.d) |
