[luajit] Update, arm64-windows, test port (#49565)

This commit is contained in:
Kai Pastor 2026-01-25 09:22:19 +01:00 committed by GitHub
parent 36d042a7e6
commit 884cae8dd3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 223 additions and 83 deletions

View File

@ -1,14 +1,13 @@
diff --git a/src/Makefile b/src/Makefile
index 30d64be..b753ea1 100644
index bac0341e..b867326f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -316,9 +316,6 @@ ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector
TARGET_XCFLAGS+= -fno-stack-protector
@@ -319,7 +319,7 @@ ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector
endif
ifeq (Darwin,$(TARGET_SYS))
- ifeq (,$(MACOSX_DEPLOYMENT_TARGET))
ifeq (,$(MACOSX_DEPLOYMENT_TARGET))
- $(error missing: export MACOSX_DEPLOYMENT_TARGET=XX.YY)
- endif
+ # relying on vcpkg toolchain flags
endif
TARGET_STRIP+= -x
TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC

View File

@ -1,11 +0,0 @@
diff --git a/etc/luajit.pc b/etc/luajit.pc
index 39e1e57..3837d3b 100644
--- a/etc/luajit.pc
+++ b/etc/luajit.pc
@@ -21,5 +21,5 @@ URL: https://luajit.org
Version: ${version}
Requires:
Libs: -L${libdir} -l${libname}
-Libs.private: -Wl,-E -lm -ldl
+Libs.private: -lm -ldl
Cflags: -I${includedir}

View File

@ -7,6 +7,7 @@ LUAJIT_BUILDMODE=
LUAJIT_BUILDVM_X=
LUAJIT_DASM_ARCHS=
LUAJIT_PREFIX=
LUAJIT_HOST_LUA=
for OPTION; do
case "${OPTION}" in
--prefix=*)
@ -21,6 +22,9 @@ for OPTION; do
DASM_ARCHS=*)
LUAJIT_DASM_ARCHS="${OPTION#DASM_ARCHS=}"
;;
HOST_LUA=*)
LUAJIT_HOST_LUA="${OPTION#HOST_LUA=}"
;;
LJARCH=*)
LJARCH="${OPTION#LJARCH=}"
;;
@ -33,6 +37,7 @@ COMMON_OPTIONS += 'E=@:' 'Q='
COMMON_OPTIONS += 'BUILDMODE=${LUAJIT_BUILDMODE}'
COMMON_OPTIONS += 'PREFIX=${LUAJIT_PREFIX}'
COMMON_OPTIONS += 'INSTALL_TNAME=luajit'
COMMON_OPTIONS += 'INSTALL_TSYMNAME=luajit-symlink'
BUILD_OPTIONS += 'CC=${CC}'
BUILD_OPTIONS += 'CCDEBUG='
@ -49,6 +54,7 @@ else
BUILD_OPTIONS += 'HOST_CC=:'
BUILD_OPTIONS += 'BUILDVM_T='
BUILD_OPTIONS += 'BUILDVM_X=${LUAJIT_BUILDVM_X}'
BUILD_OPTIONS += 'HOST_LUA=${LUAJIT_HOST_LUA}'
endif
# used by src/Makefile, best effort from manual '<CC> [-m32] -E src/lj_arch.h -dM'
@ -78,9 +84,12 @@ all:
install:
\$(MAKE) install \$(COMMON_OPTIONS)
ifeq (${LJARCH},)
mkdir -p "\$\${DESTDIR}\$(BUILDVM_PREFIX)"
install -m 0755 "src/host/minilua\$(EXECUTABLE_SUFFIX)" "\$\${DESTDIR}\$(BUILDVM_PREFIX)/minilua\$(EXECUTABLE_SUFFIX)"
for DA in \$(DASM_ARCHS); do \\
mkdir -p "\$\${DESTDIR}\$(BUILDVM_PREFIX)"; \\
install -m 0755 "src/host/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" "\$\${DESTDIR}\$(BUILDVM_PREFIX)/buildvm-\$\$DA\$(EXECUTABLE_SUFFIX)" || exit 1 ; \\
done
endif
END_MAKEFILE

View File

@ -1,29 +1,48 @@
diff --git a/src/msvcbuild.bat b/src/msvcbuild.bat
index aab4ef1..e92c486 100644
index e0df88bc..0ccf4d04 100644
--- a/src/msvcbuild.bat
+++ b/src/msvcbuild.bat
@@ -79,10 +79,9 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
@set LJCOMPILE=%LJCOMPILE% /Zi %DEBUGCFLAGS%
@set LJLINK=%LJLINK% /opt:ref /opt:icf /incremental:no
:NODEBUG
-@set LJLINK=%LJLINK% /%BUILDTYPE%
@if "%1"=="amalg" goto :AMALGDLL
@if "%1"=="static" goto :STATIC
-%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c
+%LJCOMPILE% /DLUA_BUILD_AS_DLL lj_*.c lib_*.c /Fdlua51.pdb
@if errorlevel 1 goto :BAD
%LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj
@if errorlevel 1 goto :BAD
@@ -102,7 +101,7 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
@@ -18,12 +18,14 @@
@rem Add more debug flags here, e.g. DEBUGCFLAGS=/DLUA_USE_ASSERT
@set DEBUGCFLAGS=
@set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline
-@set LJDYNBUILD=/DLUA_BUILD_AS_DLL /MD
-@set LJDYNBUILD_DEBUG=/DLUA_BUILD_AS_DLL /MDd
-@set LJCOMPILETARGET=/Zi
-@set LJLINKTYPE=/DEBUG /RELEASE
-@set LJLINKTYPE_DEBUG=/DEBUG
-@set LJLINKTARGET=/OPT:REF /OPT:ICF /INCREMENTAL:NO
+@rem vvv vcpkg flags via env
+@set LJDYNBUILD=/DLUA_BUILD_AS_DLL
+@set LJDYNBUILD_DEBUG=/DLUA_BUILD_AS_DLL
+@set LJCOMPILETARGET=
+@set LJLINKTYPE=
+@set LJLINKTYPE_DEBUG=
+@set LJLINKTARGET=
+@rem ^^^ vcpkg flags via env
@set LJLINK=link /nologo
@set LJMT=mt /nologo
@set LJLIB=lib /nologo /nodefaultlib
@@ -141,7 +143,7 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
if exist %LJDLLNAME%.manifest^
%LJMT% -manifest %LJDLLNAME%.manifest -outputresource:%LJDLLNAME%;2
-%LJCOMPILE% luajit.c
+%LJCOMPILE% luajit.c /Fdluajit.pdb
@if errorlevel 1 goto :BAD
%LJLINK% /out:luajit.exe luajit.obj %LJLIBNAME%
%LJLINK% /OUT:luajit.exe luajit.obj %LJLIBNAME%
@if errorlevel 1 goto :BAD
@@ -124,4 +123,5 @@ if exist luajit.exe.manifest^
@@ -157,6 +159,9 @@ if exist luajit.exe.manifest^
@goto :END
:SETHOSTVARS
@if "%VSCMD_ARG_HOST_ARCH%_%VSCMD_ARG_TGT_ARCH%" equ "x64_arm64" (
+ @echo Temporarily configuring MSVC for x64 host tools while building for arm64
+ set _CL_=
+ set _LINK_=
call "%VSINSTALLDIR%Common7\Tools\VsDevCmd.bat" -arch=%VSCMD_ARG_HOST_ARCH% -no_logo
echo on
)
@@ -169,4 +174,5 @@ if exist luajit.exe.manifest^
@goto :END
:FAIL
@echo You must open a "Visual Studio Command Prompt" to run this script

View File

