From a826efc52f53edf59f639e62b6f5b1918fab547f Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 8 Oct 2019 16:04:45 +0800 Subject: [PATCH] cmake: detect linker support check the linker support of `--version-script` and `--exclude-libs` flags. and use them only if they are supported. llvm-ld does not support `--version-script` at this moment. and it's reported that old versions of llvm-ld do not support `--exclude-libs` as well. Signed-off-by: Kefu Chai --- cmake/modules/CephCheck_link.c | 2 ++ cmake/modules/CephCheck_link.map | 1 + cmake/modules/CephChecks.cmake | 11 +++++++++++ src/librados/CMakeLists.txt | 4 +++- 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 cmake/modules/CephCheck_link.c create mode 100644 cmake/modules/CephCheck_link.map diff --git a/cmake/modules/CephCheck_link.c b/cmake/modules/CephCheck_link.c new file mode 100644 index 00000000000..0c87b37802d --- /dev/null +++ b/cmake/modules/CephCheck_link.c @@ -0,0 +1,2 @@ +int main() +{} diff --git a/cmake/modules/CephCheck_link.map b/cmake/modules/CephCheck_link.map new file mode 100644 index 00000000000..333a9b3c02f --- /dev/null +++ b/cmake/modules/CephCheck_link.map @@ -0,0 +1 @@ +{}; \ No newline at end of file diff --git a/cmake/modules/CephChecks.cmake b/cmake/modules/CephChecks.cmake index 576971ed2a8..f5a77abc6e6 100644 --- a/cmake/modules/CephChecks.cmake +++ b/cmake/modules/CephChecks.cmake @@ -124,3 +124,14 @@ int main(int argc, char **argv) else(CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR) message(STATUS "Assuming unaligned access is supported") endif(CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR) + +# should use LINK_OPTIONS instead of LINK_LIBRARIES, if we can use cmake v3.14+ +try_compile(HAVE_LINK_VERSION_SCRIPT + ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${CMAKE_CURRENT_LIST_DIR}/CephCheck_link.c + LINK_LIBRARIES "-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/CephCheck_link.map") + +try_compile(HAVE_LINK_EXCLUDE_LIBS + ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${CMAKE_CURRENT_LIST_DIR}/CephCheck_link.c + LINK_LIBRARIES "-Wl,--exclude-libs,ALL") diff --git a/src/librados/CMakeLists.txt b/src/librados/CMakeLists.txt index 6efed26bd8f..6335d0c5975 100644 --- a/src/librados/CMakeLists.txt +++ b/src/librados/CMakeLists.txt @@ -16,9 +16,11 @@ if(ENABLE_SHARED) VERSION 2.0.0 SOVERSION 2 VISIBILITY_INLINES_HIDDEN ON) - if(NOT APPLE) + if(HAVE_LINK_EXCLUDE_LIBS) set_property(TARGET librados APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--exclude-libs,ALL") + endif() + if(HAVE_LINK_VERSION_SCRIPT) set_property(TARGET librados APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/librados.map") endif() -- 2.39.5