diff --git a/ports/luajit/003-do-not-set-macosx-deployment-target.patch b/ports/luajit/003-do-not-set-macosx-deployment-target.patch index 4f9f6324ed..6651a7a569 100644 --- a/ports/luajit/003-do-not-set-macosx-deployment-target.patch +++ b/ports/luajit/003-do-not-set-macosx-deployment-target.patch @@ -1,14 +1,13 @@ -diff --git a/src/Makefile b/src/Makefile -index 30d64be..b753ea1 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 - endif - ifeq (Darwin,$(TARGET_SYS)) -- ifeq (,$(MACOSX_DEPLOYMENT_TARGET)) -- $(error missing: export MACOSX_DEPLOYMENT_TARGET=XX.YY) -- endif - TARGET_STRIP+= -x - TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL - TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC +diff --git a/src/Makefile b/src/Makefile +index bac0341e..b867326f 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -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)) +- $(error missing: export MACOSX_DEPLOYMENT_TARGET=XX.YY) ++ # relying on vcpkg toolchain flags + endif + TARGET_STRIP+= -x + TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL diff --git a/ports/luajit/005-do-not-pass-ld-e-macosx.patch b/ports/luajit/005-do-not-pass-ld-e-macosx.patch deleted file mode 100644 index 8f2f615bca..0000000000 --- a/ports/luajit/005-do-not-pass-ld-e-macosx.patch +++ /dev/null @@ -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} diff --git a/ports/luajit/configure b/ports/luajit/configure index 0384100aa0..a4bde1cb60 100755 --- a/ports/luajit/configure +++ b/ports/luajit/configure @@ -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 ' [-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 diff --git a/ports/luajit/msvcbuild.patch b/ports/luajit/msvcbuild.patch index 8e2e756d8b..4199049653 100644 --- a/ports/luajit/msvcbuild.patch +++ b/ports/luajit/msvcbuild.patch @@ -1,31 +1,50 @@ 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 - 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% - @if errorlevel 1 goto :BAD -@@ -124,4 +123,5 @@ if exist luajit.exe.manifest^ - @goto :END - :FAIL - @echo You must open a "Visual Studio Command Prompt" to run this script -+@exit 1 - :END +@@ -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% + @if errorlevel 1 goto :BAD +@@ -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 ++@exit 1 + :END diff --git a/ports/luajit/portfile.cmake b/ports/luajit/portfile.cmake index 2906de60e2..15df5dcdf5 100644 --- a/ports/luajit/portfile.cmake +++ b/ports/luajit/portfile.cmake @@ -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") diff --git a/ports/luajit/vcpkg.json b/ports/luajit/vcpkg.json index 1c83e57729..48d1d09a9f 100644 --- a/ports/luajit/vcpkg.json +++ b/ports/luajit/vcpkg.json @@ -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", diff --git a/scripts/ci.feature.baseline.txt b/scripts/ci.feature.baseline.txt index 4b6b27d823..8871f2b76c 100644 --- a/scripts/ci.feature.baseline.txt +++ b/scripts/ci.feature.baseline.txt @@ -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 diff --git a/scripts/test_ports/vcpkg-ci-luajit/portfile.cmake b/scripts/test_ports/vcpkg-ci-luajit/portfile.cmake new file mode 100644 index 0000000000..3704ef8a97 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-luajit/portfile.cmake @@ -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() diff --git a/scripts/test_ports/vcpkg-ci-luajit/project/CMakeLists.txt b/scripts/test_ports/vcpkg-ci-luajit/project/CMakeLists.txt new file mode 100644 index 0000000000..f22e114aa3 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-luajit/project/CMakeLists.txt @@ -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) diff --git a/scripts/test_ports/vcpkg-ci-luajit/project/main.c b/scripts/test_ports/vcpkg-ci-luajit/project/main.c new file mode 100644 index 0000000000..abfc55eb95 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-luajit/project/main.c @@ -0,0 +1,38 @@ +#include + +#include +#include +#include +#include + +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; +} diff --git a/scripts/test_ports/vcpkg-ci-luajit/vcpkg.json b/scripts/test_ports/vcpkg-ci-luajit/vcpkg.json new file mode 100644 index 0000000000..1026e3c1b1 --- /dev/null +++ b/scripts/test_ports/vcpkg-ci-luajit/vcpkg.json @@ -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" + } + } +} diff --git a/versions/baseline.json b/versions/baseline.json index c8c4632b2d..150e4a550c 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -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", diff --git a/versions/l-/luajit.json b/versions/l-/luajit.json index 230a1fbf88..229f9c7a3d 100644 --- a/versions/l-/luajit.json +++ b/versions/l-/luajit.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "7e5caa094d98315f5c7febfb40faf2d430d91d3e", + "version-date": "2026-01-09", + "port-version": 0 + }, { "git-tree": "8d6aa0d4fd0ef4005685e468090f35e3a9a00802", "version-date": "2023-01-04",