From d74b8aa8cebb24e3a2f38a9b57704756052a22b8 Mon Sep 17 00:00:00 2001 From: Jonas Hahnfeld Date: Wed, 30 Apr 2025 14:39:26 +0200 Subject: [PATCH 1/2] [CMake] Fix build with LLVM_LIBDIR_SUFFIX This allows configuring with builtin_llvm=OFF and a system-provided LLVM with LLVM_LIBDIR_SUFFIX, for example on Alma Linux. --- core/clingutils/CMakeLists.txt | 2 +- interpreter/CMakeLists.txt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/clingutils/CMakeLists.txt b/core/clingutils/CMakeLists.txt index ec4024f1d9b14..493c89e89141d 100644 --- a/core/clingutils/CMakeLists.txt +++ b/core/clingutils/CMakeLists.txt @@ -82,7 +82,7 @@ endforeach() set(CLANG_RESOURCE_DIR_STEM) if (builtin_clang) - set(CLANG_RESOURCE_DIR_STEM ${CMAKE_BINARY_DIR}/interpreter/llvm-project/llvm/${CMAKE_CFG_INTDIR}/lib/clang) + set(CLANG_RESOURCE_DIR_STEM ${CMAKE_BINARY_DIR}/interpreter/llvm-project/llvm/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}/clang) set(CLANG_RESOURCE_DIR_VERSION ${LLVM_VERSION_MAJOR}) else () set(CLANG_RESOURCE_DIR_STEM ${LLVM_LIBRARY_DIR}/clang) diff --git a/interpreter/CMakeLists.txt b/interpreter/CMakeLists.txt index e6512a888284c..4f5a3d2adddda 100644 --- a/interpreter/CMakeLists.txt +++ b/interpreter/CMakeLists.txt @@ -266,6 +266,7 @@ else() # Make some LLVM variables globally available. set(LLVM_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS} CACHE PATH "Path to llvm/include") set(LLVM_LIBRARY_DIR ${LLVM_LIBRARY_DIR} CACHE PATH "Path to llvm/lib") + set(LLVM_LIBDIR_SUFFIX ${LLVM_LIBDIR_SUFFIX} CACHE STRING "Suffix of library directory name") find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH) @@ -403,7 +404,7 @@ if (builtin_clang) ${CMAKE_CURRENT_SOURCE_DIR}/llvm-project/clang/include ${CLANG_BINARY_DIR}/include CACHE STRING "Clang include directories.") - set(CLANG_CMAKE_DIR "${CMAKE_BINARY_DIR}/lib/cmake/clang/") + set(CLANG_CMAKE_DIR "${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang/") else() find_package(Clang REQUIRED CONFIG) message(STATUS "Found Clang ${CLANG_PACKAGE_VERSION} in ${CLANG_CMAKE_DIR}") From 711ab4e8cf8cd702aa2020af780a0a184aea6641 Mon Sep 17 00:00:00 2001 From: Jonas Rembser Date: Tue, 22 Apr 2025 13:18:14 +0200 Subject: [PATCH 2/2] [CMake] Get Clang directory from `CLANG_INSTALL_PREFIX` If Clang was installed standalone (in particular, not in the LLVM tree), use the CLANG_INSTALL_PREFIX variable to indicate where it is. Actually, we can always use `CLANG_INSTALL_PREFIX`. It's defined by `ClangConfig.cmake`. To make sure that this works, `find_package(Clang)` has to be called in `core/clingutils/CMakeLists.txt`. --- core/clingutils/CMakeLists.txt | 2 +- interpreter/CMakeLists.txt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/clingutils/CMakeLists.txt b/core/clingutils/CMakeLists.txt index 493c89e89141d..99342dc4b16df 100644 --- a/core/clingutils/CMakeLists.txt +++ b/core/clingutils/CMakeLists.txt @@ -85,7 +85,7 @@ if (builtin_clang) set(CLANG_RESOURCE_DIR_STEM ${CMAKE_BINARY_DIR}/interpreter/llvm-project/llvm/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}/clang) set(CLANG_RESOURCE_DIR_VERSION ${LLVM_VERSION_MAJOR}) else () - set(CLANG_RESOURCE_DIR_STEM ${LLVM_LIBRARY_DIR}/clang) + set(CLANG_RESOURCE_DIR_STEM ${CLANG_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}/clang) # A user can define a clang version to use, otherwise find it (but will error if more than one version is present) if (NOT DEFINED CLANG_RESOURCE_DIR_VERSION) if (NOT EXISTS ${CLANG_RESOURCE_DIR_STEM}) diff --git a/interpreter/CMakeLists.txt b/interpreter/CMakeLists.txt index 4f5a3d2adddda..a4fc805ce41b5 100644 --- a/interpreter/CMakeLists.txt +++ b/interpreter/CMakeLists.txt @@ -408,6 +408,9 @@ if (builtin_clang) else() find_package(Clang REQUIRED CONFIG) message(STATUS "Found Clang ${CLANG_PACKAGE_VERSION} in ${CLANG_CMAKE_DIR}") + + # Forward CLANG_INSTALL_PREFIX so it can be used by core/clingutils/CMakeLists.txt + set(CLANG_INSTALL_PREFIX ${CLANG_INSTALL_PREFIX} PARENT_SCOPE) endif() # Reset the compiler flags after compiling LLVM and Clang