Skip to content

Commit 7f48a16

Browse files
committed
fix: vendor build for older and faster LuaJIT
There's some regression in LuaJIT performance where the key metric that indicates if a build is slow or fast is file size, where smaller DLLs are faster. Use a specific older commit c7db8255e1eb59f933fac7bc9322f0e4f8ddc6e6 of LuaJIT in a local vcpkg-ports tree to mitigate runtime problems with gem dropdowns for now.
1 parent 59c5f59 commit 7f48a16

11 files changed

Lines changed: 353 additions & 2 deletions

vcpkg-configuration.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
{
88
"kind": "filesystem",
99
"path": "vcpkg-ports",
10-
"baseline": "2022-08-14",
11-
"packages": []
10+
"baseline": "2024-03-26",
11+
"packages": ["luajit"]
1212
}
1313
]
1414
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
diff --git a/src/Makefile b/src/Makefile
2+
index c4d0b14d..2c9769b9 100644
3+
--- a/src/Makefile
4+
+++ b/src/Makefile
5+
@@ -302,9 +302,6 @@ ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector
6+
TARGET_XCFLAGS+= -fno-stack-protector
7+
endif
8+
ifeq (Darwin,$(TARGET_SYS))
9+
- ifeq (,$(MACOSX_DEPLOYMENT_TARGET))
10+
- $(error missing: export MACOSX_DEPLOYMENT_TARGET=XX.YY)
11+
- endif
12+
TARGET_STRIP+= -x
13+
TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
14+
TARGET_DYNXLDOPTS=
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
diff --git a/etc/luajit.pc b/etc/luajit.pc
2+
index 39e1e57..3837d3b 100644
3+
--- a/etc/luajit.pc
4+
+++ b/etc/luajit.pc
5+
@@ -21,5 +21,5 @@ URL: https://luajit.org
6+
Version: ${version}
7+
Requires:
8+
Libs: -L${libdir} -l${libname}
9+
-Libs.private: -Wl,-E -lm -ldl
10+
+Libs.private: -lm -ldl
11+
Cflags: -I${includedir}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
all:
2+
@echo _CL_ = $(_CL_)
3+
@echo _LINK_ = $(_LINK_)
4+
cd src && .\msvcbuild.bat $(MSVCBUILD_OPTIONS)
5+
6+
install: src/luajit.exe
7+
-mkdir "$(INSTALLDIR)"
8+
-mkdir "$(INSTALLDIR)\bin"
9+
copy src\luajit.exe "$(INSTALLDIR)\bin\"
10+
if exist src\lua51.dll copy src\lua51.dll "$(INSTALLDIR)\bin\"
11+
-mkdir "$(INSTALLDIR)\lib"
12+
copy src\lua51.lib "$(INSTALLDIR)\lib\"
13+
-mkdir "$(INSTALLDIR)\include"
14+
-mkdir "$(INSTALLDIR)\include\luajit"
15+
copy src/lua.h "$(INSTALLDIR)\include\luajit\"
16+
copy src/luajit.h "$(INSTALLDIR)\include\luajit\"
17+
copy src/luaconf.h "$(INSTALLDIR)\include\luajit\"
18+
copy src/lualib.h "$(INSTALLDIR)\include\luajit\"
19+
copy src/lauxlib.h "$(INSTALLDIR)\include\luajit\"
20+
copy src/lua.hpp "$(INSTALLDIR)\include\luajit\"
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
LJARCH=
6+
LUAJIT_BUILDMODE=
7+
LUAJIT_BUILDVM_X=
8+
LUAJIT_DASM_ARCHS=
9+
LUAJIT_PREFIX=
10+
for OPTION; do
11+
case "${OPTION}" in
12+
--prefix=*)
13+
LUAJIT_PREFIX="${OPTION#--prefix=}"
14+
;;
15+
BUILDMODE=*)
16+
LUAJIT_BUILDMODE="${OPTION#BUILDMODE=}"
17+
;;
18+
BUILDVM_X=*)
19+
LUAJIT_BUILDVM_X="${OPTION#BUILDVM_X=}"
20+
;;
21+
DASM_ARCHS=*)
22+
LUAJIT_DASM_ARCHS="${OPTION#DASM_ARCHS=}"
23+
;;
24+
LJARCH=*)
25+
LJARCH="${OPTION#LJARCH=}"
26+
;;
27+
esac
28+
done
29+
30+
cat > Makefile.vcpkg <<END_MAKEFILE ;
31+
32+
COMMON_OPTIONS += 'E=@:' 'Q='
33+
COMMON_OPTIONS += 'BUILDMODE=${LUAJIT_BUILDMODE}'
34+
COMMON_OPTIONS += 'PREFIX=${LUAJIT_PREFIX}'
35+
COMMON_OPTIONS += 'INSTALL_TNAME=luajit'
36+
37+
BUILD_OPTIONS += 'CC=${CC}'
38+
BUILD_OPTIONS += 'CCDEBUG='
39+
BUILD_OPTIONS += 'CFLAGS=${CPPFLAGS} ${CFLAGS}'
40+
BUILD_OPTIONS += 'LDFLAGS=${LDFLAGS}'
41+
BUILD_OPTIONS += 'LIBS=${LIBS}'
42+
43+
ifeq (${LJARCH},)
44+
# native
45+
BUILDVM_PREFIX = ${LUAJIT_PREFIX}/manual-tools/luajit
46+
DASM_ARCHS = ${LUAJIT_DASM_ARCHS}
47+
else
48+
# cross
49+
BUILD_OPTIONS += 'HOST_CC=:'
50+
BUILD_OPTIONS += 'BUILDVM_T='
51+
BUILD_OPTIONS += 'BUILDVM_X=${LUAJIT_BUILDVM_X}'
52+
endif
53+
54+
# used by src/Makefile, best effort from manual '<CC> [-m32] -E src/lj_arch.h -dM'
55+
TARGET_TESTARCH_COMMON += 'LJ_LE 1' 'LJ_HASJIT 1' 'LJ_HASFFI 1' 'LJ_ARCH_HASFPU 1' 'LJ_ABI_SOFTFP 0'
56+
TARGET_TESTARCH_COMMON_32 += \$(TARGET_TESTARCH_COMMON) 'LJ_ARCH_BITS 32'
57+
TARGET_TESTARCH_COMMON_64 += \$(TARGET_TESTARCH_COMMON) 'LJ_ARCH_BITS 64' 'LJ_TARGET_GC64 1'
58+
TARGET_TESTARCH_arm = \$(TARGET_TESTARCH_COMMON_32) LJ_TARGET_ARM
59+
TARGET_TESTARCH_arm64 = \$(TARGET_TESTARCH_COMMON_64) LJ_TARGET_ARM64 'LJ_ARCH_VERSION 80'
60+
TARGET_TESTARCH_x86 = \$(TARGET_TESTARCH_COMMON_32) LJ_TARGET_X86
61+
TARGET_TESTARCH_x64 = \$(TARGET_TESTARCH_COMMON_64) LJ_TARGET_X64 'LJ_FR2 1'
62+
63+
all:
64+
\$(MAKE) clean \$(COMMON_OPTIONS) \$(BUILD_OPTIONS)
65+
\$(MAKE) all \$(COMMON_OPTIONS) \$(BUILD_OPTIONS)
66+
for DA in \$(DASM_ARCHS); do \\
67+
rm -f src/host/buildvm_arch.h src/host/*.o; \\
68+
case "\$\$DA" in \\
69+
arm) TARGET_TESTARCH="\$(TARGET_TESTARCH_arm)" ;; \\
70+
arm64) TARGET_TESTARCH="\$(TARGET_TESTARCH_arm64)" ;; \\
71+
x86) TARGET_TESTARCH="\$(TARGET_TESTARCH_x86)" ;; \\
72+
x64) TARGET_TESTARCH="\$(TARGET_TESTARCH_x64)" ;; \\
73+
esac ; \\
74+
\$(MAKE) -C src host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX) \$(COMMON_OPTIONS) \$(BUILD_OPTIONS) \\
75+
BUILDVM_T=host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX) "TARGET_TESTARCH=\$\${TARGET_TESTARCH}" \\
76+
|| exit 1; \\
77+
done
78+
79+
install:
80+
\$(MAKE) install \$(COMMON_OPTIONS)
81+
for DA in \$(DASM_ARCHS); do \\
82+
mkdir -p "\$\${DESTDIR}\$(BUILDVM_PREFIX)"; \\
83+
install -m 0755 "src/host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" "\$\${DESTDIR}\$(BUILDVM_PREFIX)/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" || exit 1 ; \\
84+
done
85+
86+
END_MAKEFILE
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Package information for LuaJIT to be used by pkg-config.
2+
majver=2
3+
minver=1
4+
relver=0
5+
version=${majver}.${minver}.${relver}-beta3
6+
abiver=51
7+
8+
prefix=@PREFIX@
9+
multilib=lib
10+
exec_prefix=${prefix}
11+
libdir=${exec_prefix}/${multilib}
12+
libname=lua${abiver}
13+
includedir=${prefix}/include/luajit
14+
15+
INSTALL_LMOD=${prefix}/share/lua/${abiver}
16+
INSTALL_CMOD=${prefix}/${multilib}/lua/${abiver}
17+
18+
Name: LuaJIT
19+
Description: Just-in-time compiler for Lua
20+
URL: https://luajit.org
21+
Version: ${version}
22+
Requires:
23+
Libs: -L${libdir} -l${libname}
24+
Cflags: -I${includedir} @LJIT_MSVC_PC_CFLAGS@
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
diff --git a/src/msvcbuild.bat b/src/msvcbuild.bat
2+
index 045965f8..8b0a4ace 100644
3+
--- a/src/msvcbuild.bat
4+
+++ b/src/msvcbuild.bat
5+
@@ -69,10 +69,9 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
6+
@set BUILDTYPE=debug
7+
@set LJCOMPILE=%LJCOMPILE% /Zi %DEBUGCFLAGS%
8+
:NODEBUG
9+
-@set LJLINK=%LJLINK% /%BUILDTYPE%
10+
@if "%1"=="amalg" goto :AMALGDLL
11+
@if "%1"=="static" goto :STATIC
12+
-%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c
13+
+%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c /Fdlua51.pdb
14+
@if errorlevel 1 goto :BAD
15+
%LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj
16+
@if errorlevel 1 goto :BAD
17+
@@ -92,7 +91,7 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
18+
if exist %LJDLLNAME%.manifest^
19+
%LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2
20+
21+
-%LJCOMPILE% luajit.c
22+
+%LJCOMPILE% luajit.c /Fdluajit.pdb
23+
@if errorlevel 1 goto :BAD
24+
%LJLINK% /out:luajit.exe luajit.obj %LJLIBNAME%
25+
@if errorlevel 1 goto :BAD
26+
@@ -114,4 +113,5 @@ if exist luajit.exe.manifest^
27+
@goto :END
28+
:FAIL
29+
@echo You must open a "Visual Studio Command Prompt" to run this script
30+
+exit 1
31+
:END
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
set(extra_patches "")
2+
if (VCPKG_TARGET_IS_OSX)
3+
list(APPEND extra_patches 005-do-not-pass-ld-e-macosx.patch)
4+
endif()
5+
6+
vcpkg_from_github(
7+
OUT_SOURCE_PATH SOURCE_PATH
8+
REPO LuaJIT/LuaJIT
9+
REF c7db8255e1eb59f933fac7bc9322f0e4f8ddc6e6 #2023-04-16
10+
SHA512 fffe87ea87cbf9e9614d1bd0d95746655528787ea92a4aa26f9dcd8e5c02fb330ce0092419e8444c3a2f8bcd575c2d580bbcc81295d8fe6bd4d9b48072ff2609
11+
HEAD_REF master
12+
PATCHES
13+
msvcbuild.patch
14+
003-do-not-set-macosx-deployment-target.patch
15+
${extra_patches}
16+
)
17+
18+
vcpkg_cmake_get_vars(cmake_vars_file)
19+
include("${cmake_vars_file}")
20+
21+
if(VCPKG_DETECTED_MSVC)
22+
# Due to lack of better MSVC cross-build support, just always build the host
23+
# minilua tool with the target toolchain. This will work for native builds and
24+
# for targeting x86 from x64 hosts. (UWP and ARM64 is unsupported.)
25+
vcpkg_list(SET options)
26+
set(PKGCONFIG_CFLAGS "")
27+
if (VCPKG_LIBRARY_LINKAGE STREQUAL "static")
28+
list(APPEND options "MSVCBUILD_OPTIONS=static")
29+
else()
30+
set(PKGCONFIG_CFLAGS "/DLUA_BUILD_AS_DLL=1")
31+
endif()
32+
33+
vcpkg_install_nmake(SOURCE_PATH "${SOURCE_PATH}"
34+
PROJECT_NAME "${CMAKE_CURRENT_LIST_DIR}/Makefile.nmake"
35+
OPTIONS
36+
${options}
37+
)
38+
39+
configure_file("${CMAKE_CURRENT_LIST_DIR}/luajit.pc.win.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/luajit.pc" @ONLY)
40+
if(NOT VCPKG_BUILD_TYPE)
41+
configure_file("${CMAKE_CURRENT_LIST_DIR}/luajit.pc.win.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/luajit.pc" @ONLY)
42+
endif()
43+
44+
vcpkg_copy_pdbs()
45+
else()
46+
vcpkg_list(SET options)
47+
if(VCPKG_CROSSCOMPILING)
48+
list(APPEND options
49+
"LJARCH=${VCPKG_TARGET_ARCHITECTURE}"
50+
"BUILDVM_X=${CURRENT_HOST_INSTALLED_DIR}/manual-tools/${PORT}/buildvm-${VCPKG_TARGET_ARCHITECTURE}${VCPKG_HOST_EXECUTABLE_SUFFIX}"
51+
)
52+
endif()
53+
54+
vcpkg_list(SET make_options "EXECUTABLE_SUFFIX=${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
55+
set(strip_options "") # cf. src/Makefile
56+
if(VCPKG_TARGET_IS_OSX)
57+
vcpkg_list(APPEND make_options "TARGET_SYS=Darwin")
58+
set(strip_options " -x")
59+
elseif(VCPKG_TARGET_IS_IOS)
60+
vcpkg_list(APPEND make_options "TARGET_SYS=iOS")
61+
set(strip_options " -x")
62+
elseif(VCPKG_TARGET_IS_LINUX)
63+
vcpkg_list(APPEND make_options "TARGET_SYS=Linux")
64+
elseif(VCPKG_TARGET_IS_WINDOWS)
65+
vcpkg_list(APPEND make_options "TARGET_SYS=Windows")
66+
set(strip_options " --strip-unneeded")
67+
endif()
68+
69+
set(dasm_archs "")
70+
if("buildvm-32" IN_LIST FEATURES)
71+
string(APPEND dasm_archs " arm x86")
72+
endif()
73+
if("buildvm-64" IN_LIST FEATURES)
74+
string(APPEND dasm_archs " arm64 x64")
75+
endif()
76+
77+
file(COPY "${CMAKE_CURRENT_LIST_DIR}/configure" DESTINATION "${SOURCE_PATH}")
78+
vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}"
79+
COPY_SOURCE
80+
OPTIONS
81+
"BUILDMODE=${VCPKG_LIBRARY_LINKAGE}"
82+
${options}
83+
OPTIONS_RELEASE
84+
"DASM_ARCHS=${dasm_archs}"
85+
)
86+
vcpkg_install_make(
87+
MAKEFILE "Makefile.vcpkg"
88+
OPTIONS
89+
${make_options}
90+
"TARGET_AR=${VCPKG_DETECTED_CMAKE_AR} rcus"
91+
"TARGET_STRIP=${VCPKG_DETECTED_CMAKE_STRIP}${strip_options}"
92+
)
93+
endif()
94+
95+
file(REMOVE_RECURSE
96+
"${CURRENT_PACKAGES_DIR}/debug/include"
97+
"${CURRENT_PACKAGES_DIR}/debug/lib/lua"
98+
"${CURRENT_PACKAGES_DIR}/debug/share"
99+
"${CURRENT_PACKAGES_DIR}/lib/lua"
100+
"${CURRENT_PACKAGES_DIR}/share/lua"
101+
"${CURRENT_PACKAGES_DIR}/share/man"
102+
)
103+
104+
vcpkg_copy_tools(TOOL_NAMES luajit AUTO_CLEAN)
105+
106+
vcpkg_fixup_pkgconfig()
107+
108+
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYRIGHT")
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"name": "luajit",
3+
"version-date": "2023-04-16",
4+
"port-version": 0,
5+
"description": "LuaJIT is a Just-In-Time (JIT) compiler for the Lua programming language.",
6+
"homepage": "https://github.com/LuaJIT/LuaJIT",
7+
"license": "MIT",
8+
"supports": "!uwp & !(arm64 & windows)",
9+
"dependencies": [
10+
{
11+
"name": "luajit",
12+
"host": true,
13+
"features": [
14+
"buildvm-64"
15+
],
16+
"platform": "!native & (arm64 | x64) & (!windows | mingw)"
17+
},
18+
{
19+
"name": "luajit",
20+
"host": true,
21+
"features": [
22+
"buildvm-32"
23+
],
24+
"platform": "!native & ((arm & !arm64) | x86) & (!windows | mingw)"
25+
},
26+
{
27+
"name": "vcpkg-cmake",
28+
"host": true
29+
},
30+
{
31+
"name": "vcpkg-cmake-config",
32+
"host": true
33+
},
34+
{
35+
"name": "vcpkg-cmake-get-vars",
36+
"host": true
37+
}
38+
],
39+
"features": {
40+
"buildvm-32": {
41+
"description": "Install host tools for 32 bit targets",
42+
"supports": "native & ((arm & !arm64) | x86) & (!windows | mingw)"
43+
},
44+
"buildvm-64": {
45+
"description": "Install host tools for 64 bit targets",
46+
"supports": "native & (arm64 | x64) & (!windows | mingw)"
47+
}
48+
}
49+
}

vcpkg-ports/versions/baseline.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
{
22
"2022-08-14": {
33
"luajit": { "baseline": "2022-08-11", "port-version": 1 }
4+
},
5+
"2024-03-26": {
6+
"luajit": { "baseline": "2023-04-16", "port-version": 0 }
47
}
58
}

0 commit comments

Comments
 (0)