From 6a21963799575fa8a88ed55cde5408ef67c92d63 Mon Sep 17 00:00:00 2001 From: yenatch Date: Wed, 11 Sep 2013 01:20:52 -0400 Subject: [PATCH] scan source files for Makefile dependencies preprocessing should work with multiple object files now --- Makefile | 11 +++++++++-- scan_includes.py | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 scan_includes.py diff --git a/Makefile b/Makefile index be357d323..614462cf9 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ PYTHON := python .SUFFIXES: .asm .tx .o .gbc .png .2bpp .lz +.SECONDEXPANSION: TEXTFILES := $(shell find ./ -type f -name '*.asm') TEXTQUEUE := @@ -10,6 +11,8 @@ PNG_GFX := $(shell find gfx/ -type f -name '*.png') LZ_GFX := $(shell find gfx/ -type f -name '*.lz') TWOBPP_GFX := $(shell find gfx/ -type f -name '*.2bpp') +$(shell $(foreach obj, $(OBJS), $(eval OBJ_$(obj:.o=) := $(shell $(PYTHON) scan_includes.py $(obj:.o=.asm))))) + all: baserom.gbc pokecrystal.gbc cmp baserom.gbc pokecrystal.gbc clean: @@ -24,9 +27,10 @@ baserom.gbc: $(eval TEXTQUEUE := $(TEXTQUEUE) $<) @rm -f $@ -$(OBJS): $(TEXTFILES:.asm=.tx) $(LZ_GFX) $(TWOBPP_GFX) +$(OBJS): $$(patsubst %.o,%.tx,$$@) $$(patsubst %.asm,%.tx,$$(OBJ_$$(patsubst %.o,%,$$@))) @echo "Preprocessing .asm to .tx..." @$(PYTHON) prequeue.py $(TEXTQUEUE) + $(eval TEXTQUEUE := ) rgbasm -o $@ $(@:.o=.tx) pokecrystal.gbc: $(OBJS) @@ -52,4 +56,7 @@ gfx/trainers/%.lz: gfx/trainers/%.png $(PYTHON) extras/pokemontools/gfx.py png-to-lz $< .png.2bpp: $(PYTHON) extras/pokemontools/gfx.py png-to-lz $< - +%.2bpp: + @: +%.1bpp: + @: diff --git a/scan_includes.py b/scan_includes.py new file mode 100644 index 000000000..71b2e58a7 --- /dev/null +++ b/scan_includes.py @@ -0,0 +1,27 @@ +# coding: utf-8 + +# Recursively scan an asm file for rgbasm INCLUDEs and INCBINs. +# This is used to generate dependencies for each rgbasm object file. + +import sys + +def scan_for_includes(filename): + filenames = [] + for line in open(filename, 'r').readlines(): + if 'INCLUDE' in line or 'INCBIN' in line: + line = line.split(';')[0] + if 'INCLUDE' in line or 'INCBIN' in line: + filenames += [line.split('"')[1]] + return filenames + +def recursive_scan_for_includes(filename): + filenames = [] + if '.asm' in filename or '.tx' in filename: + for include in scan_for_includes(filename): + filenames += [include] + recursive_scan_for_includes(include) + return filenames + +if len(sys.argv) > 1: + for arg in sys.argv[1:]: + sys.stdout.write(' '.join(recursive_scan_for_includes(arg))) +