Skip to content

Conversation

Zentrik
Copy link
Contributor

@Zentrik Zentrik commented Sep 3, 2025

Using build_native_tool directly doesn't seem to be standard, instead other tools seem to call setup_host_tool (e.g. milr-linalg-ods-gen and add_tablegen seems to have a copy of setup_host_tool internally).

When cross compiling llvm in two stages, the first building all native tools and then the second using those built tools to cross compile, this prevents the second stage from trying to rebuild mlir-irdl-to-cpp, which fails.

…mpilation

Using `build_native_tool` directly doesn't seem to be standard, instead other tools seem to call `setup_host_tool` (e.g. milr-linalg-ods-gen and `add_tablegen` seems to have a copy of `setup_host_tool` internally).

When cross compiling llvm in two stages, the first building all native tools and then the second using those built tools to cross compile, this prevents the second stage from trying to rebuild mlir-irdl-to-cpp, which fails.
@Zentrik
Copy link
Contributor Author

Zentrik commented Sep 3, 2025

@Moxinilian do you mind reviewing this

Copy link
Member

@Moxinilian Moxinilian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent! This looks much better indeed, thanks. I wish this was documented somewhere, I swear I did my best with the original implementation 😆

Co-authored-by: Théo Degioanni <30992420+Moxinilian@users.noreply.github.com>
@llvmbot llvmbot added mlir:core MLIR Core Infrastructure mlir labels Sep 3, 2025
@llvmbot
Copy link
Member

llvmbot commented Sep 3, 2025

@llvm/pr-subscribers-mlir-core

@llvm/pr-subscribers-mlir

Author: None (Zentrik)

Changes

Using build_native_tool directly doesn't seem to be standard, instead other tools seem to call setup_host_tool (e.g. milr-linalg-ods-gen and add_tablegen seems to have a copy of setup_host_tool internally).

When cross compiling llvm in two stages, the first building all native tools and then the second using those built tools to cross compile, this prevents the second stage from trying to rebuild mlir-irdl-to-cpp, which fails.


Full diff: https://github.com/llvm/llvm-project/pull/156606.diff

1 Files Affected:

  • (modified) mlir/tools/mlir-irdl-to-cpp/CMakeLists.txt (+1-20)
diff --git a/mlir/tools/mlir-irdl-to-cpp/CMakeLists.txt b/mlir/tools/mlir-irdl-to-cpp/CMakeLists.txt
index 3a0f77d856b44..27a7e22db7d7b 100644
--- a/mlir/tools/mlir-irdl-to-cpp/CMakeLists.txt
+++ b/mlir/tools/mlir-irdl-to-cpp/CMakeLists.txt
@@ -6,23 +6,4 @@ mlir_target_link_libraries(mlir-irdl-to-cpp
   MLIRTargetIRDLToCpp
   )
 
-# Set up a native build when cross-compiling.
-if(LLVM_USE_HOST_TOOLS)
-  build_native_tool(
-    mlir-irdl-to-cpp
-    MLIR_IRDL_TO_CPP_EXE
-
-    # Native tool must depend on target tool so that the native tool gets
-    # properly rebuilt when the target tool changes.
-    DEPENDS mlir-irdl-to-cpp
-  )
-  add_custom_target(mlir-irdl-to-cpp-host DEPENDS ${MLIR_IRDL_TO_CPP_EXE})
-  set(MLIR_IRDL_TO_CPP_TARGET mlir-irdl-to-cpp-host)
-else()
-  set(MLIR_IRDL_TO_CPP_EXE $<TARGET_FILE:mlir-irdl-to-cpp>)
-  set(MLIR_IRDL_TO_CPP_TARGET mlir-irdl-to-cpp)
-endif()
-
-# Save the executable path and target name to the cache to expose it globally.
-set(MLIR_IRDL_TO_CPP_EXE "${MLIR_IRDL_TO_CPP_EXE}" CACHE INTERNAL "")
-set(MLIR_IRDL_TO_CPP_TARGET "${MLIR_IRDL_TO_CPP_TARGET}" CACHE INTERNAL "")
+setup_host_tool(mlir-irdl-to-cpp MLIR_IRDL_TO_CPP MLIR_IRDL_TO_CPP_EXE MLIR_IRDL_TO_CPP_TARGET)

@Moxinilian Moxinilian merged commit f5006e0 into llvm:main Sep 3, 2025
11 checks passed
Zentrik added a commit to Zentrik/llvm-project that referenced this pull request Sep 3, 2025
…mpilation (llvm#156606)

Using `build_native_tool` directly doesn't seem to be standard, instead
other tools seem to call `setup_host_tool` (e.g. milr-linalg-ods-gen and
`add_tablegen` seems to have a copy of `setup_host_tool` internally).

When cross compiling llvm in two stages, the first building all native
tools and then the second using those built tools to cross compile, this
prevents the second stage from trying to rebuild mlir-irdl-to-cpp, which
fails.

(cherry picked from commit f5006e0)
giordano pushed a commit to JuliaLang/llvm-project that referenced this pull request Sep 3, 2025
…mpilation (llvm#156606)

Using `build_native_tool` directly doesn't seem to be standard, instead
other tools seem to call `setup_host_tool` (e.g. milr-linalg-ods-gen and
`add_tablegen` seems to have a copy of `setup_host_tool` internally).

When cross compiling llvm in two stages, the first building all native
tools and then the second using those built tools to cross compile, this
prevents the second stage from trying to rebuild mlir-irdl-to-cpp, which
fails.

(cherry picked from commit f5006e0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
mlir:core MLIR Core Infrastructure mlir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants