CHICKEN_C = csc
CSC_FLAGS += -K prefix -static

# Order matters, since module check correctness on compilation
MODULES = utils macros reader module-system semen sex-fmt-c fmt-c-writer sexc
OBJ = $(MODULES:%=%.o)
IMPORTS = $(MODULES:%=%.import.scm)

sexc: $(OBJ) main.o
	$(CHICKEN_C) $(CSC_FLAGS) $^ -o $@

main.o: main.scm
	$(CHICKEN_C) $(CSC_FLAGS) $< -c -o $@

module-system.o: module-system.scm reader.import.scm
	$(CHICKEN_C) $(CSC_FLAGS) module-system.scm -e -c -J -o module-system.o -unit module-system -uses macros -uses utils

%.import.scm: %.o %.scm
%.o: %.scm
	$(CHICKEN_C) $(CSC_FLAGS) $< -e -c -J -o $@ -unit $(@:%.o=%)


sex-tests: $(OBJ) tests/*.scm
	cd ./tests && $(CHICKEN_C) $(CSC_FLAGS) run.scm -c -o sex-tests.o
	$(CHICKEN_C) $(CSC_FLAGS) $(OBJ) ./tests/sex-tests.o -o sex-tests

clean:
	rm -f $(OBJ) main.o ./tests/sex-tests.o
	rm -f $(IMPORTS)
	rm -f sexc sex-tests
