From: Matthias Maier Date: Sat, 11 Jun 2022 01:44:54 -0500 Subject: [PATCH] Fix cmake configure for shared LLVM libraries Gentoo builds LLVM into a combined shared library. The CMake configuration shipped with LLVM is evidently broken in this case, see https://github.com/llvm/llvm-project/issues/34593 https://bugs.gentoo.org/745915 We work around this issue by simply linking against the monolithic "LLVM" target. --- CMakeLists.txt | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf5ab3b..dfa6605 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -402,28 +402,7 @@ if (WITH_LLVM) endforeach() set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG") - llvm_map_components_to_libnames(llvm_libs_direct ${SYMENGINE_LLVM_COMPONENTS}) - llvm_expand_dependencies(llvm_libs ${llvm_libs_direct}) - - if (BUILD_SHARED_LIBS) - set(SYMENGINE_LLVM_LINK_DOWNSTREAM_DEFAULT False) - foreach(LLVM_LIB ${llvm_libs}) - get_target_property(${LLVM_LIB}_IMPORT_LOCATION ${LLVM_LIB} LOCATION) - if (NOT "${${LLVM_LIB}_IMPORT_LOCATION}" MATCHES "NOTFOUND") - if (NOT "${${LLVM_LIB}_IMPORT_LOCATION}" MATCHES ".a$|.lib$") - set(SYMENGINE_LLVM_LINK_DOWNSTREAM_DEFAULT True) - endif() - endif() - endforeach() - else() - set(SYMENGINE_LLVM_LINK_DOWNSTREAM_DEFAULT True) - endif() - set(SYMENGINE_LLVM_LINK_DOWNSTREAM ${SYMENGINE_LLVM_LINK_DOWNSTREAM_DEFAULT} - CACHE INTERNAL "Link to llvm in SymEngineConfig.cmake") - if (NOT SYMENGINE_LLVM_LINK_DOWNSTREAM) - unset(SYMENGINE_LLVM_COMPONENTS) - endif () - set(LIBS ${LIBS} ${llvm_libs}) + set(LIBS ${LIBS} LLVM) include_directories(SYSTEM ${LLVM_INCLUDE_DIRS}) set(HAVE_SYMENGINE_LLVM yes) set(PKGS ${PKGS} "LLVM") diff --git a/cmake/SymEngineConfig.cmake.in b/cmake/SymEngineConfig.cmake.in index b01ef9b..6d82c10 100644 --- a/cmake/SymEngineConfig.cmake.in +++ b/cmake/SymEngineConfig.cmake.in @@ -67,9 +67,7 @@ set(SYMENGINE_LLVM_COMPONENTS @SYMENGINE_LLVM_COMPONENTS@) if (NOT "${SYMENGINE_LLVM_COMPONENTS}" STREQUAL "") find_package(LLVM REQUIRED ${SYMENGINE_LLVM_COMPONENTS} HINTS @LLVM_DIR@) - llvm_map_components_to_libnames(llvm_libs_direct ${SYMENGINE_LLVM_COMPONENTS}) - llvm_expand_dependencies(llvm_libs ${llvm_libs_direct}) - set(SYMENGINE_LIBRARIES ${SYMENGINE_LIBRARIES} ${llvm_libs}) + set(SYMENGINE_LIBRARIES ${SYMENGINE_LIBRARIES} LLVM) else() set(SYMENGINE_LLVM_INCLUDE_DIRS) endif() -- 2.35.1