CC := gcc CFLAGS := -O3 -fPIC -Wall -Wextra LDFLAGS := -shared SRCDIR := engine/src INCDIR := engine/include BUILDDIR := build LIBNAME := libchess # Exclude test.c from the shared lib build SRC := $(filter-out $(SRCDIR)/test.c,$(wildcard $(SRCDIR)/*.c)) OBJ := $(patsubst $(SRCDIR)/%.c,$(BUILDDIR)/%.o,$(SRC)) LIB := $(BUILDDIR)/$(LIBNAME).so # ---- test executable (engine/src/test.c) ---- TESTSRC := $(SRCDIR)/test.c TESTOBJ := $(BUILDDIR)/test.o TESTBIN := $(BUILDDIR)/print_board .PHONY: all clean test test-exe run all: $(LIB) $(BUILDDIR): @mkdir -p $(BUILDDIR) $(BUILDDIR)/%.o: $(SRCDIR)/%.c | $(BUILDDIR) $(CC) $(CFLAGS) -I$(INCDIR) -c $< -o $@ $(LIB): $(OBJ) $(CC) $(LDFLAGS) -o $@ $^ c-test-exe: $(TESTBIN) $(TESTOBJ): $(TESTSRC) | $(BUILDDIR) $(CC) -std=c11 -Wall -Wextra -O2 -I$(INCDIR) -c $< -o $@ $(TESTBIN): $(TESTOBJ) $(LIB) $(CC) -O2 -o $@ $(TESTOBJ) -L$(BUILDDIR) -lchess -Wl,-rpath,'$$ORIGIN' run-c-test: test-exe LD_LIBRARY_PATH=$(BUILDDIR) $(TESTBIN) $(FEN) clean: @echo "Cleaning build and Python caches..." @rm -rf $(BUILDDIR) @find . -type d -name "__pycache__" -exec rm -rf {} + @find . -type d -name ".pytest_cache" -exec rm -rf {} + @find . -type f \( -name "*.pyc" -o -name "*.pyo" \) -delete test: @$(MAKE) clean @$(MAKE) all @python3 -m unittest -v; \ status=$$?; \ $(MAKE) clean; \ exit $$status