size: 2 KiB

1LUAVERSION=5.4.4
2LUAURL=https://www.lua.org/ftp/lua-$(LUAVERSION).tar.gz
3LUA=$(shell which lua || echo "lua-src/lua")
4LUASRC=lua-src
5LIBLUA=$(LUASRC)/liblua.a
6LUAHEADERS=$(LUASRC)
7# Or, for example, to use homebrew-installed luajit on macos:
8# LIBLUA=$(shell brew --prefix)/lib/libluajit.a
9# LUAHEADERS=$(shell brew --prefix)/include/luajit-2.1
10MODULES=$(patsubst %, ../%, djot/attributes.lua djot/inline.lua djot/block.lua djot/ast.lua djot/html.lua djot/filter.lua djot/json.lua djot.lua)
11LUASRCS=$(patsubst %,$(LUASRC)/%.c,lapi lgc lstate lauxlib linit lstring lbaselib liolib lstrlib lcode llex ltable lcorolib lmathlib ltablib lctype lmem ltm ldblib loadlib luac ldebug lobject lundump ldo lopcodes lutf8lib ldump loslib lvm lfunc lparser lzio)
12CFLAGS= -std=c99 -O2 -Wall -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS)
13UNAME=$(shell uname)
14ifeq (MSYS,$(findstring MSYS,$(UNAME)))
15PLAT=mingw
16CC=gcc
17else
18PLAT=guess
19endif
20ifeq ($(UNAME), Linux)
21LDFLAGS=-static -lm $(SYSLDFLAGS) $(MYLDFLAGS)
22else
23LDFLAGS=$(SYSLDFLAGS) $(MYLDFLAGS)
24endif
25
26test: djot tests
27 ./tests
28.PHONY: test
29
30tests: tests.c djot.o $(LIBLUA)
31 $(CC) $(CFLAGS) $^ -I . -I $(LUAHEADERS) -o $@ $(LDFLAGS)
32
33djot: main.c djot.o $(LIBLUA) djot_main.inc
34 $(CC) $(CFLAGS) $< djot.o $(LIBLUA) -I . -I $(LUAHEADERS) -o $@ $(LDFLAGS)
35
36libdjot.a: djot.o
37 ar -rc $@ $<
38
39$(LUASRC)/liblua.a: $(LUASRC)
40 make -C $(LUASRC) liblua.a
41
42$(LUASRC):
43 mkdir -p $(LUASRC)
44 curl $(LUAURL) | tar xzv -C $(LUASRC) --strip-components=2 lua-$(LUAVERSION)/src
45
46djot.o: djot.c djot_combined.inc $(LUASRC)
47 $(CC) $(CFLAGS) -c -I . -I $(LUAHEADERS) $<
48
49$(LUASRC)/lua: $(LUASRC)
50 make -C $(LUASRC) $(PLAT)
51
52djot_combined.lua: $(LUA) $(MODULES) dumbParser.lua
53 $(LUA) combine.lua $(MODULES) > $@
54
55djot_combined.inc: djot_combined.lua
56 echo "unsigned char djot_combined_lua[] = {" > $@
57 (cat $< && printf "\0") | xxd -i >> $@
58 echo "};" >> $@
59
60djot_main.inc: ../bin/main.lua
61 echo "unsigned char djot_main_lua[] = {" > $@
62 (cat $< && printf "\0") | xxd -i >> $@
63 echo "};" >> $@
64
65dumbParser.lua:
66 curl -L https://github.com/ReFreezed/DumbLuaParser/releases/download/2.3.0/dumbParser.lua > $@
67
68wasm: djot.js
69.PHONY: wasm
70
71# This also creates djot.wasm
72djot.js: djot.c djot_combined.inc $(LUAOBJS)
73 emcc -g0 -sALLOW_MEMORY_GROWTH -Oz -sFILESYSTEM=0 -s 'EXPORTED_RUNTIME_METHODS=["cwrap"]' -s 'EXPORTED_FUNCTIONS=["_djot_open", "_djot_report_error", "_djot_close", "_djot_parse", "_djot_render_ast_pretty", "_djot_render_ast_json", "_djot_parse_and_render_events", "_djot_render_html", "_djot_apply_filter", "_djot_get_error"]' -I $(LUASRC) -I . $(LUASRCS) -o $@ $<
74
75clean:
76 rm -rf djot_combined.lua djot_combined.inc *.o test
77distclean: clean
78 -rm -rf $(LUASRC) djot.js djot.wasm dumbParser.lua
79.PHONY: clean