From e19d74016971faed321e5cca20da7016047eb029 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Mon, 11 Nov 2024 08:11:03 -0800 Subject: [PATCH] [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. --- lldb/CMakeLists.txt | 9 ++++----- lldb/cmake/modules/FindLuaAndSwig.cmake | 16 ++++++++++++++-- lldb/docs/resources/build.rst | 2 +- lldb/test/API/lit.site.cfg.py.in | 3 ++- lldb/test/API/lldbtest.py | 4 ++-- lldb/test/API/lua_api/TestLuaAPI.py | 5 ++--- 6 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt index 5827e04b5662..85ba4fde1741 100644 --- a/lldb/CMakeLists.txt +++ b/lldb/CMakeLists.txt @@ -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) diff --git a/lldb/cmake/modules/FindLuaAndSwig.cmake b/lldb/cmake/modules/FindLuaAndSwig.cmake index 11548b76f843..33fadb2a0974 100644 --- a/lldb/cmake/modules/FindLuaAndSwig.cmake +++ b/lldb/cmake/modules/FindLuaAndSwig.cmake @@ -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() diff --git a/lldb/docs/resources/build.rst b/lldb/docs/resources/build.rst index 33b6a6f79def..66db84522bff 100644 --- a/lldb/docs/resources/build.rst +++ b/lldb/docs/resources/build.rst @@ -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 diff --git a/lldb/test/API/lit.site.cfg.py.in b/lldb/test/API/lit.site.cfg.py.in index 7dd8ffd2f5cb..ecebc4477485 100644 --- a/lldb/test/API/lit.site.cfg.py.in +++ b/lldb/test/API/lit.site.cfg.py.in @@ -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@") diff --git a/lldb/test/API/lldbtest.py b/lldb/test/API/lldbtest.py index c888fb574f4b..d6b79ebc2c43 100644 --- a/lldb/test/API/lldbtest.py +++ b/lldb/test/API/lldbtest.py @@ -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: diff --git a/lldb/test/API/lua_api/TestLuaAPI.py b/lldb/test/API/lua_api/TestLuaAPI.py index 065de61ad657..4ac795d69642 100644 --- a/lldb/test/API/lua_api/TestLuaAPI.py +++ b/lldb/test/API/lua_api/TestLuaAPI.py @@ -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),