@ -1,27 +1,30 @@
set(extra_patches "")
if (VCPKG_TARGET_IS_OSX)
list(APPEND extra_patches 005-do-not-pass-ld-e-macosx.patch)
endif()
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO LuaJIT/LuaJIT
REF d0e88930ddde28ff662503f9f20facf34f7265aa #2023-01-04
SHA512 e4111b2d7eeb05676c62d69da13a380a51d98f082c0be575a414c09ee27ff17d101b5b4a95e1b8a1bad14d55a4d2b305718a11878fbf36e0d3d48e62ba03407f
REF 707c12bf00dafdfd3899b1a6c36435dbbf6c7022 # 2026-01-09
SHA512 c02b3600577936b9de04358fe03b3d995ee68e3416174c287022100aa0862b4e138c88e459b18a590dda7c08c1b6aded440bebfc80bbead2ae6b54cc4c82a2e9
HEAD_REF master
PATCHES
msvcbuild.patch
003-do-not-set-macosx-deployment-target.patch
${extra_patches}
)
vcpkg_cmake_get_vars(cmake_vars_file)
include("${cmake_vars_file}")
if(VCPKG_DETECTED_MSVC)
# Due to lack of better MSVC cross-build support, just always build the host
# minilua tool with the target toolchain. This will work for native builds and
# for targeting x86 from x64 hosts. (UWP and ARM64 is unsupported.)
set(VSCMD_ARG_TGT_ARCH "${VCPKG_TARGET_ARCHITECTURE}")
if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
set(host_arch $ENV{PROCESSOR_ARCHITEW6432})
else()
set(host_arch $ENV{PROCESSOR_ARCHITECTURE})
endif()
if(host_arch MATCHES "(amd|AMD)64")
set(ENV{VSCMD_ARG_HOST_ARCH} "x64")
endif()
endif()
vcpkg_list(SET options)
if (VCPKG_LIBRARY_LINKAGE STREQUAL "static")
list(APPEND options "MSVCBUILD_OPTIONS=static")
@ -43,12 +46,17 @@ if(VCPKG_DETECTED_MSVC)
endif()
vcpkg_copy_pdbs()
# jit including the specific vmdef.lua generated during the build
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/src/jit" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/luajit/lua")
else()
vcpkg_list(SET options)
if(VCPKG_CROSSCOMPILING)
list(APPEND options
"LJARCH=${VCPKG_TARGET_ARCHITECTURE}"
"BUILDVM_X=${CURRENT_HOST_INSTALLED_DIR}/manual-tools/${PORT}/buildvm-${VCPKG_TARGET_ARCHITECTURE}${VCPKG_HOST_EXECUTABLE_SUFFIX}"
"HOST_LUA=${CURRENT_HOST_INSTALLED_DIR}/manual-tools/${PORT}/minilua${VCPKG_HOST_EXECUTABLE_SUFFIX}"
)
endif()
@ -102,10 +110,9 @@ file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/share/man"
)
file(REMOVE "${CURRENT_PACKAGES_DIR}/bin/luajit-symlink" "${CURRENT_PACKAGES_DIR}/debug/bin/luajit-symlink")
vcpkg_copy_tools(TOOL_NAMES luajit AUTO_CLEAN)
vcpkg_fixup_pkgconfig()
file(COPY "${SOURCE_PATH}/src/jit/" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/luajit/jit")
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYRIGHT")

View File

@ -1,12 +1,19 @@
{
"name": "luajit",
"version-date": "2023-01-04",
"port-version": 7,
"version-date": "2026-01-09",
"description": "LuaJIT is a Just-In-Time (JIT) compiler for the Lua programming language.",
"homepage": "https://github.com/LuaJIT/LuaJIT",
"license": "MIT",
"supports": "!uwp & !(arm64 & windows)",
"supports": "!uwp",
"dependencies": [
{
"name": "luajit",
"host": true,
"features": [
"buildvm-32"
],
"platform": "!native & (arm32 | x86) & (!windows | mingw)"
},
{
"name": "luajit",
"host": true,
@ -15,14 +22,6 @@
],
"platform": "!native & (arm64 | x64) & (!windows | mingw)"
},
{
"name": "luajit",
"host": true,
"features": [
"buildvm-32"
],
"platform": "!native & ((arm & !arm64) | x86) & (!windows | mingw)"
},
{
"name": "vcpkg-cmake",
"host": true
@ -39,7 +38,7 @@
"features": {
"buildvm-32": {
"description": "Install host tools for 32 bit targets",
"supports": "native & ((arm & !arm64) | x86) & (!windows | mingw)"
"supports": "native & (arm32 | x86) & (!windows | mingw)"
},
"buildvm-64": {
"description": "Install host tools for 64 bit targets",

View File

@ -152,7 +152,6 @@ libxt:x64-windows=fail
live555(uwp)=fail
llgl(uwp)=fail # fails due to an outdated gcc version
log4cplus(uwp)=fail
luajit:arm64-windows=fail
luasec:x64-windows-static=fail
mesa:x64-linux=fail # Missing dependent libraries.
mesa:x64-windows-static=fail # Due to static crt.
@ -807,7 +806,7 @@ llgl:arm64-android=fail
llgl:x64-android=fail
llgl[vulkan]:x64-linux=feature-fails
llgl[vulkan](osx) = cascade # no vulkan sdk installed
luajit:arm-neon-android = cascade
luajit:arm-neon-android = cascade # needs same pointer size for host
luasec:x64-linux = cascade
luv:arm64-windows = cascade
magma(uwp | osx) = cascade

View File

@ -0,0 +1,40 @@
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
vcpkg_find_acquire_program(PKGCONFIG)
set(ENV{PKG_CONFIG} "${PKGCONFIG}")
vcpkg_cmake_configure(
SOURCE_PATH "${CURRENT_PORT_DIR}/project"
)
vcpkg_cmake_install()
if("run-programs" IN_LIST FEATURES)
# luajit executable"
message(STATUS "Running luajit")
vcpkg_execute_required_process(
COMMAND "${CURRENT_INSTALLED_DIR}/tools/luajit/luajit" -e "print(package.path)"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
LOGNAME execute-luajit-${TARGET_TRIPLET}
)
# luajit executable and "${CURRENT_INSTALLED_DIR}/tools/luajit/jit/v.lua"
message(STATUS "Running luajit with v.lua")
vcpkg_execute_required_process(
COMMAND "${CURRENT_INSTALLED_DIR}/tools/luajit/luajit" -jv -e "for i=1,1000 do for j=1,1000 do end end"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
LOGNAME execute-luajit-v.lua-${TARGET_TRIPLET}
)
# user executable (this port)
if(CMAKE_HOST_WIN32)
vcpkg_host_path_list(PREPEND ENV{PATH} "${CURRENT_INSTALLED_DIR}/bin")
elseif(CMAKE_HOST_APPLE)
vcpkg_host_path_list(PREPEND ENV{DYLD_LIBRARY_PATH} "${CURRENT_INSTALLED_DIR}/lib")
else()
vcpkg_host_path_list(PREPEND ENV{LD_LIBRARY_PATH} "${CURRENT_INSTALLED_DIR}/lib")
endif()
message(STATUS "Running main")
vcpkg_execute_required_process(
COMMAND "${CURRENT_PACKAGES_DIR}/bin/${PORT}/main"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
LOGNAME execute-main-${TARGET_TRIPLET}
)
endif()

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.16)
project(luajit-test C)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LUAJIT luajit IMPORTED_TARGET REQUIRED)
add_executable(main main.c)
target_link_libraries(main PRIVATE PkgConfig::LUAJIT)
install(TARGETS main RUNTIME DESTINATION bin/vcpkg-ci-luajit)

View File

@ -0,0 +1,38 @@
#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <luajit.h>
static const int LUAJIT_SETMODE_SUCCESS = 1;
#
int main()
{
/* FAQ, https://luajit.org/faq.html
* "Make sure you use luaL_newstate. Avoid using lua_newstate ..."
* "Make sure you use luaL_openlibs and not ... luaopen_base etc. directly."
*/
lua_State* L = luaL_newstate();
if (L == NULL) {
printf("luaL_newstate failed\n");
return 2;
}
luaL_openlibs(L);
/* API Extensions, https://luajit.org/ext_c_api.html */
int result = luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE | LUAJIT_MODE_FLUSH);
if (result != LUAJIT_SETMODE_SUCCESS) {
printf("luaJIT_setmode failed\n");
}
else if (luaL_dostring(L, "print('luaJIT_setmode succeeded')\nprint(package.path)") == LUA_OK) {
lua_pop(L, lua_gettop(L));
}
lua_close(L);
return result == LUAJIT_SETMODE_SUCCESS ? 0 : 1;
}

View File

@ -0,0 +1,27 @@
{
"name": "vcpkg-ci-luajit",
"version-string": "ci",
"description": "Validate port luajit",
"dependencies": [
{
"name": "luajit",
"default-features": false
},
{
"name": "vcpkg-cmake",
"host": true
}
],
"default-features": [
{
"$comment": "The platform expression is tuned for vcpkg CI.",
"name": "run-programs",
"platform": "native | (!android & !arm64)"
}
],
"features": {
"run-programs": {
"description": "Run luajit and user program"
}
}
}

View File

@ -6093,8 +6093,8 @@
"port-version": 0
},
"luajit": {
"baseline": "2023-01-04",
"port-version": 7
"baseline": "2026-01-09",
"port-version": 0
},
"luasec": {
"baseline": "1.3.2",

View File

@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "7e5caa094d98315f5c7febfb40faf2d430d91d3e",
"version-date": "2026-01-09",
"port-version": 0
},
{
"git-tree": "8d6aa0d4fd0ef4005685e468090f35e3a9a00802",
"version-date": "2023-01-04",