diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 28 |
1 files changed, 19 insertions, 9 deletions
@@ -1,19 +1,29 @@ .DEFAULT_GOAL := bin/game -bin: - @mkdir -p $@ - -bin/tilemap.o: src/tilemap.scm | bin - csc -c -J src/tilemap.scm -unit tilemap -o $@ +# Get all .scm modules (excluding game.scm) +MODULE_FILES := $(wildcard src/*.scm) +MODULE_FILES := $(filter-out src/game.scm, $(MODULE_FILES)) +MODULE_NAMES := $(patsubst src/%.scm,%,$(MODULE_FILES)) +OBJECT_FILES := $(patsubst %,bin/%.o,$(MODULE_NAMES)) -bin/game.o: src/game.scm | bin - csc -c src/game.scm -uses tilemap -o $@ +# Main target - compile game.o with -uses flags, then link all .o files +bin/game: bin/game.o $(OBJECT_FILES) + csc bin/game.o $(OBJECT_FILES) -o bin/game -bin/game: bin/tilemap.o bin/game.o | bin - csc -o bin/game bin/tilemap.o bin/game.o +# Compile game.scm to game.o (declare that it uses the modules) +bin/game.o: src/game.scm $(OBJECT_FILES) | bin + csc -c src/game.scm -o bin/game.o -I bin $(patsubst %,-uses %,$(MODULE_NAMES)) +bin: + @mkdir -p $@ +# Pattern rule: compile each module as a library unit (unique C toplevel name) +# so linking multiple .o files doesn't cause "multiple definition of C_toplevel". +bin/%.o bin/%.import.scm: src/%.scm | bin + csc -c -J -unit $* src/$*.scm -o bin/$*.o + mv $*.import.scm bin/ .PHONY: clean clean: rm -rf bin rm -f *.import.scm game + rm -f *.so |
