From 9c19d1f3aa0c14ae04a9e94b11e5c8519698f9c9 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sat, 22 Apr 2017 23:02:46 +0000 Subject: [PATCH] [CMake] Fix unittests in out-of-LLVM-tree builds. Unittests are linked against a subset of LLVM libraries and its transitive dependencies resolved by CMake. The information about indirect library dependency is not available when building separately from LLVM, which result in missing symbol errors while linking. Resolve this issue by querying llvm-config about the available LLVM libraries and link against all of them, since dependence information is still not available. llvm-svn: 301095 --- polly/CMakeLists.txt | 5 +++++ polly/unittests/CMakeLists.txt | 26 +++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/polly/CMakeLists.txt b/polly/CMakeLists.txt index 4ffb5e8c129f..e7bdda43507c 100644 --- a/polly/CMakeLists.txt +++ b/polly/CMakeLists.txt @@ -20,6 +20,11 @@ if (NOT DEFINED LLVM_MAIN_SRC_DIR) # Add the llvm header path. include_directories(${LLVM_INSTALL_ROOT}/include/) + # Get LLVM's own libraries. + execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config" --libs + OUTPUT_VARIABLE LLVM_LIBS + OUTPUT_STRIP_TRAILING_WHITESPACE) + # Get the system librarys that will link into LLVM. execute_process(COMMAND "${LLVM_INSTALL_ROOT}/bin/llvm-config" --system-libs OUTPUT_VARIABLE LLVM_SYSTEM_LIBS diff --git a/polly/unittests/CMakeLists.txt b/polly/unittests/CMakeLists.txt index 904a8f845ec7..1dfc3097cc86 100644 --- a/polly/unittests/CMakeLists.txt +++ b/polly/unittests/CMakeLists.txt @@ -7,27 +7,27 @@ set_target_properties(PollyUnitTests PROPERTIES FOLDER "Polly") function(add_polly_unittest test_name) if(COMMAND add_unittest) add_unittest(PollyUnitTests ${test_name} ${ARGN}) + target_link_libraries(${test_name} Polly) + + # The Polly target does not depend on its required libraries, except: + # - BUILD_SHARED_LIBS=ON + # in which case calling target_link_libraries again is redundant. + # - LLVM_LINK_LLVM_DYLIB=ON + # in which case it depends on libLLVM.so, so no additional libs needed. + # We are also not allowed to link against the plain LLVM* libraries, + # which would result in multiple instances of these to be loaded. + if (NOT LLVM_LINK_LLVM_DYLIB) + target_link_libraries(${test_name} LLVMCore LLVMSupport LLVMDemangle LLVMipo) + endif () else() add_executable(${test_name} EXCLUDE_FROM_ALL ${ARGN}) set_target_properties(${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - target_link_libraries(${test_name} gtest_main gtest) + target_link_libraries(${test_name} gtest_main gtest Polly ${LLVM_LIBS}) add_dependencies(PollyUnitTests ${test_name}) set_property(TARGET ${test_name} PROPERTY FOLDER "Polly") endif() - target_link_libraries(${test_name} Polly) - - # The Polly target does not depend on its required libraries, except: - # - BUILD_SHARED_LIBS=ON - # in which case calling target_link_libraries again is redundant. - # - LLVM_LINK_LLVM_DYLIB=ON - # in which case it depends on libLLVM.so, so no additional libs needed. - # We are also not allowed to link against the plain LLVM* libraries, - # which would result in multiple instances of these to be loaded. - if (NOT LLVM_LINK_LLVM_DYLIB) - target_link_libraries(${test_name} LLVMCore LLVMSupport LLVMDemangle LLVMipo) - endif () endfunction() add_subdirectory(Isl)