Author: Jonas Devlieghere Date: 2020-04-30T10:42:03-07:00 New Revision: ae6d2ff633a07a04aad62a0870afe28950472938
URL: https://github.com/llvm/llvm-project/commit/ae6d2ff633a07a04aad62a0870afe28950472938 DIFF: https://github.com/llvm/llvm-project/commit/ae6d2ff633a07a04aad62a0870afe28950472938.diff LOG: [lldb] fix RPATH when linking against Python3.framework The install name for the Python 3 framework in Xcode is relative to the framework's location and not the dylib itself. @rpath/Python3.framework/Versions/3.x/Python3 This means that we need to compute the path to the Python3.framework and use that as the RPATH instead of the usual dylib's directory. Added: Modified: lldb/cmake/modules/FindPythonInterpAndLibs.cmake lldb/source/API/CMakeLists.txt lldb/tools/lldb-test/CMakeLists.txt Removed: ################################################################################ diff --git a/lldb/cmake/modules/FindPythonInterpAndLibs.cmake b/lldb/cmake/modules/FindPythonInterpAndLibs.cmake index fa7a39185586..5ea7aab63230 100644 --- a/lldb/cmake/modules/FindPythonInterpAndLibs.cmake +++ b/lldb/cmake/modules/FindPythonInterpAndLibs.cmake @@ -17,10 +17,27 @@ else() set(PYTHON_LIBRARIES ${Python3_LIBRARIES}) set(PYTHON_INCLUDE_DIRS ${Python3_INCLUDE_DIRS}) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + + # The install name for the Python 3 framework in Xcode is relative to + # the framework's location and not the dylib itself. + # + # @rpath/Python3.framework/Versions/3.x/Python3 + # + # This means that we need to compute the path to the Python3.framework + # and use that as the RPATH instead of the usual dylib's directory. + # + # The check below shouldn't match Homebrew's Python framework as it is + # called Python.framework instead of Python3.framework. + if (APPLE AND Python3_LIBRARIES MATCHES "Python3.framework") + string(FIND "${Python3_LIBRARIES}" "Python3.framework" python_framework_pos) + string(SUBSTRING "${Python3_LIBRARIES}" "0" ${python_framework_pos} PYTHON_RPATH) + endif() + mark_as_advanced( PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE + PYTHON_RPATH SWIG_EXECUTABLE) elseif(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) # Use PYTHON_HOME as a hint to find Python 2. @@ -34,6 +51,7 @@ else() PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE + PYTHON_RPATH SWIG_EXECUTABLE) endif() endif() @@ -54,6 +72,7 @@ else() PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE + PYTHON_RPATH SWIG_EXECUTABLE) endif() endif() @@ -63,6 +82,7 @@ else() message(STATUS "SWIG 2 or later is required for Python support in LLDB but could not be found") endif() + include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PythonInterpAndLibs FOUND_VAR @@ -71,5 +91,6 @@ else() PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS PYTHON_EXECUTABLE + PYTHON_RPATH SWIG_EXECUTABLE) endif() diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt index f8ed1b37f4fa..ae6f2e8e3251 100644 --- a/lldb/source/API/CMakeLists.txt +++ b/lldb/source/API/CMakeLists.txt @@ -120,6 +120,10 @@ if(LLDB_ENABLE_PYTHON AND (BUILD_SHARED_LIBS OR LLVM_LINK_LLVM_DYLIB) AND UNIX A set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH "\$ORIGIN/../../../../lib${LLVM_LIBDIR_SUFFIX}") endif() +if(PYTHON_RPATH) + set_property(TARGET liblldb APPEND PROPERTY INSTALL_RPATH "${PYTHON_RPATH}") +endif() + if (MSVC) set_source_files_properties(SBReproducer.cpp PROPERTIES COMPILE_FLAGS /bigobj) endif() diff --git a/lldb/tools/lldb-test/CMakeLists.txt b/lldb/tools/lldb-test/CMakeLists.txt index f3530fd7b859..60b4a7ca8f70 100644 --- a/lldb/tools/lldb-test/CMakeLists.txt +++ b/lldb/tools/lldb-test/CMakeLists.txt @@ -24,5 +24,9 @@ add_lldb_tool(lldb-test Support ) +if(PYTHON_RPATH) + set_property(TARGET lldb-test APPEND PROPERTY INSTALL_RPATH "${PYTHON_RPATH}") +endif() + target_include_directories(lldb-test PRIVATE ${LLDB_SOURCE_DIR}/source) target_include_directories(lldb-test PRIVATE ${LLDB_BINARY_DIR}/source) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits