From a4ed1625ee4e74c4e8664742165d6a485b737d57 Mon Sep 17 00:00:00 2001 From: Jonas Rembser Date: Tue, 22 Apr 2025 12:36:46 +0200 Subject: [PATCH] Work around find_package(LLVM) overwriting LLVM_LINK_LLVM_DYLIB --- clang/CMakeLists.txt | 10 ++++++++++ .../clang/cmake/modules/ClangConfig.cmake.in | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 5f2b7f064d..a9581d081e 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -28,7 +28,17 @@ if(CLANG_BUILT_STANDALONE) mark_as_advanced(LLVM_ENABLE_ASSERTIONS) endif() + # Remember current value of LLVM_LINK_LLVM_DYLIB and reset later, because + # find_package(LLVM) is overwriting it without a good reason. See: + # https://github.com/llvm/llvm-project/pull/135570 + if(DEFINED LLVM_LINK_LLVM_DYLIB) + set(llvm_link_llvm_dylib ${LLVM_LINK_LLVM_DYLIB}) + endif() find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR}") + if(DEFINED llvm_link_llvm_dylib) + set(LLVM_LINK_LLVM_DYLIB ${llvm_link_llvm_dylib}) + endif() + list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}") # Turn into CACHE PATHs for overwritting diff --git a/clang/cmake/modules/ClangConfig.cmake.in b/clang/cmake/modules/ClangConfig.cmake.in index 5f67681649..36a34ddab2 100644 --- a/clang/cmake/modules/ClangConfig.cmake.in +++ b/clang/cmake/modules/ClangConfig.cmake.in @@ -3,8 +3,14 @@ @CLANG_CONFIG_CODE@ set(LLVM_VERSION @LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@.@LLVM_VERSION_PATCH@) + +# ROOT calls find_package(LLVM) before find_package(Clang), and +# find_package(LLVM) is overwriting LLVM_LINK_LLVM_DYLIB without a good +# reason. See: https://github.com/llvm/llvm-project/pull/135570 +# So we need to set it to what it needs to be for ROOT. find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG HINTS "@CLANG_CONFIG_LLVM_CMAKE_DIR@") +set(LLVM_LINK_LLVM_DYLIB OFF) set(CLANG_EXPORTED_TARGETS "@CLANG_EXPORTS@") set(CLANG_CMAKE_DIR "@CLANG_CONFIG_CMAKE_DIR@") -- 2.49.0