[llvm] [CMake] Add dependent project mode for Flang's MLIR (PR #221724)
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 7 06:15:14 PDT 2026
https://github.com/joker-eph created https://github.com/llvm/llvm-project/pull/221724
LLVM_ENABLE_PROJECTS currently treats projects enabled to satisfy another project's dependency the same as projects selected by the user. As a result, enabling Flang pulls the entire MLIR project, install rules, and test suites into aggregate targets.
Track implicitly configured projects in LLVM_DEPENDENT_PROJECTS and pass EXCLUDE_FROM_ALL when adding their source directories. This leaves all MLIR targets available for Flang's normal dependency resolution without attaching the MLIR-wide target to the default build or install.
Also force MLIR_INCLUDE_TESTS off when MLIR is pulled in by Flang. This avoids registering MLIR unit tests and lit suites with check-all. Explicitly listing mlir continues to use existing behavior and honors MLIR_INCLUDE_TESTS.
Assisted-by: Codex
>From 922d73fceb82db5f3b2eed970a365f8f280823c8 Mon Sep 17 00:00:00 2001
From: Mehdi Amini <joker.eph at gmail.com>
Date: Mon, 7 Sep 2026 06:11:56 -0700
Subject: [PATCH] [CMake] Add dependent project mode for Flang's MLIR
LLVM_ENABLE_PROJECTS currently treats projects enabled to satisfy another
project's dependency the same as projects selected by the user. As a result,
enabling Flang pulls the entire MLIR project, install rules, and test suites
into aggregate targets.
Track implicitly configured projects in LLVM_DEPENDENT_PROJECTS and pass
EXCLUDE_FROM_ALL when adding their source directories. This leaves all MLIR
targets available for Flang's normal dependency resolution without attaching
the MLIR-wide target to the default build or install.
Also force MLIR_INCLUDE_TESTS off when MLIR is pulled in by Flang. This avoids
registering MLIR unit tests and lit suites with check-all. Explicitly listing
mlir continues to use existing behavior and honors MLIR_INCLUDE_TESTS.
Assisted-by: Codex
---
llvm/CMakeLists.txt | 8 ++++++++
llvm/cmake/modules/AddLLVM.cmake | 9 +++++++--
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 44299d51d784a..73a1d71c09ce0 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -146,6 +146,10 @@ set(LLVM_EXTRA_PROJECTS "flang" "libc" "compiler-rt")
set(LLVM_KNOWN_PROJECTS "${LLVM_ALL_PROJECTS};${LLVM_EXTRA_PROJECTS}")
set(LLVM_ENABLE_PROJECTS "" CACHE STRING
"Semicolon-separated list of projects to build (${LLVM_KNOWN_PROJECTS}), or \"all\".")
+# Projects that are configured only to satisfy another project's dependencies.
+# Their targets are available to the build but are excluded from the default
+# build and install.
+set(LLVM_DEPENDENT_PROJECTS "")
# Make sure expansion happens first to not handle "all" in rest of the checks.
if( LLVM_ENABLE_PROJECTS STREQUAL "all" )
set( LLVM_ENABLE_PROJECTS ${LLVM_ALL_PROJECTS})
@@ -187,6 +191,10 @@ if ("flang" IN_LIST LLVM_ENABLE_PROJECTS)
if (NOT "mlir" IN_LIST LLVM_ENABLE_PROJECTS)
message(STATUS "Enabling MLIR as a dependency to flang")
list(APPEND LLVM_ENABLE_PROJECTS "mlir")
+ list(APPEND LLVM_DEPENDENT_PROJECTS "mlir")
+ # MLIR's tests register themselves with check-all. Do not include them when
+ # MLIR is configured only to satisfy Flang's dependencies.
+ set(MLIR_INCLUDE_TESTS OFF)
endif()
if (NOT "clang" IN_LIST LLVM_ENABLE_PROJECTS)
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index a267166eb6c2d..7d951d499e34a 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -1762,6 +1762,9 @@ function(add_llvm_subdirectory project type name)
if("${add_llvm_external_dir}" STREQUAL "")
set(add_llvm_external_dir ${name})
endif()
+ if("${name}" IN_LIST LLVM_DEPENDENT_PROJECTS)
+ set(exclude_from_all EXCLUDE_FROM_ALL)
+ endif()
canonicalize_tool_name(${name} nameUPPER)
set(canonical_full_name ${project}_${type}_${nameUPPER})
get_property(already_processed GLOBAL PROPERTY ${canonical_full_name}_PROCESSED)
@@ -1776,7 +1779,8 @@ function(add_llvm_subdirectory project type name)
"Whether to build ${name} as part of ${project}" On)
mark_as_advanced(${project}_${type}_${name}_BUILD)
if(${canonical_full_name}_BUILD)
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir} ${add_llvm_external_dir})
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}
+ ${add_llvm_external_dir} ${exclude_from_all})
endif()
else()
set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR
@@ -1794,7 +1798,8 @@ function(add_llvm_subdirectory project type name)
${${canonical_full_name}_BUILD_DEFAULT})
if (${canonical_full_name}_BUILD)
if(EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR})
- add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} ${add_llvm_external_dir})
+ add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}
+ ${add_llvm_external_dir} ${exclude_from_all})
elseif(NOT "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" STREQUAL "")
message(WARNING "Nonexistent directory for ${name}: ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}")
endif()
More information about the llvm-commits
mailing list