[Mlir-commits] [mlir] [mlir] Workaround for export lib generation on Windows for `mlir_arm_sme_abi_stubs` (PR #73147)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Nov 22 09:31:07 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-execution-engine

Author: Ivan Butygin (Hardcode84)

<details>
<summary>Changes</summary>

Using mlir cmake in downstream project fails with error
```
CMake Error at D:/projs/llvm/llvm-install/lib/cmake/mlir/MLIRTargets.cmake:2537 (message):
  The imported target "mlir_arm_sme_abi_stubs" references the file

     "D:/projs/llvm/llvm-install/lib/mlir_arm_sme_abi_stubs.lib"

  but this file does not exist.  Possible reasons include:

  * The file was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and contained

     "D:/projs/llvm/llvm-install/lib/cmake/mlir/MLIRTargets.cmake"

  but not all the files it references.

Call Stack (most recent call first):
  D:/projs/llvm/llvm-install/lib/cmake/mlir/MLIRConfig.cmake:37 (include)
  mlir/CMakeLists.txt:5 (find_package)
```

Windows cmake needs export libaries but it seems they are only being generated if you have at least one exported symbol. Add a dummy symbol to lib (export macros are copied from other mlir runnner libs).

Not sure what a best approach to fix this (probably we should just disable this lib on windows entirely), but it fixed things for me locally.

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


2 Files Affected:

- (modified) mlir/lib/ExecutionEngine/ArmSMEStubs.cpp (+19) 
- (modified) mlir/lib/ExecutionEngine/CMakeLists.txt (+1) 


``````````diff
diff --git a/mlir/lib/ExecutionEngine/ArmSMEStubs.cpp b/mlir/lib/ExecutionEngine/ArmSMEStubs.cpp
index f9f64ad5e5ac81c..66df7900aeb9c53 100644
--- a/mlir/lib/ExecutionEngine/ArmSMEStubs.cpp
+++ b/mlir/lib/ExecutionEngine/ArmSMEStubs.cpp
@@ -10,6 +10,21 @@
 #include <cstdint>
 #include <iostream>
 
+#ifdef _WIN32
+#ifndef MLIR_RUNNERUTILS_EXPORT
+#ifdef mlir_arm_sme_abi_stubs_EXPORTS
+// We are building this library
+#define MLIR_ARNSMEABISTUBS_EXPORT __declspec(dllexport)
+#else
+// We are using this library
+#define MLIR_ARNSMEABISTUBS_EXPORT __declspec(dllimport)
+#endif // mlir_runner_utils_EXPORTS
+#endif // MLIR_RUNNERUTILS_EXPORT
+#else
+// Non-windows: use visibility attributes.
+#define MLIR_ARNSMEABISTUBS_EXPORT __attribute__((visibility("default")))
+#endif // _WIN32
+
 // The actual implementation of these routines is in:
 // compiler-rt/lib/builtins/aarch64/sme-abi.S. These stubs allow the current
 // ArmSME tests to run without depending on compiler-rt. This works as we don't
@@ -18,6 +33,10 @@
 // a path to an alternate implementation.
 
 extern "C" {
+void MLIR_ARNSMEABISTUBS_EXPORT _mlir_arm_sme_abi_stubs_exportstub() {
+  // TODO: is function is not used, need at least one exported symbol on Windows
+  // to generate export library.
+}
 
 bool LLVM_ATTRIBUTE_WEAK __aarch64_sme_accessible() {
   // The ArmSME tests are run within an emulator so we assume SME is available.
diff --git a/mlir/lib/ExecutionEngine/CMakeLists.txt b/mlir/lib/ExecutionEngine/CMakeLists.txt
index fe139661f2bbb5a..70c5a07ad1ab237 100644
--- a/mlir/lib/ExecutionEngine/CMakeLists.txt
+++ b/mlir/lib/ExecutionEngine/CMakeLists.txt
@@ -181,6 +181,7 @@ if(LLVM_ENABLE_PIC)
   add_mlir_library(mlir_arm_sme_abi_stubs
     SHARED
     ArmSMEStubs.cpp)
+  target_compile_definitions(mlir_arm_sme_abi_stubs PRIVATE mlir_arm_sme_abi_stubs_EXPORTS)
 
   if(MLIR_ENABLE_CUDA_RUNNER)
     # Configure CUDA support. Using check_language first allows us to give a

``````````

</details>


https://github.com/llvm/llvm-project/pull/73147


More information about the Mlir-commits mailing list