From d63bdba3eddd0ab9f552aab059fd01447578234a Mon Sep 17 00:00:00 2001 From: Xarblu Date: Sun, 14 Apr 2024 16:32:57 +0200 Subject: [PATCH] [cmake] Don't install static extensions when linked into libLLVM Allows building out-of-tree clang against libLLVM built with ENABLE_PROJECTS=polly POLLY_LINK_INTO_TOOLS=ON and LINK_LLVM_DYLIB=ON. Previously clang/CMakeLists.txt would call process_llvm_pass_plugins and try statically linking extensions that are unavailable if only installed as part of libLLVM. --- llvm/cmake/modules/AddLLVM.cmake | 14 +++++++++++--- polly/cmake/polly_macros.cmake | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 693fd5669f63f..74d5ee2edb261 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -1180,9 +1180,17 @@ function(process_llvm_pass_plugins) # LLVM_INSTALL_PACKAGE_DIR might be absolute, so don't reuse below. string(REPLACE "${CMAKE_CFG_INTDIR}" "." llvm_cmake_builddir "${LLVM_LIBRARY_DIR}") set(llvm_cmake_builddir "${llvm_cmake_builddir}/cmake/llvm") - file(WRITE - "${llvm_cmake_builddir}/LLVMConfigExtensions.cmake" - "set(LLVM_STATIC_EXTENSIONS ${LLVM_STATIC_EXTENSIONS})") + if(LLVM_LINK_LLVM_DYLIB) + # Install a dummy file. When the extensions are part of libLLVM other + # tools should link it instead of the static library. + file(WRITE + "${llvm_cmake_builddir}/LLVMConfigExtensions.cmake" + "set(LLVM_STATIC_EXTENSIONS )") + else() + file(WRITE + "${llvm_cmake_builddir}/LLVMConfigExtensions.cmake" + "set(LLVM_STATIC_EXTENSIONS ${LLVM_STATIC_EXTENSIONS})") + endif() install(FILES ${llvm_cmake_builddir}/LLVMConfigExtensions.cmake DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} diff --git a/polly/cmake/polly_macros.cmake b/polly/cmake/polly_macros.cmake index df541eeccc4cb..11c4c6b07e543 100644 --- a/polly/cmake/polly_macros.cmake +++ b/polly/cmake/polly_macros.cmake @@ -41,7 +41,8 @@ macro(add_polly_library name) if( LLVM_LINK_COMPONENTS ) llvm_config(${name} ${LLVM_LINK_COMPONENTS}) endif( LLVM_LINK_COMPONENTS ) - if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly") + if ((NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly") + AND NOT LLVM_LINK_LLVM_DYLIB) install(TARGETS ${name} COMPONENT ${name} EXPORT LLVMExports