[mlir] Configure mlir so that it can be directly included in a parent cmakelists.txt
authorStella Stamenova <stilis@microsoft.com>
Wed, 19 Jan 2022 20:02:22 +0000 (12:02 -0800)
committerStella Stamenova <stilis@microsoft.com>
Wed, 19 Jan 2022 20:02:22 +0000 (12:02 -0800)
The goal is to allow a project to directly include the `CMakeLists.txt` of mlir via something such as `add_directory`. This currently doesn't work because the exported targets then end up being imported in the same top-level project and `cmake` is not happy. LLVM works around this by guarding the exports based on the existence of the `LLVMSupport` library. This change does the same using `MLIRSupport`. In our experience, no targets need to be added to the export in the case.

If there's a preferred way of doing this or a better lib to use as the main target to check for, please let me know.

Reviewed By: stellaraccident

Differential Revision: https://reviews.llvm.org/D117599

mlir/cmake/modules/MLIRConfig.cmake.in

index cab68ba..6324a1d 100644 (file)
@@ -22,7 +22,12 @@ set_property(GLOBAL PROPERTY MLIR_CONVERSION_LIBS "@MLIR_CONVERSION_LIBS@")
 set_property(GLOBAL PROPERTY MLIR_TRANSLATION_LIBS "@MLIR_TRANSLATION_LIBS@")
 
 # Provide all our library targets to users.
-@MLIR_CONFIG_INCLUDE_EXPORTS@
+# More specifically, configure MLIR so that it can be directly included in a top
+# level CMakeLists.txt, but also so that it can be imported via `find_package`.
+# This is based on how LLVM handles exports.
+if(NOT TARGET MLIRSupport)
+  @MLIR_CONFIG_INCLUDE_EXPORTS@
+endif()
 
 # By creating these targets here, subprojects that depend on MLIR's
 # tablegen-generated headers can always depend on these targets whether building