size: 2 KiB
| 1 | LUAVERSION=5.4.4 |
| 2 | LUAURL=https://www.lua.org/ftp/lua-$(LUAVERSION).tar.gz |
| 3 | LUA=$(shell which lua || echo "lua-src/lua") |
| 4 | LUASRC=lua-src |
| 5 | LIBLUA=$(LUASRC)/liblua.a |
| 6 | LUAHEADERS=$(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 |
| 10 | MODULES=$(patsubst %, ../%, djot/attributes.lua djot/inline.lua djot/block.lua djot/ast.lua djot/html.lua djot/filter.lua djot/json.lua djot.lua) |
| 11 | LUASRCS=$(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) |
| 12 | CFLAGS= -std=c99 -O2 -Wall -DLUA_COMPAT_5_3 $(SYSCFLAGS) $(MYCFLAGS) |
| 13 | UNAME=$(shell uname) |
| 14 | ifeq (MSYS,$(findstring MSYS,$(UNAME))) |
| 15 | PLAT=mingw |
| 16 | CC=gcc |
| 17 | else |
| 18 | PLAT=guess |
| 19 | endif |
| 20 | ifeq ($(UNAME), Linux) |
| 21 | LDFLAGS=-static -lm $(SYSLDFLAGS) $(MYLDFLAGS) |
| 22 | else |
| 23 | LDFLAGS=$(SYSLDFLAGS) $(MYLDFLAGS) |
| 24 | endif |
| 25 | |
| 26 | test: djot tests |
| 27 | ./tests |
| 28 | .PHONY: test |
| 29 | |
| 30 | tests: tests.c djot.o $(LIBLUA) |
| 31 | $(CC) $(CFLAGS) $^ -I . -I $(LUAHEADERS) -o $@ $(LDFLAGS) |
| 32 | |
| 33 | djot: main.c djot.o $(LIBLUA) djot_main.inc |
| 34 | $(CC) $(CFLAGS) $< djot.o $(LIBLUA) -I . -I $(LUAHEADERS) -o $@ $(LDFLAGS) |
| 35 | |
| 36 | libdjot.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 | |
| 46 | djot.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 | |
| 52 | djot_combined.lua: $(LUA) $(MODULES) dumbParser.lua |
| 53 | $(LUA) combine.lua $(MODULES) > $@ |
| 54 | |
| 55 | djot_combined.inc: djot_combined.lua |
| 56 | echo "unsigned char djot_combined_lua[] = {" > $@ |
| 57 | (cat $< && printf "\0") | xxd -i >> $@ |
| 58 | echo "};" >> $@ |
| 59 | |
| 60 | djot_main.inc: ../bin/main.lua |
| 61 | echo "unsigned char djot_main_lua[] = {" > $@ |
| 62 | (cat $< && printf "\0") | xxd -i >> $@ |
| 63 | echo "};" >> $@ |
| 64 | |
| 65 | dumbParser.lua: |
| 66 | curl -L https://github.com/ReFreezed/DumbLuaParser/releases/download/2.3.0/dumbParser.lua > $@ |
| 67 | |
| 68 | wasm: djot.js |
| 69 | .PHONY: wasm |
| 70 | |
| 71 | # This also creates djot.wasm |
| 72 | djot.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 | |
| 75 | clean: |
| 76 | rm -rf djot_combined.lua djot_combined.inc *.o test |
| 77 | distclean: clean |
| 78 | -rm -rf $(LUASRC) djot.js djot.wasm dumbParser.lua |
| 79 | .PHONY: clean |