| # -*- 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) |
| |
| repl: lisp |
| status_log(LISP, repl) |
| @LISP_LIBRARY_PATH="$(lisp_libpath)" ./lisp $(ROOT)/lib/lisp/repl/repl.lisp |
| |
| 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 |