Skip to content

Commit

Permalink
Fix RUNPATHs for libraries and executables (#3383)
Browse files Browse the repository at this point in the history
* Only add relevant directories to various RUNPATHs

The old code added several irrelevant, duplicate or even non-existing
directories to the RUNPATHs of the samples/flatzinc/sat_solver./linear_solver

Calculate the actual relative path between binary and library install
directory (using the absolute paths, CMAKE_INSTALL_LIBDIR may be either
relative or absolute), and set it as target property.
  • Loading branch information
StefanBruens authored Jul 28, 2023
1 parent 80e9853 commit 4633e10
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 41 deletions.
37 changes: 22 additions & 15 deletions cmake/cpp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -441,20 +441,23 @@ function(add_cxx_sample FILE_NAME)
get_filename_component(COMPONENT_DIR ${SAMPLE_DIR} DIRECTORY)
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)

if(APPLE)
set(CMAKE_INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
set(CMAKE_INSTALL_RPATH
"$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:$ORIGIN/../lib64:$ORIGIN/../lib:$ORIGIN")
endif()

add_executable(${SAMPLE_NAME} ${FILE_NAME})
target_include_directories(${SAMPLE_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(${SAMPLE_NAME} PRIVATE cxx_std_17)
target_link_libraries(${SAMPLE_NAME} PRIVATE ${PROJECT_NAMESPACE}::ortools)

include(GNUInstallDirs)
if(APPLE)
set_target_properties(${SAMPLE_NAME} PROPERTIES INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
OUTPUT_VARIABLE libdir_relative_path)
set_target_properties(${SAMPLE_NAME} PROPERTIES
INSTALL_RPATH "$ORIGIN/${libdir_relative_path}")
endif()

install(TARGETS ${SAMPLE_NAME})

if(BUILD_TESTING)
Expand All @@ -475,19 +478,23 @@ function(add_cxx_example FILE_NAME)
get_filename_component(COMPONENT_DIR ${FILE_NAME} DIRECTORY)
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)

if(APPLE)
set(CMAKE_INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:$ORIGIN/../lib64:$ORIGIN/../lib:$ORIGIN")
endif()

add_executable(${EXAMPLE_NAME} ${FILE_NAME})
target_include_directories(${EXAMPLE_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(${EXAMPLE_NAME} PRIVATE cxx_std_17)
target_link_libraries(${EXAMPLE_NAME} PRIVATE ${PROJECT_NAMESPACE}::ortools)

include(GNUInstallDirs)
if(APPLE)
set_target_properties(${EXAMPLE_NAME} PROPERTIES INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
OUTPUT_VARIABLE libdir_relative_path)
set_target_properties(${EXAMPLE_NAME} PROPERTIES
INSTALL_RPATH "$ORIGIN/${libdir_relative_path}")
endif()

install(TARGETS ${EXAMPLE_NAME})

if(BUILD_TESTING)
Expand Down
22 changes: 14 additions & 8 deletions cmake/flatzinc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ target_compile_options(flatzinc PUBLIC ${FLATZINC_COMPILE_OPTIONS})
## Properties
if(NOT APPLE)
set_target_properties(flatzinc PROPERTIES VERSION ${PROJECT_VERSION})
if(UNIX)
set_target_properties(flatzinc PROPERTIES INSTALL_RPATH "$ORIGIN")
endif()
else()
# Clang don't support version x.y.z with z > 255
set_target_properties(flatzinc PROPERTIES
Expand All @@ -115,14 +118,6 @@ endif()
add_library(${PROJECT_NAMESPACE}::flatzinc ALIAS flatzinc)


if(APPLE)
set(CMAKE_INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:$ORIGIN/../lib64:$ORIGIN/../lib:$ORIGIN")
endif()


# fzn-ortools Binary
add_executable(fzn
ortools/flatzinc/fz.cc
Expand All @@ -146,6 +141,17 @@ target_compile_options(fzn PUBLIC ${FLATZINC_COMPILE_OPTIONS})
target_link_libraries(fzn PRIVATE ${PROJECT_NAMESPACE}::flatzinc)
## Alias
add_executable(${PROJECT_NAME}::fzn ALIAS fzn)
## INSTALL_RPATH
if(APPLE)
set_target_properties(fzn PROPERTIES
INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
OUTPUT_VARIABLE libdir_relative_path)
set_target_properties(fzn PROPERTIES
INSTALL_RPATH "$ORIGIN/${libdir_relative_path}")
endif()


# Parser-main Binary
Expand Down
21 changes: 12 additions & 9 deletions ortools/linear_solver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,22 @@ target_link_libraries(${NAME} PRIVATE
#add_library(${PROJECT_NAME}::linear_solver ALIAS ${NAME})

# solve
include(GNUInstallDirs)
if(APPLE)
set(CMAKE_INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
set(CMAKE_INSTALL_RPATH
"$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:$ORIGIN/../lib64:$ORIGIN/../lib:$ORIGIN")
endif()

add_executable(solve)
target_sources(solve PRIVATE "solve.cc")
target_include_directories(solve PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(solve PRIVATE cxx_std_17)
target_link_libraries(solve PRIVATE ${PROJECT_NAMESPACE}::ortools)

include(GNUInstallDirs)
if(APPLE)
set_target_properties(solve PROPERTIES INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
OUTPUT_VARIABLE libdir_relative_path)
set_target_properties(solve PROPERTIES
INSTALL_RPATH "$ORIGIN/${libdir_relative_path}")
endif()

install(TARGETS solve)
21 changes: 12 additions & 9 deletions ortools/sat/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,22 @@ target_link_libraries(${NAME} PRIVATE
#add_library(${PROJECT_NAME}::sat ALIAS ${NAME})

# Sat Runner
include(GNUInstallDirs)
if(APPLE)
set(CMAKE_INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
set(CMAKE_INSTALL_RPATH
"$ORIGIN/../${CMAKE_INSTALL_LIBDIR}:$ORIGIN/../lib64:$ORIGIN/../lib:$ORIGIN")
endif()

add_executable(sat_runner)
target_sources(sat_runner PRIVATE "sat_runner.cc")
target_include_directories(sat_runner PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(sat_runner PRIVATE cxx_std_17)
target_link_libraries(sat_runner PRIVATE ${PROJECT_NAMESPACE}::ortools)

include(GNUInstallDirs)
if(APPLE)
set_target_properties(sat_runner PROPERTIES INSTALL_RPATH
"@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
elseif(UNIX)
cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
OUTPUT_VARIABLE libdir_relative_path)
set_target_properties(sat_runner PROPERTIES
INSTALL_RPATH "$ORIGIN/${libdir_relative_path}")
endif()

install(TARGETS sat_runner)

0 comments on commit 4633e10

Please sign in to comment.