DEBUG=1

ifeq ($(DEBUG),1)
DEBUG_CFLAGS=-g
else
DEBUG_CFLAGS=-D_NDEBUG
endif

CC=gcc
CFLAGS=$(DEBUG_CFLAGS) -std=c11 -Wall -Wpedantic -D_POSIX_C_SOURCE=199309L
LD=gcc
LDFLAGS=

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
	@mkdir -p bin/
	awk -f src/gen-init-globals.awk $(filter-out src/gen-init-globals.awk,$^) >$@

bin/%.o: src/%.c
	@mkdir -p bin/deps
	$(CC) $(CFLAGS) -c -MMD -MF $(<:src/%.c=bin/deps/%.d) -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)
