From 547a085fc4b55260b0000b8b5f9a0bd7791fb6d5 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Thu, 26 Feb 2026 21:11:54 +0000 Subject: Improved input handling --- Makefile | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 25c0c94..f6ce2bb 100644 --- a/Makefile +++ b/Makefile @@ -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 -- cgit v1.2.3