[llvm] r285714 - [CMake] Fix rpath construction for out-of-tree builds
John Brawn via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 3 07:10:53 PDT 2016
This unfortunately broke builds that set CMAKE_INSTALL_RPATH as it
resulted in the INSTALL_RPATH of targets being set to empty undoing
the effect of CMAKE_INSTALL_RPATH. I've committed a fix for that in
r285908.
John
> -----Original Message-----
> From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On
> Behalf Of Chris Bieneman via llvm-commits
> Sent: 01 November 2016 17:45
> To: llvm-commits at lists.llvm.org
> Subject: [llvm] r285714 - [CMake] Fix rpath construction for out-of-tree
> builds
>
> Author: cbieneman
> Date: Tue Nov 1 12:44:58 2016
> New Revision: 285714
>
> URL: http://llvm.org/viewvc/llvm-project?rev=285714&view=rev
> Log:
> [CMake] Fix rpath construction for out-of-tree builds
>
> This patch was produced in conjunction with Michał Górny. It should
> resolve the issues that were trying to be solved by D25304.
>
> This moves rpath handling into `llvm_add_library` and
> `add_llvm_executable` so that it is available to all projects using
> AddLLVM whether built in-tree or out-of-tree.
>
> Modified:
> llvm/trunk/CMakeLists.txt
> llvm/trunk/cmake/modules/AddLLVM.cmake
>
> Modified: llvm/trunk/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/CMakeLists.txt?rev=285714&r1=285713&r2=285714&view=di
> ff
> ========================================================================
> ======
> --- llvm/trunk/CMakeLists.txt (original)
> +++ llvm/trunk/CMakeLists.txt Tue Nov 1 12:44:58 2016
> @@ -677,20 +677,6 @@ set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LL
> set( CMAKE_LIBRARY_OUTPUT_DIRECTORY
> ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
> set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY
> ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
>
> -set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
> -if (APPLE)
> - set(CMAKE_INSTALL_NAME_DIR "@rpath")
> - set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
> -else(UNIX)
> - if(NOT DEFINED CMAKE_INSTALL_RPATH)
> - set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}")
> - if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
> - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-
> z,origin")
> - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-
> z,origin")
> - endif()
> - endif(NOT DEFINED CMAKE_INSTALL_RPATH)
> -endif()
> -
> if(APPLE AND DARWIN_LTO_LIBRARY)
> set(CMAKE_EXE_LINKER_FLAGS
> "${CMAKE_EXE_LINKER_FLAGS} -Wl,-lto_library -
> Wl,${DARWIN_LTO_LIBRARY}")
>
> Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
> URL: http://llvm.org/viewvc/llvm-
> project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=285714&r1=285713&r2=2
> 85714&view=diff
> ========================================================================
> ======
> --- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
> +++ llvm/trunk/cmake/modules/AddLLVM.cmake Tue Nov 1 12:44:58 2016
> @@ -415,6 +415,9 @@ function(llvm_add_library name)
> elseif(ARG_SHARED)
> add_windows_version_resource_file(ALL_FILES ${ALL_FILES})
> add_library(${name} SHARED ${ALL_FILES})
> +
> + llvm_setup_rpath(${name})
> +
> else()
> add_library(${name} STATIC ${ALL_FILES})
> endif()
> @@ -659,6 +662,8 @@ macro(add_llvm_executable name)
> add_executable(${name} ${ALL_FILES})
> endif()
>
> + llvm_setup_rpath(${name})
> +
> if(DEFINED windows_resource_file)
> set_windows_version_resource_properties(${name}
> ${windows_resource_file})
> endif()
> @@ -1317,3 +1322,35 @@ function(llvm_externalize_debuginfo name
> message(FATAL_ERROR "LLVM_EXTERNALIZE_DEBUGINFO isn't implemented
> for non-darwin platforms!")
> endif()
> endfunction()
> +
> +function(llvm_setup_rpath name)
> + if(LLVM_INSTALL_PREFIX AND NOT (LLVM_INSTALL_PREFIX STREQUAL
> CMAKE_INSTALL_PREFIX))
> + set(extra_libdir ${LLVM_LIBRARY_DIR})
> + elseif(LLVM_BUILD_LIBRARY_DIR)
> + set(extra_libdir ${LLVM_LIBRARY_DIR})
> + endif()
> +
> + if (APPLE)
> + set(_install_name_dir INSTALL_NAME_DIR "@rpath")
> + set(_install_rpath "@loader_path/../lib" ${extra_libdir})
> + elseif(UNIX)
> + if(NOT DEFINED CMAKE_INSTALL_RPATH)
> + set(_install_rpath "\$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 ")
> + elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND NOT
> LLVM_LINKER_IS_GOLD)
> + # $ORIGIN is not interpreted at link time by ld.bfd
> + set_property(TARGET ${name} APPEND_STRING PROPERTY
> + LINK_FLAGS " -Wl,-rpath-
> link,${LLVM_LIBRARY_OUTPUT_INTDIR} ")
> + endif()
> + endif()
> + else()
> + return()
> + endif()
> +
> + set_target_properties(${name} PROPERTIES
> + BUILD_WITH_INSTALL_RPATH On
> + INSTALL_RPATH "${_install_rpath}"
> + ${_install_name_dir})
> +endfunction()
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list