From 9a91c0bc30d92b2c1722e0b972d226253bf63528 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 23 Sep 2025 21:37:55 +0300 Subject: [PATCH] Add support for using system LuaJIT (#808) * Add support for using system LuaJIT * Test CI: Update package list * Update toml11 --- .github/workflows/Test_Build.yml | 1 + CMakeLists.txt | 33 ++++++++++++----- cmake/FindLuaJIT.cmake | 62 ++++++++++++++++++++++++++++++++ third_party/toml11 | 2 +- 4 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 cmake/FindLuaJIT.cmake diff --git a/.github/workflows/Test_Build.yml b/.github/workflows/Test_Build.yml index edfa9fa9..63fb1823 100644 --- a/.github/workflows/Test_Build.yml +++ b/.github/workflows/Test_Build.yml @@ -16,6 +16,7 @@ jobs: - name: Install and update packages run: | + apt-get update apt-get -y install python3 python3-pip python3-venv p7zip-full libarchive13 python3 --version python3 -m venv venv diff --git a/CMakeLists.txt b/CMakeLists.txt index 8eded674..57724593 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,7 @@ option(ENABLE_DISCORD_RPC "Compile with Discord RPC support (disabled by default option(ENABLE_LUAJIT "Enable scripting with the Lua programming language" ON) option(ENABLE_QT_GUI "Enable the Qt GUI. If not selected then the emulator uses a minimal SDL-based UI instead" OFF) option(USE_SYSTEM_SDL2 "Use the system's SDL2 package" OFF) +option(USE_SYSTEM_LUAJIT "Use the system's LuaJIT package" OFF) option(ENABLE_GIT_VERSIONING "Enables querying git for the emulator version" ON) option(BUILD_HYDRA_CORE "Build a Hydra core" OFF) option(BUILD_LIBRETRO_CORE "Build a Libretro core" OFF) @@ -228,18 +229,32 @@ else() endif() if(ENABLE_LUAJIT) - add_subdirectory(third_party/LuaJIT luajit) - include_directories(third_party/LuaJIT/src ${CMAKE_BINARY_DIR}/luajit) - set_target_properties(luajit PROPERTIES EXCLUDE_FROM_ALL 1) + if (USE_SYSTEM_LUAJIT) + find_package(LuaJIT MODULE REQUIRED) - if(MSVC) - target_compile_definitions(libluajit PRIVATE _CRT_SECURE_NO_WARNINGS) - target_compile_definitions(minilua PRIVATE _CRT_SECURE_NO_WARNINGS) - target_compile_definitions(buildvm PRIVATE _CRT_SECURE_NO_WARNINGS) + if (LUAJIT_FOUND) + target_include_directories(AlberCore PUBLIC ${LUA_INCLUDE_DIR}) + message(STATUS "Lua include dir: ${LUA_INCLUDE_DIR}") + else() + message(FATAL_ERROR "Failed to find system LuaJIT. Either disable LuaJIT, or use the bundled LuaJIT by setting USE_SYSTEM_LUAJIT to false") + endif() + + target_link_libraries(AlberCore PRIVATE ${LUA_LIBRARIES}) + else() + add_subdirectory(third_party/LuaJIT luajit) + target_include_directories(AlberCore PUBLIC third_party/LuaJIT/src ${CMAKE_BINARY_DIR}/luajit) + set_target_properties(luajit PROPERTIES EXCLUDE_FROM_ALL 1) + + if(MSVC) + target_compile_definitions(libluajit PRIVATE _CRT_SECURE_NO_WARNINGS) + target_compile_definitions(minilua PRIVATE _CRT_SECURE_NO_WARNINGS) + target_compile_definitions(buildvm PRIVATE _CRT_SECURE_NO_WARNINGS) + endif() + + target_link_libraries(AlberCore PRIVATE libluajit) endif() - + target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_LUA=1") - target_link_libraries(AlberCore PRIVATE libluajit) endif() # Detect target architecture diff --git a/cmake/FindLuaJIT.cmake b/cmake/FindLuaJIT.cmake new file mode 100644 index 00000000..d4969805 --- /dev/null +++ b/cmake/FindLuaJIT.cmake @@ -0,0 +1,62 @@ +# Locate LuaJIT library +# This module defines +# LUAJIT_FOUND, if false, do not try to link to Lua +# LUA_LIBRARIES +# LUA_INCLUDE_DIR, where to find lua.h +# LUAJIT_VERSION_STRING, the version of Lua found (since CMake 2.8.8) + +## Copied from default CMake FindLua51.cmake + +find_path(LUA_INCLUDE_DIR luajit.h + HINTS + ENV LUA_DIR + PATH_SUFFIXES include/luajit-2.0 include/luajit-2.1 include + PATHS + ~/Library/Frameworks + /Library/Frameworks + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +find_library(LUA_LIBRARY + NAMES luajit-5.1 + HINTS + ENV LUA_DIR + PATH_SUFFIXES lib + PATHS + ~/Library/Frameworks + /Library/Frameworks + /sw + /opt/local + /opt/csw + /opt +) + +if(LUA_LIBRARY) + # include the math library for Unix + if(UNIX AND NOT APPLE) + find_library(LUA_MATH_LIBRARY m) + set( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries") + # For Windows and Mac, don't need to explicitly include the math library + else() + set( LUA_LIBRARIES "${LUA_LIBRARY}" CACHE STRING "Lua Libraries") + endif() +endif() + +if(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/luajit.h") + file(STRINGS "${LUA_INCLUDE_DIR}/luajit.h" luajit_version_str REGEX "^#define[ \t]+LUAJIT_VERSION[ \t]+\"LuaJIT .+\"") + + string(REGEX REPLACE "^#define[ \t]+LUAJIT_VERSION[ \t]+\"LuaJIT ([^\"]+)\".*" "\\1" LUAJIT_VERSION_STRING "${luajit_version_str}") + unset(luajit_version_str) +endif() + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if +# all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJIT + REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR + VERSION_VAR LUAJIT_VERSION_STRING) + +mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARIES LUA_LIBRARY LUA_MATH_LIBRARY) diff --git a/third_party/toml11 b/third_party/toml11 index 13406924..c44459dc 160000 --- a/third_party/toml11 +++ b/third_party/toml11 @@ -1 +1 @@ -Subproject commit 1340692442b530ada93a63f4b76a1421b3c139fe +Subproject commit c44459dc477bb16040a4f1dbf56f4191cd9d3321