summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorpfero <ohpee@loves.dicksinhisan.us>2018-05-30 22:53:12 +0200
committerpfero <ohpee@loves.dicksinhisan.us>2018-05-30 22:53:59 +0200
commitcd9191b074ad1f0cc76375f535a2e487b0451532 (patch)
treee11e3f8d679217ac4ecd747de6c06edad4cc6e86 /Makefile
parent9ab9ea4ab59cc3c226a7fe15b4fcc92b4af57243 (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--Makefile130
1 files changed, 75 insertions, 55 deletions
diff --git a/Makefile b/Makefile
index f6d8f33..643b73e 100644
--- a/Makefile
+++ b/Makefile
@@ -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)