Move files into separate folders for ease of reading, include source directory so we can use angle bracket includes, adjust build system to make directories for objects
61 lines
1.1 KiB
Makefile
61 lines
1.1 KiB
Makefile
CC=gcc
|
|
OUT=oats.out
|
|
INCLUDES=-I.
|
|
LIBS=
|
|
ARGS=
|
|
|
|
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)
|