diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -452,6 +452,7 @@ set(LIBCXX_COMPILE_FLAGS "") set(LIBCXX_LINK_FLAGS "") set(LIBCXX_LIBRARIES "") +set(LIBCXX_INSTALL_RPATH "") set(LIBCXX_ADDITIONAL_COMPILE_FLAGS "" CACHE STRING "Additional Compile only flags which can be provided in cache") set(LIBCXX_ADDITIONAL_LIBRARIES "" CACHE STRING diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -178,10 +178,15 @@ set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE) message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}") add_library_flags("${LIBCXX_SANITIZER_LIBRARY}") - add_link_flags("-Wl,-rpath,${LIBDIR}") + set(LIBCXX_INSTALL_RPATH "${LIBDIR}") endif() endif() +if (UNIX AND NOT APPLE AND NOT (MATCHES "AIX") AND LIBCXX_ENABLE_SHARED AND LIBCXXABI_USE_LLVM_UNWINDER AND + NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) + set(LIBCXX_INSTALL_RPATH "\$ORIGIN") +endif() + if (LIBCXX_ENABLE_PARALLEL_ALGORITHMS AND NOT TARGET pstl::ParallelSTL) message(FATAL_ERROR "Could not find ParallelSTL") endif() @@ -285,6 +290,10 @@ set_target_properties(cxx_shared PROPERTIES APPEND_STRING PROPERTY LINK_FLAGS " /MANIFEST:NO") endif() + + set_target_properties(cxx_shared PROPERTIES + INSTALL_RPATH "${LIBCXX_INSTALL_RPATH}" + ) endif() set(CMAKE_STATIC_LIBRARY_PREFIX "lib") diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -232,6 +232,7 @@ set(LIBCXXABI_COMPILE_FLAGS "") set(LIBCXXABI_LINK_FLAGS "") set(LIBCXXABI_LIBRARIES "") +set(LIBCXXABI_INSTALL_RPATH "") set(LIBCXXABI_ADDITIONAL_COMPILE_FLAGS "" CACHE STRING "Additional Compile only flags which can be provided in cache") set(LIBCXXABI_ADDITIONAL_LIBRARIES "" CACHE STRING diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt --- a/libcxxabi/src/CMakeLists.txt +++ b/libcxxabi/src/CMakeLists.txt @@ -129,7 +129,7 @@ set(LIBCXXABI_SANITIZER_LIBRARY "${LIBCXXABI_SANITIZER_LIBRARY}" PARENT_SCOPE) message(STATUS "Manually linking compiler-rt library: ${LIBCXXABI_SANITIZER_LIBRARY}") add_library_flags("${LIBCXXABI_SANITIZER_LIBRARY}") - add_link_flags("-Wl,-rpath,${LIBDIR}") + set(LIBCXXABI_INSTALL_RPATH "${LIBDIR}") endif() endif() @@ -145,6 +145,11 @@ endif() endif() +if (UNIX AND NOT APPLE AND NOT ( MATCHES "AIX") AND LIBCXXABI_ENABLE_SHARED AND LIBCXXABI_USE_LLVM_UNWINDER AND + NOT LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_SHARED_LIBRARY AND (TARGET unwind_shared OR HAVE_LIBUNWIND)) + set(LIBCXXABI_INSTALL_RPATH "\$ORIGIN") +endif() + split_list(LIBCXXABI_COMPILE_FLAGS) split_list(LIBCXXABI_LINK_FLAGS) @@ -245,6 +250,10 @@ endif() endif() endif() + + set_target_properties(cxxabi_shared PROPERTIES + INSTALL_RPATH "${LIBCXXABI_INSTALL_RPATH}" + ) endif() # Build the static library. diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -2338,7 +2338,7 @@ # FIXME: update this when there is better solution. set(_install_rpath "${LLVM_LIBRARY_OUTPUT_INTDIR}" "${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) elseif(UNIX) - set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) + set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}" "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir}) if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)") set_property(TARGET ${name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-z,origin ")