DEBUG=2 LLVM_SAN=1 FAST_MATH_BUILTINS=1 ifeq ($(DEBUG),1) DEBUG_CFLAGS=-g -Og else ifeq ($(DEBUG),2) DEBUG_CFLAGS=-g -O0 else DEBUG_CFLAGS=-D_NDEBUG -O2 endif ifeq ($(LLVM_SAN),1) LLVM_SAN_FLAGS=-fsanitize=address,undefined else ifeq ($(LLVM_SAN),2) LLVM_SAN_FLAGS=-fsanitize=thread,undefined else LLVM_SAN_FLAGS= endif LIBS=gmp CC=gcc CFLAGS=$(DEBUG_CFLAGS) $(LLVM_SAN_FLAGS) $(MATH_FLAGS) -std=c23 -Wall $\ -Wpedantic -D_POSIX_C_SOURCE=200112L `pkg-config --cflags $(LIBS)` LD=gcc LDFLAGS=-lm `pkg-config --libs $(LIBS)` $(LLVM_SAN_FLAGS) SRCS:=$(wildcard src/*.c) OBJS:=$(SRCS:src/%.c=bin/%.o) DEPS:=$(SRCS:src/%.c=bin/deps/%.d) SRCS += bin/init_globals.c OBJS += bin/init_globals.o DEPS += bin/deps/init_globals.o HEADERS=$(wildcard src/*.h) SRCS_WITH_HEADERS=$(filter $(HEADERS:src/%.h=src/%.c),$(SRCS)) glisp: $(OBJS) $(LD) $(LDFLAGS) -o $@ $^ bin/init_globals.c: $(filter-out bin/init_globals.c,$(SRCS_WITH_HEADERS)) src/gen-init-globals.awk awk -f src/gen-init-globals.awk $(filter-out src/gen-init-globals.awk,$^) >$@ bin/%.o: src/%.c @mkdir -p $(dir $(<:src/%.c=bin/deps/%.d) $(<:src/%.c=bin/%)) $(CC) $(CFLAGS) -c -MMD -MF $(<:src/%.c=bin/deps/%.d) -I src/ -o $@ $< bin/init_globals.o: bin/init_globals.c @mkdir -p bin/deps $(CC) $(CFLAGS) -Isrc/ -c -MMD -MF bin/deps/init_globals.d -o $@ $< clean: rm -rf glisp bin/ .PHONY: clean -include $(DEPS)