[clang] [CMake] Link MLIR if CLANG_ENABLE_CIR (PR #226763)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Sep 27 00:12:32 PDT 2026
https://github.com/aokblast created https://github.com/llvm/llvm-project/pull/226763
CIR requires MLIR to build. However, MLIR doesn't have a separate config file; it dependencies are checked by ClangTarget.cmake without linking the MLIR library. Link against MLIR in ClangCOnfig.cmake when CIR is enabled.
>From 396de6b33d5525d284438a73b06c545891ea9ddf Mon Sep 17 00:00:00 2001
From: ShengYi Hung <aokblast at FreeBSD.org>
Date: Sun, 27 Sep 2026 02:08:04 -0500
Subject: [PATCH] [CMake] Link MLIR if CLANG_ENABLE_CIR
CIR requires MLIR to build. However, MLIR doesn't have a separate
config file; it dependencies are checked by ClangTarget.cmake without
linking the MLIR library. Link against MLIR in ClangCOnfig.cmake when
CIR is enabled.
---
clang/cmake/modules/CMakeLists.txt | 19 +++++++++++++++++++
clang/cmake/modules/ClangConfig.cmake.in | 2 ++
2 files changed, 21 insertions(+)
diff --git a/clang/cmake/modules/CMakeLists.txt b/clang/cmake/modules/CMakeLists.txt
index 36f31e33cf60d..c9b2cde27cd96 100644
--- a/clang/cmake/modules/CMakeLists.txt
+++ b/clang/cmake/modules/CMakeLists.txt
@@ -43,6 +43,20 @@ set(CLANG_CONFIG_INCLUDE_DIRS
"${CLANG_SOURCE_DIR}/include"
"${CLANG_BINARY_DIR}/include"
)
+set(clang_config_needs_mlir OFF)
+if(CLANG_ENABLE_CIR AND NOT "mlir" IN_LIST LLVM_DEPENDENCY_ONLY_PROJECTS)
+ set(clang_config_needs_mlir ON)
+endif()
+function(clang_config_find_mlir out_var mlir_cmake_dir)
+ if(clang_config_needs_mlir)
+ set(${out_var}
+ "find_package(MLIR \${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}.\${LLVM_VERSION_PATCH} EXACT REQUIRED CONFIG
+ HINTS \"${mlir_cmake_dir}\")" PARENT_SCOPE)
+ else()
+ set(${out_var} "" PARENT_SCOPE)
+ endif()
+endfunction()
+clang_config_find_mlir(CLANG_CONFIG_FIND_MLIR "${llvm_builddir}/cmake/mlir")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/ClangConfig.cmake.in
${clang_cmake_builddir}/ClangConfig.cmake
@@ -69,6 +83,11 @@ file(COPY .
find_prefix_from_config(CLANG_CONFIG_CODE CLANG_INSTALL_PREFIX "${CLANG_INSTALL_PACKAGE_DIR}")
extend_path(CLANG_CONFIG_CMAKE_DIR "\${CLANG_INSTALL_PREFIX}" "${CLANG_INSTALL_PACKAGE_DIR}")
extend_path(CLANG_CONFIG_LLVM_CMAKE_DIR "\${CLANG_INSTALL_PREFIX}" "${LLVM_INSTALL_PACKAGE_DIR}")
+# Keep this in sync with mlir/cmake/modules/CMakeLists.txt!
+set(MLIR_INSTALL_PACKAGE_DIR "${CMAKE_INSTALL_PACKAGEDIR}/mlir" CACHE STRING
+ "Path for CMake subdirectory for MLIR (defaults to '${CMAKE_INSTALL_PACKAGEDIR}/mlir')")
+extend_path(clang_config_mlir_cmake_dir "\${CLANG_INSTALL_PREFIX}" "${MLIR_INSTALL_PACKAGE_DIR}")
+clang_config_find_mlir(CLANG_CONFIG_FIND_MLIR "${clang_config_mlir_cmake_dir}")
get_config_exports_includes(Clang CLANG_CONFIG_INCLUDE_EXPORTS)
extend_path(base_includedir "\${CLANG_INSTALL_PREFIX}" "${CMAKE_INSTALL_INCLUDEDIR}")
set(CLANG_CONFIG_INCLUDE_DIRS
diff --git a/clang/cmake/modules/ClangConfig.cmake.in b/clang/cmake/modules/ClangConfig.cmake.in
index fd0ff76f1e883..87fab90dcd5e0 100644
--- a/clang/cmake/modules/ClangConfig.cmake.in
+++ b/clang/cmake/modules/ClangConfig.cmake.in
@@ -6,6 +6,8 @@ set(LLVM_VERSION @LLVM_VERSION_MAJOR at .@LLVM_VERSION_MINOR at .@LLVM_VERSION_PATCH@)
find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG
HINTS "@CLANG_CONFIG_LLVM_CMAKE_DIR@")
+ at CLANG_CONFIG_FIND_MLIR@
+
set(CLANG_EXPORTED_TARGETS "@CLANG_EXPORTS@")
set(CLANG_CMAKE_DIR "@CLANG_CONFIG_CMAKE_DIR@")
set(CLANG_INCLUDE_DIRS "@CLANG_CONFIG_INCLUDE_DIRS@")
More information about the cfe-commits
mailing list