# -*- mode:makefile -*-

init(lisp, lisp)

option(PLAT, "`platform to build for: either linux or bluejay'", linux)

# preset(optimize)
preset(32)
preset(debug)
preset(warn)
preset(nasm)

archetype(c)
archetype(asm)

NO_READLINE ?= 0

CFLAGS += -Ivendor/luajit/dynasm -Werror # -fsanitize=address
ASMFLAGS += -felf -Fdwarf

ifeq ($(NO_READLINE),1)
CFLAGS += -DNO_READLINE
else
LDFLAGS += -lreadline
CFLAGS += -lreadline
endif

OBJECTS = main.o \
			lisp.o \
			compiler.o \
			lib/std.o \
			plat/linux.o \
			istream.o \
			gc.o \
			call_list.o \
			error.o

LUA = vendor/luajit/src/host/minilua

$(LUA): vendor/luajit/src/host/minilua.c
	status_log(CC, $<)
	@$(CC) $< -o $@ -lm

compiler.c: compiler.dasc | $(LUA)
	status_log(DYNASM, $<)
	@$(LUA) vendor/luajit/dynasm/dynasm.lua -o $@ $<

type(executable)

F ?= test.lisp
lisp_libpath = $(ROOT)/lib/lisp

run: lisp
	status_log(LISP, $(F))
	@LISP_LIBRARY_PATH="$(lisp_libpath)" ./lisp $(F)

leak-check: lisp
	status_log(VALGRIND, lisp $(F))
	@LISP_LIBRARY_PATH="$(lisp_libpath)" valgrind --leak-check=full ./lisp $(F)

format:
	status_log(FORMAT, *)
	@clang-format -i *.c *.h *.dasc plat/* lib/*

finish
