1# Makefile for (cross)compiling luacheck binaries.
2# Do not use directly, run scripts/build-binaries.sh instead.
3
4LUA_VERSION= 5.3.5
5LFS_VERSION= 1.7.0-2
6ARGPARSE_VERSION= 0.6.0-1
7LANES_VERSION= 3.10.1-1
8
9LUA_DIR= lua-$(LUA_VERSION)
10LFS_DIR= luafilesystem-$(LFS_VERSION)/luafilesystem
11ARGPARSE_DIR= argparse-$(ARGPARSE_VERSION)/argparse
12LANES_DIR= lanes-$(LANES_VERSION)/lanes
13
14BASE_CC= gcc
15BASE_AR= ar rc
16BASE_RANLIB= ranlib
17BASE_STRIP= strip
18
19CROSS=
20CC= $(CROSS)$(BASE_CC)
21CFLAGS= -O2 -Wall -Wextra
22AR= $(CROSS)$(BASE_AR)
23RANLIB= $(CROSS)$(BASE_RANLIB)
24STRIP= $(CROSS)$(BASE_STRIP)
25
26SUFFIX=
27TARGET= bin/luacheck$(SUFFIX)
28
29LUA_O= $(patsubst %.c,%.o,$(filter-out $(addprefix $(LUA_DIR)/src/,lua.c luac.c print.c),$(wildcard $(LUA_DIR)/src/*.c)))
30LUA_A= $(LUA_DIR)/src/liblua.a
31LFS_O= $(patsubst %.c,%.o,$(wildcard $(LFS_DIR)/src/*.c))
32LFS_A= $(LFS_DIR)/src/lfs.a
33LANES_O= $(patsubst %.c,%.o,$(wildcard $(LANES_DIR)/src/*.c))
34LANES_A= $(LANES_DIR)/src/lanes.a
35
36default:	$(TARGET)
37
38$(LUA_DIR):
39	@echo
40	@echo "=== Downloading Lua $(LUA_VERSION) ==="
41	@echo
42	curl "https://www.lua.org/ftp/$(LUA_DIR).tar.gz" | tar xz
43
44$(LFS_DIR):
45	@echo
46	@echo "=== Downloading LuaFileSystem $(LFS_VERSION) ==="
47	@echo
48	luarocks unpack luafilesystem $(LFS_VERSION)
49
50$(ARGPARSE_DIR):
51	@echo
52	@echo "=== Downloading argparse $(ARGPARSE_VERSION) ==="
53	@echo
54	luarocks unpack argparse $(ARGPARSE_VERSION)
55
56$(LANES_DIR):
57	@echo
58	@echo "=== Downloading Lanes $(LANES_VERSION) ==="
59	@echo
60	luarocks unpack lanes $(LANES_VERSION)
61
62fetch:	$(LUA_DIR) $(LFS_DIR) $(ARGPARSE_DIR) $(LANES_DIR)
63
64$(LUA_O):	CFLAGS+= $(if $(LINUX),-DLUA_USE_POSIX)
65$(LUA_A):	$(LUA_O)
66$(LFS_O):	CFLAGS+= -I$(LUA_DIR)/src
67$(LFS_A):	$(LFS_O)
68$(LANES_O):	CFLAGS+= -I$(LUA_DIR)/src
69$(LANES_A):	$(LANES_O)
70
71%.a:
72	$(AR) $@ $^
73	$(RANLIB) $@
74
75luacheck.luastatic.c: $(LUA_A) $(LFS_A) $(LANES_A)
76	cp $(LUA_A) .
77	cp $(LFS_A) .
78	cp $(ARGPARSE_DIR)/src/argparse.lua .
79	cp $(LANES_A) .
80	cp $(LANES_DIR)/src/lanes.lua .
81	cp -r ../src/luacheck .
82	CC="" luastatic bin/luacheck.lua luacheck/*.lua luacheck/*/*.lua luacheck/*/*/*.lua argparse.lua lanes.lua liblua.a lfs.a lanes.a
83
84$(TARGET):	luacheck.luastatic.c
85	$(CC) $(if $(LINUX),-static) -Os $< $(LUA_A) $(LFS_A) $(LANES_A) -I$(LUA_DIR)/src -lm $(if $(LINUX),-lpthread) -o $@
86	$(STRIP) $@
87
88clean:
89	rm -f $(TARGET) luacheck.luastatic.c
90	rm -f $(LUA_O) $(LUA_A) $(LFS_O) $(LFS_A) $(LANES_O) $(LANES_A)
91	rm -f argparse.lua lanes.lua liblua.a lfs.a lanes.a
92	rm -rf luacheck
93
94.PHONY: default fetch clean
95