[lldb] Support both Lua 5.3 and Lua 5.4 (#115500)

Lua 5.3 and Lua 5.4 are similar enough that we can easily support both
in LLDB. This patch adds support for building LLDB with both and updates
the documentation accordingly.
This commit is contained in:
Jonas Devlieghere 2024-11-11 08:11:03 -08:00 committed by GitHub
parent b08b252a02
commit e19d740169
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 25 additions and 14 deletions

View File

@ -87,8 +87,7 @@ if (LLDB_ENABLE_PYTHON)
endif ()
if (LLDB_ENABLE_LUA)
find_program(Lua_EXECUTABLE lua5.3)
set(LLDB_LUA_DEFAULT_RELATIVE_PATH "lib/lua/5.3")
set(LLDB_LUA_DEFAULT_RELATIVE_PATH "lib/lua/${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
set(LLDB_LUA_RELATIVE_PATH ${LLDB_LUA_DEFAULT_RELATIVE_PATH}
CACHE STRING "Path where Lua modules are installed, relative to install prefix")
endif ()
@ -138,12 +137,12 @@ endif()
if (LLDB_ENABLE_LUA)
if(LLDB_BUILD_FRAMEWORK)
set(lldb_lua_target_dir "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Resources/Lua")
set(LLDB_LUA_CPATH "${LLDB_FRAMEWORK_ABSOLUTE_BUILD_DIR}/LLDB.framework/Resources/Lua")
else()
set(lldb_lua_target_dir "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_LUA_RELATIVE_PATH}")
set(LLDB_LUA_CPATH "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LLDB_LUA_RELATIVE_PATH}")
endif()
get_target_property(lldb_lua_bindings_dir swig_wrapper_lua BINARY_DIR)
finish_swig_lua("lldb-lua" "${lldb_lua_bindings_dir}" "${lldb_lua_target_dir}")
finish_swig_lua("lldb-lua" "${lldb_lua_bindings_dir}" "${LLDB_LUA_CPATH}")
endif()
set(LLDB_INCLUDE_UNITTESTS ON)

View File

@ -8,11 +8,21 @@ if(LUA_LIBRARIES AND LUA_INCLUDE_DIR AND LLDB_ENABLE_SWIG)
set(LUAANDSWIG_FOUND TRUE)
else()
if (LLDB_ENABLE_SWIG)
find_package(Lua 5.3 EXACT)
find_package(Lua 5.3)
if(LUA_FOUND)
# Find the Lua executable. Only required to run a subset of the Lua
# tests.
find_program(LUA_EXECUTABLE
NAMES
"lua"
"lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
)
mark_as_advanced(
LUA_LIBRARIES
LUA_INCLUDE_DIR)
LUA_INCLUDE_DIR
LUA_VERSION_MINOR
LUA_VERSION_MAJOR
LUA_EXECUTABLE)
endif()
else()
message(STATUS "SWIG 4 or later is required for Lua support in LLDB but could not be found")
@ -26,5 +36,7 @@ else()
REQUIRED_VARS
LUA_LIBRARIES
LUA_INCLUDE_DIR
LUA_VERSION_MINOR
LUA_VERSION_MAJOR
LLDB_ENABLE_SWIG)
endif()

View File

@ -64,7 +64,7 @@ CMake configuration error.
+-------------------+------------------------------------------------------+--------------------------+
| Python | Python scripting | ``LLDB_ENABLE_PYTHON`` |
+-------------------+------------------------------------------------------+--------------------------+
| Lua | Lua scripting | ``LLDB_ENABLE_LUA`` |
| Lua | Lua scripting. Lua 5.3 and 5.4 are supported. | ``LLDB_ENABLE_LUA`` |
+-------------------+------------------------------------------------------+--------------------------+
Depending on your platform and package manager, one might run any of the

View File

@ -20,7 +20,8 @@ config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
config.target_triple = "@LLVM_TARGET_TRIPLE@"
config.lldb_build_directory = "@LLDB_TEST_BUILD_DIRECTORY@"
config.python_executable = "@Python3_EXECUTABLE@"
config.lua_executable = "@Lua_EXECUTABLE@"
config.lua_executable = "@LUA_EXECUTABLE@"
config.lldb_lua_cpath = "@LLDB_LUA_CPATH@"
config.lua_test_entry = "TestLuaAPI.py"
config.dotest_common_args_str = lit_config.substitute("@LLDB_TEST_COMMON_ARGS@")
config.dotest_user_args_str = lit_config.substitute("@LLDB_TEST_USER_ARGS@")

View File

@ -56,8 +56,8 @@ class LLDBTest(TestFormat):
cmd = [executable] + self.dotest_cmd + [testPath, "-p", testFile]
if isLuaTest:
luaExecutable = test.config.lua_executable
cmd.extend(["--env", "LUA_EXECUTABLE=%s" % luaExecutable])
cmd.extend(["--env", "LUA_EXECUTABLE=%s" % test.config.lua_executable])
cmd.extend(["--env", "LLDB_LUA_CPATH=%s" % test.config.lldb_lua_cpath])
timeoutInfo = None
try:

View File

@ -162,15 +162,14 @@ class TestLuaAPI(TestBase):
self.skipTest("Lua API tests could not find Lua executable.")
return
lua_executable = os.environ["LUA_EXECUTABLE"]
lldb_lua_cpath = os.environ["LLDB_LUA_CPATH"]
self.build()
test_exe = self.getBuildArtifact("a.out")
test_output = self.getBuildArtifact("output")
test_input = self.getBuildArtifact("input")
lua_lldb_cpath = "%s/lua/5.3/?.so" % configuration.lldb_libs_dir
lua_prelude = "package.cpath = '%s;' .. package.cpath" % lua_lldb_cpath
lua_prelude = "package.cpath = '%s/?.so;' .. package.cpath" % lldb_lua_cpath
lua_env = {
"TEST_EXE": os.path.join(self.getBuildDir(), test_exe),