1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#!/bin/sh -ex
if [ -e libluajit.a ]; then
mv libluajit.a liblua.a
fi
mkdir lua
tar -xvzf lua-*.tar.gz --directory="lua" --strip-components=1
mv luarocks-packaging/hardcoded.lua luarocks/src/luarocks/core/hardcoded.lua
cd luarocks
mkdir build-binary
patch -i /root/luarocks-packaging/all_in_one.patch binary/all_in_one
LUAROCKS_CROSS_COMPILING=1 lua5.4 binary/all_in_one
patch -i /root/luarocks-packaging/luarocks.exe.c.patch build-binary/luarocks.exe.c
cat build-binary/luarocks.exe.c | wc -l
gcc -o build-binary/luarocks.exe -Oz build-binary/luarocks.exe.c -I/root/lua/src /root/libbz2.a /root/libssl.a /root/libz.a /root/liblua.a -mconsole -mwindows -lm
LUAROCKS_CROSS_COMPILING=1 lua5.4 binary/all_in_one
patch -i /root/luarocks-packaging/luarocks.exe.c.patch build-binary/luarocks.exe.c
cat build-binary/luarocks.exe.c | wc -l
gcc -o build-binary/luarocks.exe -Oz build-binary/luarocks.exe.c -I/root/lua/src /root/libbz2.a /root/libssl.a /root/libz.a /root/liblua.a -mconsole -mwindows -lm
cp build-binary/luarocks.exe /root
#cd luarocks/binary
# mkdir -p build-windows-deps-cicd/lib
# cd build-windows-deps-cicd/lib
# cp /root/liblua.a .
# cp /root/libssl.a .
# cp /root/libz.a .
# cp /root/libbz2.a .
# cd ..
# mkdir bin
# cd bin
# cp /root/*.exe .
#
# mkdir -p windows-deps-cicd/lib
#
# cd ../../..
#LUA_BINDIR=binary/build-windows-deps-cicd/bin
#./configure --disable-incdir-check --with-lua=binary/build-windows-deps-cicd/bin --with-lua-lib=binary/build-windows-deps/lib
#make -f binary/Makefile.windows BUILD_WINDOWS_DEPS_DIR=
#LUAROCKS_CROSS_COMPILING=1 make binary LUA_DIR=binary/build-windows-deps-cicd/bin CC=gcc NM=nm BINARY_PLATFORM=windows
# all_in_one generates a series of files:
# dir .. "/luarocks/core/hardcoded.lua"
#
# SYSTEM = "windows"
# PROCESSOR = "x86" | "i686"
# FORCE_CONFIG = true
# IS_BINARY = true
#
# ---------------------
# Ok this file is actually pretty involved
# I think the strategy is to modify all_in_one to not call main(), and instead
# call generate() directly. This will output, among other things, luarocks.exe.c,
# (and compile it), but we can re-compile with different cflags if we want.
# We probably also need a bunch of precompiled windows .a to get it to compile.
# TARGET_DIR .. "/" .. program_name .. ".exe.c"
#
# [[static const char* progname = "<program_name>";]]
# <c_preamble>
# [[static void load_main(lua_State* L) {]]
# <bin2c src/bin/luarocks>
# [[if(luaL_loadbuffer(L, code, sizeof(code), "<program_name>") != LUA_OK) {]]
# [[ fatal(lua_tostring(L, -1));]]
# [[}]]
# [[}]]
#
# ----------------------
# Lets modify all_in_one: delete the last line that calls main() and replace it
# with:
# cfg.init()
# cfg.variables.LUA_INCDIR_OK = true
# cfg.variables.LUA_LIBDIR_OK = true
# fs.init()
# generate(MAIN_PROGRAM, "src", {EXCLUDE, "^bin/?"})
# Make the output directory
# mkdir build-binary
# Then call it like:
# LUAROCKS_CROSS_COMPILING=1 lua5.4 binary/all_in_one
# Patches to make all_in_one work with lua 5.1:
# Lua 5.1 never defined LUA_OK, which all_in_one uses to check luaL_loadbuffer(),
# define it in the preamble if it doesn't already exist.
#ifndef LUA_OK
#define LUA_OK 0
#endif
# Lua 5.1 doesn't define lua_copy or luaL_traceback,
# for lua_copy, we can rewrite with lua_replace() since we're moving the top element.
# line 137: lua_replace(L,3);
#
# Lua 5.1 doesn't define luaL_traceback(), here's what it looks like in 5.1 lua.c:
#ifndef luaL_traceback
# static inline void
# luaL_traceback(lua_State *L, lua_State *L1, const char *msg, int level){
# lua_getfield(L, LUA_GLOBALSINDEX, "debug");
# if(!lua_istable(L,-1)){
# lua_pop(L,1);
# return;
# }
# lua_getfield(L, -1, "traceback");
# if(!lua_isfunction(L,-1)){
# lua_pop(L,2);
# return;
# }
# lua_pushthread(L1);
# lua_pushstring(L,msg);
# lua_pushnumber(L,level);
# lua_call(L,3,1);
# return;
# }
#endif
# Finally, use gcc to build:
#gcc -o build-binary/luarocks.exe -Os build-binary/luarocks.exe.c -I/root/lua/src /root/libz2.a /root/libssl.a /root/libz.a /root/liblua.a -mconsole -mwindows -lm
|