From: Sylvestre Ledru Date: Wed, 19 Jul 2017 16:07:51 +0000 (+0000) Subject: [Solaris] enable --whole-archive for shared-library build, disable --version-script... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4879d7f698be5afa4737028fefb38c0755955baf;p=llvm [Solaris] enable --whole-archive for shared-library build, disable --version-script for Solaris-ld Shared-library build on Solaris requires --whole-archive to be specified (option accepted by all available linkers). At the same time, --version-script can not be handled by Solaris-ld, so it should be skipped. -M is of no use here, since there is no syntax in Solaris-ld mapfiles that allows to version all global symbols, not just the named ones (at least this is my impression from digging deep into the docs). Patch by Fedor Sergeev git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308490 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-shlib/CMakeLists.txt b/tools/llvm-shlib/CMakeLists.txt index 907345a9402..b2109c8758d 100644 --- a/tools/llvm-shlib/CMakeLists.txt +++ b/tools/llvm-shlib/CMakeLists.txt @@ -37,13 +37,20 @@ endif() add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${SOURCES}) list(REMOVE_DUPLICATES LIB_NAMES) -if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "DragonFly")) # FIXME: It should be "GNU ld for elf" +if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) + OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") + OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "DragonFly") + OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")) # FIXME: It should be "GNU ld for elf" configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/simple_version_script.map.in ${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map) # GNU ld doesn't resolve symbols in the version script. - set(LIB_NAMES -Wl,--version-script,${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive) + set(LIB_NAMES -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive) + if (NOT LLVM_LINKER_IS_SOLARISLD) + # Solaris ld does not accept global: *; so there is no way to version *all* global symbols + set(LIB_NAMES -Wl,--version-script,${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map ${LIB_NAMES}) + endif() elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") set(LIB_NAMES -Wl,-all_load ${LIB_NAMES}) endif()