mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
llvm/mlir: fix MLIRConfig.cmake to support external tablegen overrides
MLIRConfig.cmake unconditionally overwrites MLIR_TABLEGEN_EXE and does not create an imported target, breaking standalone builds that provide their own mlir-tblgen binary (e.g. Nix sandboxed builds). The patch adds guards to respect caller-set MLIR_TABLEGEN_EXE, MLIR_PDLL_TABLEGEN_EXE, and MLIR_SRC_SHARDER_TABLEGEN_EXE values, and auto-creates an imported mlir-tblgen target for downstream consumers. This replaces the previous dummy-target workaround in flang's CMakeLists.txt. Upstream issue: https://github.com/llvm/llvm-project/issues/150986 Co-authored-by: Alexander Bantyev <balsoft@balsoft.ru>
This commit is contained in:
parent
1ba36147a8
commit
7e8258d3af
4 changed files with 63 additions and 31 deletions
|
|
@ -40,9 +40,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
chmod -R +w $out/llvm
|
||||
'';
|
||||
|
||||
patches = [
|
||||
./dummy_target_19+.patch
|
||||
];
|
||||
patches = [ ];
|
||||
patchFlags = [ "-p1" ];
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/flang";
|
||||
|
|
@ -73,7 +71,6 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
(lib.cmakeFeature "CLANG_DIR" "${libclang.dev}/lib/cmake/clang")
|
||||
(lib.cmakeFeature "MLIR_DIR" "${mlir.dev}/lib/cmake/mlir")
|
||||
(lib.cmakeFeature "MLIR_TABLEGEN_EXE" "${buildLlvmPackages.tblgen}/bin/mlir-tblgen")
|
||||
(lib.cmakeFeature "MLIR_TABLEGEN_TARGET" "MLIR-TBLGen")
|
||||
(lib.cmakeBool "MLIR_LINK_MLIR_DYLIB" (!stdenv.hostPlatform.isStatic))
|
||||
(lib.cmakeFeature "LLVM_LIT_ARGS" "-v")
|
||||
(lib.cmakeBool "LLVM_ENABLE_PLUGINS" false)
|
||||
|
|
|
|||
|
|
@ -1,27 +0,0 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 070c39eb6e9a..168c97524943 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -1,6 +1,22 @@
|
||||
cmake_minimum_required(VERSION 3.20.0)
|
||||
set(LLVM_SUBPROJECT_TITLE "Flang")
|
||||
|
||||
+# Patch: define dummy mlir-tblgen target for TableGen.cmake
|
||||
+if(DEFINED MLIR_TABLEGEN_EXE AND NOT TARGET mlir-tblgen)
|
||||
+ add_executable(mlir-tblgen IMPORTED GLOBAL)
|
||||
+ set_target_properties(mlir-tblgen PROPERTIES
|
||||
+ IMPORTED_LOCATION "${MLIR_TABLEGEN_EXE}"
|
||||
+ )
|
||||
+endif()
|
||||
+
|
||||
+if(DEFINED MLIR_TABLEGEN_EXE AND NOT TARGET MLIR-TBLGen)
|
||||
+ add_executable(MLIR-TBLGen IMPORTED GLOBAL)
|
||||
+ set_target_properties(MLIR-TBLGen PROPERTIES
|
||||
+ IMPORTED_LOCATION "${MLIR_TABLEGEN_EXE}"
|
||||
+ )
|
||||
+endif()
|
||||
+
|
||||
+
|
||||
if(NOT DEFINED LLVM_COMMON_CMAKE_UTILS)
|
||||
set(LLVM_COMMON_CMAKE_UTILS ${CMAKE_CURRENT_SOURCE_DIR}/../cmake)
|
||||
endif()
|
||||
|
|
@ -39,6 +39,14 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
# MLIRConfig.cmake unconditionally overwrites MLIR_TABLEGEN_EXE, breaking standalone
|
||||
# builds that provide their own pre-built mlir-tblgen (e.g. in Nix sandboxed builds).
|
||||
# The patch adds guards to respect caller-set values and auto-creates an imported
|
||||
# mlir-tblgen target for downstream consumers. This replaces the previous dummy target
|
||||
# workaround in flang's CMakeLists.txt.
|
||||
|
||||
# Upstream issue: https://github.com/llvm/llvm-project/issues/150986
|
||||
./mlir-tablegen-imported-target.patch
|
||||
]
|
||||
++ lib.optional (lib.versionOlder release_version "20") [
|
||||
# Fix build with gcc15
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
diff --git a/cmake/modules/MLIRConfig.cmake.in b/cmake/modules/MLIRConfig.cmake.in
|
||||
index 71f3e028b1e8..b30b6cdc0de1 100644
|
||||
--- a/cmake/modules/MLIRConfig.cmake.in
|
||||
+++ b/cmake/modules/MLIRConfig.cmake.in
|
||||
@@ -9,9 +9,16 @@ find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG
|
||||
set(MLIR_EXPORTED_TARGETS "@MLIR_EXPORTS@")
|
||||
set(MLIR_CMAKE_DIR "@MLIR_CONFIG_CMAKE_DIR@")
|
||||
set(MLIR_INCLUDE_DIRS "@MLIR_CONFIG_INCLUDE_DIRS@")
|
||||
-set(MLIR_TABLEGEN_EXE "@MLIR_CONFIG_TABLEGEN_EXE@")
|
||||
-set(MLIR_PDLL_TABLEGEN_EXE "@MLIR_CONFIG_PDLL_TABLEGEN_EXE@")
|
||||
-set(MLIR_SRC_SHARDER_TABLEGEN_EXE "@MLIR_CONFIG_SRC_SHARDER_TABLEGEN_EXE@")
|
||||
+# Allow users to override tablegen executables (e.g. for sandboxed builds).
|
||||
+if(NOT MLIR_TABLEGEN_EXE)
|
||||
+ set(MLIR_TABLEGEN_EXE "@MLIR_CONFIG_TABLEGEN_EXE@")
|
||||
+endif()
|
||||
+if(NOT MLIR_PDLL_TABLEGEN_EXE)
|
||||
+ set(MLIR_PDLL_TABLEGEN_EXE "@MLIR_CONFIG_PDLL_TABLEGEN_EXE@")
|
||||
+endif()
|
||||
+if(NOT MLIR_SRC_SHARDER_TABLEGEN_EXE)
|
||||
+ set(MLIR_SRC_SHARDER_TABLEGEN_EXE "@MLIR_CONFIG_SRC_SHARDER_TABLEGEN_EXE@")
|
||||
+endif()
|
||||
set(MLIR_IRDL_TO_CPP_EXE "@MLIR_CONFIG_IRDL_TO_CPP_EXE@")
|
||||
set(MLIR_INSTALL_AGGREGATE_OBJECTS "@MLIR_INSTALL_AGGREGATE_OBJECTS@")
|
||||
set(MLIR_ENABLE_BINDINGS_PYTHON "@MLIR_ENABLE_BINDINGS_PYTHON@")
|
||||
@@ -32,6 +39,29 @@ if(NOT TARGET MLIRSupport)
|
||||
@MLIR_CONFIG_INCLUDE_EXPORTS@
|
||||
endif()
|
||||
|
||||
+# Ensure MLIR_TABLEGEN_EXE is a full path and has a corresponding imported
|
||||
+# target. In install trees, MLIR_TABLEGEN_EXE may be a bare name
|
||||
+# ("mlir-tblgen") rather than an absolute path. Resolve it so that
|
||||
+# TableGen.cmake can use it as both a COMMAND and a DEPENDS entry.
|
||||
+if(MLIR_TABLEGEN_EXE AND NOT IS_ABSOLUTE "${MLIR_TABLEGEN_EXE}"
|
||||
+ AND NOT TARGET "${MLIR_TABLEGEN_EXE}")
|
||||
+ find_program(_mlir_tblgen_exe "${MLIR_TABLEGEN_EXE}"
|
||||
+ HINTS "${LLVM_TOOLS_BINARY_DIR}")
|
||||
+ if(_mlir_tblgen_exe)
|
||||
+ set(MLIR_TABLEGEN_EXE "${_mlir_tblgen_exe}")
|
||||
+ endif()
|
||||
+ unset(_mlir_tblgen_exe)
|
||||
+endif()
|
||||
+
|
||||
+if(NOT TARGET mlir-tblgen AND MLIR_TABLEGEN_EXE)
|
||||
+ add_executable(mlir-tblgen IMPORTED GLOBAL)
|
||||
+ set_target_properties(mlir-tblgen PROPERTIES
|
||||
+ IMPORTED_LOCATION "${MLIR_TABLEGEN_EXE}")
|
||||
+endif()
|
||||
+if(NOT DEFINED MLIR_TABLEGEN_TARGET)
|
||||
+ set(MLIR_TABLEGEN_TARGET mlir-tblgen)
|
||||
+endif()
|
||||
+
|
||||
# By creating these targets here, subprojects that depend on MLIR's
|
||||
# tablegen-generated headers can always depend on these targets whether building
|
||||
# in-tree with MLIR or not.
|
||||
Loading…
Add table
Add a link
Reference in a new issue