From ea8aaeb8e3a85fa2303fe52493d840de9222f3a2 Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 3 Dec 2017 20:46:11 -0500 Subject: [PATCH 1/2] fix cryptic 'no rule' error when a prerequisite is missing at the cost of scan_includes running before the rules are actually evaluated --- Makefile | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index da984c41b..a252e25ea 100644 --- a/Makefile +++ b/Makefile @@ -41,11 +41,6 @@ all: crystal crystal: pokecrystal.gbc crystal11: pokecrystal11.gbc -# Build tools when building the rom -ifeq (,$(filter clean tools,$(MAKECMDGOALS))) -Makefile: tools ; -endif - clean: rm -f $(roms) $(crystal_obj) $(crystal11_obj) $(roms:.gbc=.map) $(roms:.gbc=.sym) $(MAKE) clean -C tools/ @@ -56,14 +51,37 @@ compare: $(roms) tools: $(MAKE) -C tools/ -%11.o: dep = $(shell tools/scan_includes $(@D)/$*.asm) -%11.o: %.asm $$(dep) + +# Prevents $(shell) from filtering out newlines. +define shell2 = +$(foreach line,\ +$(shell $1 | sed "s/ /{space}/g"),\ +$(info $(shell echo $(line) | sed "s/{space}/ /g"))) +endef + +# Build tools when building the rom. +# This has to happen before the rules are processed, since that's when scan_includes is run. +ifeq (,$(filter clean tools,$(MAKECMDGOALS))) +$(call shell2, $(MAKE) -C tools/) +endif + + +# The dep rules have to be explicit or else missing files won't be reported. +# As a side effect, they're evaluated immediately instead of when the rule is invoked. +# It doesn't look like $(shell) can be deferred so there might not be a better way. +define DEP = +$1: $$(shell tools/scan_includes $2) +endef +$(foreach obj, $(crystal11_obj), $(eval $(call DEP,$(obj),$(obj:11.o=.asm)))) +$(foreach obj, $(crystal_obj), $(eval $(call DEP,$(obj),$(obj:.o=.asm)))) + +%11.o: %.asm $(RGBASM) -D CRYSTAL11 -o $@ $< -%.o: dep = $(shell tools/scan_includes $(@D)/$*.asm) -%.o: %.asm $$(dep) +%.o: %.asm $(RGBASM) -o $@ $< + pokecrystal11.gbc: $(crystal11_obj) pokecrystal.link $(RGBLINK) -n pokecrystal11.sym -m pokecrystal11.map -l pokecrystal.link -o $@ $(crystal11_obj) $(RGBFIX) -Cjv -i BYTE -k 01 -l 0x33 -m 0x10 -n 1 -p 0 -r 3 -t PM_CRYSTAL $@ From 346a6f8dcb6e0d1a9540eeae481cca33021439ec Mon Sep 17 00:00:00 2001 From: yenatch Date: Sun, 3 Dec 2017 21:58:27 -0500 Subject: [PATCH 2/2] fix make 3.81 the shell newline capture doesnt work in 3.81, so that's gone --- Makefile | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/Makefile b/Makefile index a252e25ea..6cbc1e1df 100644 --- a/Makefile +++ b/Makefile @@ -52,34 +52,26 @@ tools: $(MAKE) -C tools/ -# Prevents $(shell) from filtering out newlines. -define shell2 = -$(foreach line,\ -$(shell $1 | sed "s/ /{space}/g"),\ -$(info $(shell echo $(line) | sed "s/{space}/ /g"))) +$(crystal11_obj): RGBASMFLAGS = -D CRYSTAL11 + +# The dep rules have to be explicit or else missing files won't be reported. +# As a side effect, they're evaluated immediately instead of when the rule is invoked. +# It doesn't look like $(shell) can be deferred so there might not be a better way. +define DEP +$1: $2 $$(shell tools/scan_includes $2) + $$(RGBASM) $$(RGBASMFLAGS) -o $$@ $$< endef # Build tools when building the rom. # This has to happen before the rules are processed, since that's when scan_includes is run. ifeq (,$(filter clean tools,$(MAKECMDGOALS))) -$(call shell2, $(MAKE) -C tools/) -endif +$(info $(shell $(MAKE) -C tools)) -# The dep rules have to be explicit or else missing files won't be reported. -# As a side effect, they're evaluated immediately instead of when the rule is invoked. -# It doesn't look like $(shell) can be deferred so there might not be a better way. -define DEP = -$1: $$(shell tools/scan_includes $2) -endef $(foreach obj, $(crystal11_obj), $(eval $(call DEP,$(obj),$(obj:11.o=.asm)))) $(foreach obj, $(crystal_obj), $(eval $(call DEP,$(obj),$(obj:.o=.asm)))) -%11.o: %.asm - $(RGBASM) -D CRYSTAL11 -o $@ $< - -%.o: %.asm - $(RGBASM) -o $@ $< +endif pokecrystal11.gbc: $(crystal11_obj) pokecrystal.link