[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