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