diff --git a/tools/llvm-shlib/CMakeLists.txt b/tools/llvm-shlib/CMakeLists.txt index 71a35f8d280..e808b1241d2 100644 --- a/tools/llvm-shlib/CMakeLists.txt +++ b/tools/llvm-shlib/CMakeLists.txt @@ -8,7 +8,7 @@ # LLVM components. All compoenent names handled by llvm-config are valid. if(NOT DEFINED LLVM_DYLIB_COMPONENTS) - set(LLVM_LINK_COMPONENTS + set(LLVM_DYLIB_COMPONENTS ${LLVM_TARGETS_TO_BUILD} Analysis AsmPrinter @@ -37,8 +37,6 @@ if(NOT DEFINED LLVM_DYLIB_COMPONENTS) Vectorize native ) -else() - set(LLVM_LINK_COMPONENTS ${LLVM_DYLIB_COMPONENTS}) endif() add_definitions( -DLLVM_VERSION_INFO=\"${PACKAGE_VERSION}\" ) @@ -58,7 +56,7 @@ if(NOT DEFINED LLVM_EXPORTED_SYMBOL_FILE) set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_BINARY_DIR}/libllvm.exports) - llvm_map_components_to_libnames(LIB_NAMES ${LLVM_LINK_COMPONENTS}) + llvm_map_components_to_libnames(LIB_NAMES ${LLVM_DYLIB_COMPONENTS}) foreach (lib ${LIB_NAMES}) @@ -87,6 +85,14 @@ endif() add_llvm_library(LLVM SHARED ${SOURCES}) +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # FIXME: It should be "GNU ld for elf" + # GNU ld doesn't resolve symbols in the version script. + list(REMOVE_DUPLICATES LIB_NAMES) + set(LIB_NAMES -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive) +endif() + +target_link_libraries(LLVM ${cmake_2_8_12_PRIVATE} ${LIB_NAMES}) + add_dependencies(LLVM ${LLVM_EXPORTED_SYMBOL_FILE}) if (APPLE)