[CMake] Fix RPATH handling for LLDB.framework

Summary:
Generator expressions are not supported in the `BUILD_RPATH` target property.
`BUILD_RPATH` is only supported in 3.8+ https://cliutils.gitlab.io/modern-cmake/chapters/intro/newcmake.html
`LLDB_FRAMEWORK_INSTALL_DIR` should not overwrite, but rather add an install RPATH (and it should be the first)

Reviewers: xiaobai, lanza

Reviewed By: xiaobai

Subscribers: mgorny

Differential Revision: https://reviews.llvm.org/D57989

llvm-svn: 354037
This commit is contained in:
Stefan Granitz 2019-02-14 17:34:39 +00:00
parent 617cd10bf7
commit db85fdd115
2 changed files with 13 additions and 10 deletions

View File

@ -175,23 +175,25 @@ endfunction()
# added as an extra RPATH below.
#
function(lldb_setup_framework_rpaths_in_tool name)
# In the build-tree, we know the exact path to the binary in the framework.
set(rpath_build_tree "$<TARGET_FILE:liblldb>")
# The installed framework is relocatable and can be in different locations.
set(rpaths_install_tree "@loader_path/../../../SharedFrameworks")
set(rpaths_install_tree)
if(LLDB_FRAMEWORK_INSTALL_DIR)
list(APPEND rpaths_install_tree "@loader_path/../${LLDB_FRAMEWORK_INSTALL_DIR}")
endif()
list(APPEND rpaths_install_tree "@loader_path/../../../SharedFrameworks")
list(APPEND rpaths_install_tree "@loader_path/../../System/Library/PrivateFrameworks")
list(APPEND rpaths_install_tree "@loader_path/../../Library/PrivateFrameworks")
if(LLDB_FRAMEWORK_INSTALL_DIR)
set(rpaths_install_tree "@loader_path/../${LLDB_FRAMEWORK_INSTALL_DIR}")
endif()
# In the build-tree, we know the exact path to the framework directory.
get_target_property(framework_target_dir liblldb LIBRARY_OUTPUT_DIRECTORY)
# If LLDB_NO_INSTALL_DEFAULT_RPATH was NOT enabled (default), this overwrites
# the default settings from llvm_setup_rpath().
set_target_properties(${name} PROPERTIES
BUILD_WITH_INSTALL_RPATH OFF
BUILD_RPATH "${rpath_build_tree}"
BUILD_RPATH "${framework_target_dir}"
INSTALL_RPATH "${rpaths_install_tree}"
)

View File

@ -55,8 +55,9 @@ if(LLDB_BUILD_FRAMEWORK)
message(FATAL_ERROR "LLDB.framework can only be generated when targeting Apple platforms")
endif()
# CMake 3.6 did not correctly emit POST_BUILD commands for Apple Framework targets
if(CMAKE_VERSION VERSION_LESS 3.7)
message(FATAL_ERROR "LLDB_BUILD_FRAMEWORK is not supported on CMake < 3.7")
# CMake < 3.8 did not have the BUILD_RPATH target property
if(CMAKE_VERSION VERSION_LESS 3.8)
message(FATAL_ERROR "LLDB_BUILD_FRAMEWORK is not supported on CMake < 3.8")
endif()
set(LLDB_FRAMEWORK_VERSION A CACHE STRING "LLDB.framework version (default is A)")