CC=gcc OUT=oats.out INCLUDES=-I. LIBS= ARGS=./examples/test.scm RELEASE=0 GFLAGS=-Wall -Wextra -Wswitch-enum -Werror -std=c11 DFLAGS=-ggdb -fsanitize=address -fsanitize=undefined RFLAGS=-O3 DEPFLAGS=-MT $@ -MMD -MP -MF ifeq ($(RELEASE), 1) CFLAGS=$(GFLAGS) $(RFLAGS) -DDEBUG=0 else CFLAGS=$(GFLAGS) $(DFLAGS) endif DIST=build SRC:=lib/arena.c lib/vec.c lib/sv.c lisp/tag.c lisp/context.c lisp/lisp.c lisp/reader.c lisp/eval.c main.c OBJ:=$(SRC:%.c=$(DIST)/%.o) DEPDIR=$(DIST)/dependencies DEPS:=$(SRC:%.c=$(DEPDIR)/%.d) .PHONY: all all: $(DIST)/$(OUT) $(DIST)/%.o: %.c | $(DIST) $(DEPDIR) $(CC) $(INCLUDES) $(CFLAGS) $(DEPFLAGS) $(DEPDIR)/$*.d -c $< -o $@ $(LIBS) $(DIST)/$(OUT): $(OBJ) | $(DIST) $(CC) $(INCLUDES) $(CFLAGS) $^ -o $@ $(LIBS) .PHONY: run run: $(DIST)/$(OUT) ./$^ $(ARGS) .PHONY: clean: rm -rfv $(DIST)/* $(DIST): | $(DIST)/lib $(DIST)/lisp mkdir -p $(DIST) $(DIST)/lib: mkdir -p $(DIST)/lib $(DIST)/lisp: mkdir -p $(DIST)/lisp $(DEPDIR): mkdir -p $(DEPDIR) mkdir -p $(DEPDIR)/lib mkdir -p $(DEPDIR)/lisp .PHONY: watch: find . -type 'f' -regex ".*.c\\|.*.h" | entr -cs "make run" -include $(DEPS)