BINARY=compiler

CC=gcc
CFLAGS=-Iinclude -Itcc -Ofast -flto
LDFLAGS=-Ltcc -ltcc -Ofast

CFILES=$(shell find -L src -type f -name '*.c')
OBJ=$(CFILES:.c=.o)

$(BINARY): $(OBJ) Makefile tcc/libtcc1.a
	$(CC) $(OBJ) $(LDFLAGS) -o $@

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

run: $(BINARY)
	./$(BINARY) run example.lisp

run-debug: $(BINARY)
	./$(BINARY) run example.lisp -d yes

run-build: $(BINARY)
	./$(BINARY) build example.lisp -o example
	./example

run-build-debug: $(BINARY)
	./$(BINARY) build example.lisp -o example -d yes
	./example

tcc/libtcc1.a:
	cd tcc && ./configure --cc=$(CC)
	make -C tcc

clean:
	rm -rf $(OBJ) $(BINARY) example