[MLIR] Refactor handling of dialect libraries
authorStephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Wed, 26 Feb 2020 19:50:03 +0000 (11:50 -0800)
committerStephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Fri, 28 Feb 2020 19:35:16 +0000 (11:35 -0800)
Instead of creating extra libraries we don't really need, collect a
list of all dialects and use that instead.

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

31 files changed:
mlir/CMakeLists.txt
mlir/cmake/modules/AddMLIR.cmake
mlir/examples/toy/Ch5/CMakeLists.txt
mlir/examples/toy/Ch6/CMakeLists.txt
mlir/examples/toy/Ch7/CMakeLists.txt
mlir/lib/Dialect/AffineOps/CMakeLists.txt
mlir/lib/Dialect/CMakeLists.txt
mlir/lib/Dialect/FxpMathOps/CMakeLists.txt
mlir/lib/Dialect/GPU/CMakeLists.txt
mlir/lib/Dialect/LLVMIR/CMakeLists.txt
mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt
mlir/lib/Dialect/Linalg/EDSC/CMakeLists.txt
mlir/lib/Dialect/Linalg/IR/CMakeLists.txt
mlir/lib/Dialect/Linalg/Transforms/CMakeLists.txt
mlir/lib/Dialect/Linalg/Utils/CMakeLists.txt
mlir/lib/Dialect/LoopOps/CMakeLists.txt
mlir/lib/Dialect/LoopOps/Transforms/CMakeLists.txt
mlir/lib/Dialect/OpenMP/CMakeLists.txt
mlir/lib/Dialect/QuantOps/CMakeLists.txt
mlir/lib/Dialect/SDBM/CMakeLists.txt
mlir/lib/Dialect/SPIRV/CMakeLists.txt
mlir/lib/Dialect/SPIRV/Serialization/CMakeLists.txt
mlir/lib/Dialect/SPIRV/Transforms/CMakeLists.txt
mlir/lib/Dialect/Shape/CMakeLists.txt
mlir/lib/Dialect/StandardOps/CMakeLists.txt
mlir/lib/Dialect/VectorOps/CMakeLists.txt
mlir/tools/mlir-cpu-runner/CMakeLists.txt
mlir/tools/mlir-cuda-runner/CMakeLists.txt
mlir/tools/mlir-opt/CMakeLists.txt
mlir/tools/mlir-translate/CMakeLists.txt
mlir/tools/mlir-vulkan-runner/CMakeLists.txt

index ed26ddd..5afb039 100644 (file)
@@ -8,27 +8,6 @@ set(MLIR_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
 
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
 
-function(add_mlir_dialect dialect dialect_doc_filename)
-  set(LLVM_TARGET_DEFINITIONS ${dialect}.td)
-  mlir_tablegen(${dialect}.h.inc -gen-op-decls)
-  mlir_tablegen(${dialect}.cpp.inc -gen-op-defs)
-  add_public_tablegen_target(MLIR${dialect}IncGen)
-  add_dependencies(mlir-headers MLIR${dialect}IncGen)
-
-  # Generate Dialect Documentation
-  set(LLVM_TARGET_DEFINITIONS ${dialect_doc_filename}.td)
-  tablegen(MLIR ${dialect_doc_filename}.md -gen-op-doc "-I${MLIR_MAIN_SRC_DIR}" "-I${MLIR_INCLUDE_DIR}")
-  set(GEN_DOC_FILE ${MLIR_BINARY_DIR}/docs/Dialects/${dialect_doc_filename}.md)
-  add_custom_command(
-          OUTPUT ${GEN_DOC_FILE}
-          COMMAND ${CMAKE_COMMAND} -E copy
-                  ${CMAKE_CURRENT_BINARY_DIR}/${dialect_doc_filename}.md
-                  ${GEN_DOC_FILE}
-          DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${dialect_doc_filename}.md)
-  add_custom_target(${dialect_doc_filename}DocGen DEPENDS ${GEN_DOC_FILE})
-  add_dependencies(mlir-doc ${dialect_doc_filename}DocGen)
-endfunction()
-
 include(AddMLIR)
 
 # Installing the headers and docs needs to depend on generating any public
index 38e32ec..125a18d 100644 (file)
@@ -26,3 +26,31 @@ function(whole_archive_link target)
   endif()
   set_target_properties(${target} PROPERTIES LINK_FLAGS ${link_flags})
 endfunction(whole_archive_link)
+
+# Declare a dialect in the include directory
+function(add_mlir_dialect dialect dialect_doc_filename)
+  set(LLVM_TARGET_DEFINITIONS ${dialect}.td)
+  mlir_tablegen(${dialect}.h.inc -gen-op-decls)
+  mlir_tablegen(${dialect}.cpp.inc -gen-op-defs)
+  add_public_tablegen_target(MLIR${dialect}IncGen)
+  add_dependencies(mlir-headers MLIR${dialect}IncGen)
+
+  # Generate Dialect Documentation
+  set(LLVM_TARGET_DEFINITIONS ${dialect_doc_filename}.td)
+  tablegen(MLIR ${dialect_doc_filename}.md -gen-op-doc "-I${MLIR_MAIN_SRC_DIR}" "-I${MLIR_INCLUDE_DIR}")
+  set(GEN_DOC_FILE ${MLIR_BINARY_DIR}/docs/Dialects/${dialect_doc_filename}.md)
+  add_custom_command(
+          OUTPUT ${GEN_DOC_FILE}
+          COMMAND ${CMAKE_COMMAND} -E copy
+                  ${CMAKE_CURRENT_BINARY_DIR}/${dialect_doc_filename}.md
+                  ${GEN_DOC_FILE}
+          DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${dialect_doc_filename}.md)
+  add_custom_target(${dialect_doc_filename}DocGen DEPENDS ${GEN_DOC_FILE})
+  add_dependencies(mlir-doc ${dialect_doc_filename}DocGen)
+endfunction()
+
+# Declare the library associated with a dialect.
+function(add_mlir_dialect_library name)
+  set_property(GLOBAL APPEND PROPERTY MLIR_DIALECT_LIBS ${name})
+  add_llvm_library(${ARGV})
+endfunction(add_mlir_dialect_library)
index df71c35..4c2cf49 100644 (file)
@@ -25,12 +25,12 @@ add_dependencies(toyc-ch5 MLIRCallOpInterfacesIncGen)
 include_directories(include/)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/)
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 target_link_libraries(toyc-ch5
   PRIVATE
-    MLIRAllDialects
+    ${dialect_libs}
     MLIRAnalysis
     MLIRIR
     MLIRParser
     MLIRPass
     MLIRTransforms)
-
index 1497cc3..0540333 100644 (file)
@@ -27,9 +27,10 @@ add_dependencies(toyc-ch6 MLIRCallOpInterfacesIncGen)
 include_directories(include/)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/)
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 target_link_libraries(toyc-ch6
   PRIVATE
-    MLIRAllDialects
+    ${dialect_libs}
     MLIRAffineToStandard
     MLIRAnalysis
     MLIRExecutionEngine
@@ -42,4 +43,3 @@ target_link_libraries(toyc-ch6
     MLIRTargetLLVMIR
     MLIRTransforms
     )
-
index ece8c87..8f5e5f0 100644 (file)
@@ -27,9 +27,10 @@ add_dependencies(toyc-ch7 MLIRCallOpInterfacesIncGen)
 include_directories(include/)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 include_directories(${CMAKE_CURRENT_BINARY_DIR}/include/)
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 target_link_libraries(toyc-ch7
   PRIVATE
-    MLIRAllDialects
+    ${dialect_libs}
     MLIRAffineToStandard
     MLIRAnalysis
     MLIRExecutionEngine
index 3d07cde..1c1c95c 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRAffineOps
+add_mlir_dialect_library(MLIRAffineOps
   AffineOps.cpp
   AffineValueMap.cpp
   EDSC/Builders.cpp
index 0542830..59186ed 100644 (file)
@@ -24,29 +24,3 @@ add_llvm_library(MLIRDialect
   ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect
   )
 target_link_libraries(MLIRDialect MLIRIR)
-
-# Create a dummy MLIRAllDialects library for the purpose
-# of having an easy tracking of all dialects when linking
-# them in tools.
-# Empty libraries aren't possible with CMake, create a dummy file.
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/all_dialects.c "typedef int make_iso_compilers_happy;\n")
-add_llvm_library(MLIRAllDialects
-  ${CMAKE_CURRENT_BINARY_DIR}/all_dialects.c
-)
-target_link_libraries(MLIRAllDialects
-  MLIRAffineOps
-  MLIRFxpMathOps
-  MLIRGPU
-  MLIRLLVMIR
-  MLIRNVVMIR
-  MLIRROCDLIR
-  MLIRLinalgOps
-  MLIRLoopOps
-  MLIROpenMP
-  MLIRQuantOps
-  MLIRSDBM
-  MLIRShape
-  MLIRSPIRV
-  MLIRStandardOps
-  MLIRVectorOps
-)
index ba9a300..021cade 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRFxpMathOps
+add_mlir_dialect_library(MLIRFxpMathOps
   IR/FxpMathOps.cpp
   Transforms/LowerUniformRealMath.cpp
 
index dec7a8b..41884a9 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRGPU
+add_mlir_dialect_library(MLIRGPU
   IR/GPUDialect.cpp
   Transforms/AllReduceLowering.cpp
   Transforms/KernelOutlining.cpp
index 3c68476..b0c4eb2 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRLLVMIR
+add_mlir_dialect_library(MLIRLLVMIR
   IR/LLVMDialect.cpp
 
   ADDITIONAL_HEADER_DIRS
@@ -7,7 +7,7 @@ add_llvm_library(MLIRLLVMIR
 add_dependencies(MLIRLLVMIR MLIRLLVMOpsIncGen MLIRLLVMConversionsIncGen LLVMAsmParser LLVMCore LLVMSupport)
 target_link_libraries(MLIRLLVMIR LLVMAsmParser LLVMCore LLVMSupport MLIRIR)
 
-add_llvm_library(MLIRNVVMIR
+add_mlir_dialect_library(MLIRNVVMIR
   IR/NVVMDialect.cpp
 
   ADDITIONAL_HEADER_DIRS
@@ -16,7 +16,7 @@ add_llvm_library(MLIRNVVMIR
 add_dependencies(MLIRNVVMIR MLIRNVVMOpsIncGen MLIRNVVMConversionsIncGen LLVMAsmParser LLVMCore LLVMSupport)
 target_link_libraries(MLIRNVVMIR LLVMAsmParser MLIRIR MLIRLLVMIR LLVMSupport LLVMCore)
 
-add_llvm_library(MLIRROCDLIR
+add_mlir_dialect_library(MLIRROCDLIR
   IR/ROCDLDialect.cpp
 
   ADDITIONAL_HEADER_DIRS
index d87563f..96698a9 100644 (file)
@@ -5,7 +5,7 @@ set(LIBS
   )
 
 
-add_llvm_library(MLIRLinalgAnalysis
+add_mlir_dialect_library(MLIRLinalgAnalysis
   DependenceAnalysis.cpp
   
   ADDITIONAL_HEADER_DIRS
index d6376dd..dc87d7f 100644 (file)
@@ -8,7 +8,7 @@ set(LIBS
   MLIRStandardOps
   )
 
-add_llvm_library(MLIRLinalgEDSC
+add_mlir_dialect_library(MLIRLinalgEDSC
   Builders.cpp
 
   ADDITIONAL_HEADER_DIRS
index c781e1c..9dba1e5 100644 (file)
@@ -4,7 +4,7 @@ set(LIBS
   MLIRStandardOps
   )
 
-add_llvm_library(MLIRLinalgOps
+add_mlir_dialect_library(MLIRLinalgOps
   LinalgOps.cpp
   LinalgTypes.cpp
 
index d26cced..763ef55 100644 (file)
@@ -16,7 +16,7 @@ set(LIBS
   MLIRVectorOps
   )
 
-add_llvm_library(MLIRLinalgTransforms
+add_mlir_dialect_library(MLIRLinalgTransforms
   Fusion.cpp
   LinalgTransforms.cpp
   LinalgToLoops.cpp
index 8b98077..07e7588 100644 (file)
@@ -9,7 +9,7 @@ set(LIBS
   MLIRTransformUtils
   )
   
-add_llvm_library(MLIRLinalgUtils
+add_mlir_dialect_library(MLIRLinalgUtils
 
   Utils.cpp
 
index 4e9ef44..98367d1 100644 (file)
@@ -1,5 +1,5 @@
 file(GLOB globbed *.c *.cpp)
-add_llvm_library(MLIRLoopOps
+add_mlir_dialect_library(MLIRLoopOps
   ${globbed}
   EDSC/Builders.cpp
 
index 7f5b16f..eb2aaf6 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRLoopOpsTransforms
+add_mlir_dialect_library(MLIRLoopOpsTransforms
   ParallelLoopFusion.cpp
   ParallelLoopSpecialization.cpp
   ParallelLoopTiling.cpp
index 7b88e5c..bf55088 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIROpenMP
+add_mlir_dialect_library(MLIROpenMP
   IR/OpenMPDialect.cpp
 
   ADDITIONAL_HEADER_DIRS
index 4830566..12cb44f 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRQuantOps
+add_mlir_dialect_library(MLIRQuantOps
   IR/QuantOps.cpp
   IR/QuantTypes.cpp
   IR/TypeDetail.h
index 36be946..648d9f2 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRSDBM
+add_mlir_dialect_library(MLIRSDBM
   SDBM.cpp
   SDBMExpr.cpp
 
index 85bb739..ad1bb4d 100644 (file)
@@ -2,7 +2,7 @@ set(LLVM_TARGET_DEFINITIONS SPIRVCanonicalization.td)
 mlir_tablegen(SPIRVCanonicalization.inc -gen-rewriters)
 add_public_tablegen_target(MLIRSPIRVCanonicalizationIncGen)
 
-add_llvm_library(MLIRSPIRV
+add_mlir_dialect_library(MLIRSPIRV
   LayoutUtils.cpp
   SPIRVCanonicalization.cpp
   SPIRVDialect.cpp
index 43c78dc..3d9ea79 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRSPIRVSerialization
+add_mlir_dialect_library(MLIRSPIRVSerialization
   Deserializer.cpp
   Serializer.cpp
   SPIRVBinaryUtils.cpp
index f9b5a56..e9d6492 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRSPIRVTransforms
+add_mlir_dialect_library(MLIRSPIRVTransforms
   DecorateSPIRVCompositeTypeLayoutPass.cpp
   LowerABIAttributesPass.cpp
 
index 219a78b..f423232 100644 (file)
@@ -1,5 +1,5 @@
 file(GLOB globbed *.c *.cpp)
-add_llvm_library(MLIRShape
+add_mlir_dialect_library(MLIRShape
   ${globbed}
 
   ADDITIONAL_HEADER_DIRS
index 37a63e3..c8af470 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRStandardOps
+add_mlir_dialect_library(MLIRStandardOps
   IR/Ops.cpp
   EDSC/Builders.cpp
   EDSC/Intrinsics.cpp
index 27cb10f..8bdce35 100644 (file)
@@ -1,4 +1,4 @@
-add_llvm_library(MLIRVectorOps
+add_mlir_dialect_library(MLIRVectorOps
   VectorOps.cpp
   VectorTransforms.cpp
   VectorUtils.cpp
index b0676ef..ee56acd 100644 (file)
@@ -2,8 +2,9 @@ add_llvm_tool(mlir-cpu-runner
   mlir-cpu-runner.cpp
 )
 llvm_update_compile_flags(mlir-cpu-runner)
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 target_link_libraries(mlir-cpu-runner PRIVATE
-  MLIRAllDialects
+  ${dialect_libs}
   MLIRAnalysis
   MLIREDSC
   MLIRExecutionEngine
index c79d64a..e9fb740 100644 (file)
@@ -35,29 +35,20 @@ if(MLIR_CUDA_RUNNER_ENABLED)
     ${CUDA_RUNTIME_LIBRARY}
   )
 
+  get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
   set(LIBS
+    ${dialect_libs}
     LLVMCore
     LLVMSupport
     MLIRJitRunner
-    MLIRAffineOps
     MLIRAnalysis
     MLIREDSC
     MLIRExecutionEngine
-    MLIRFxpMathOps
-    MLIRGPU
     MLIRGPUtoCUDATransforms
     MLIRGPUtoNVVMTransforms
     MLIRIR
-    MLIRLLVMIR
-    MLIRLinalgOps
     MLIRLoopToStandard
-    MLIROpenMP
     MLIRParser
-    MLIRQuantOps
-    MLIRROCDLIR
-    MLIRSPIRV
-    MLIRSPIRV
-    MLIRStandardOps
     MLIRStandardToLLVM
     MLIRSupport
     MLIRTargetLLVMIR
index fad641c..d7b96d0 100644 (file)
@@ -18,11 +18,12 @@ target_link_libraries(MLIRMlirOptMain
   ${LIB_LIBS}
 )
 
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 set(LIBS
+  ${dialect_libs}
   MLIRLoopOpsTransforms
   MLIRLoopAnalysis
   MLIRAnalysis
-  MLIRAffineOps
   MLIRAffineToStandard
   MLIRDialect
   MLIRLoopsToGPU
@@ -30,36 +31,22 @@ set(LIBS
 
   MLIRLoopToStandard
   MLIREDSC
-  MLIRFxpMathOps
-  MLIRGPU
   MLIRGPUtoCUDATransforms
   MLIRGPUtoNVVMTransforms
   MLIRGPUtoROCDLTransforms
   MLIRGPUtoSPIRVTransforms
   MLIRGPUtoVulkanTransforms
-  MLIRLinalgOps
-  MLIRLinalgAnalysis
-  MLIRLinalgEDSC
-  MLIRLinalgTransforms
-  MLIRLinalgUtils
-  MLIRLLVMIR
-  MLIRLoopOps
-  MLIRNVVMIR
-  MLIROpenMP
   MLIROptLib
   MLIRParser
   MLIRPass
   MLIRQuantizerFxpMathConfig
   MLIRQuantizerSupport
   MLIRQuantizerTransforms
-  MLIRQuantOps
-  MLIRROCDLIR
   MLIRSPIRV
   MLIRLinalgToSPIRVTransforms
   MLIRStandardToSPIRVTransforms
   MLIRSPIRVTestPasses
   MLIRSPIRVTransforms
-  MLIRStandardOps
   MLIRStandardToLLVM
   MLIRTransforms
   MLIRTransformUtils
@@ -68,7 +55,6 @@ set(LIBS
   MLIRTestPass
   MLIRTestTransforms
   MLIRSupport
-  MLIRVectorOps
   MLIRVectorToLLVM
   MLIRVectorToLoops
   MLIRIR
index 4b95a95..d665789 100644 (file)
@@ -1,5 +1,6 @@
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
 set(LIBS
-  MLIRAllDialects
+  ${dialect_libs}
   MLIRParser
   MLIRPass
   MLIRSPIRV
index 0fd4bf5..f68ddab 100644 (file)
@@ -51,31 +51,24 @@ if (MLIR_VULKAN_RUNNER_ENABLED)
     ${Vulkan_LIBRARY}
   )
 
+  get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
   set(LIBS
+    ${dialect_libs}
     LLVMCore
     LLVMSupport
     MLIRJitRunner
-    MLIRAffineOps
     MLIRAnalysis
     MLIREDSC
     MLIRExecutionEngine
-    MLIRFxpMathOps
-    MLIRGPU
     MLIRGPUtoCUDATransforms
     MLIRGPUtoNVVMTransforms
     MLIRGPUtoSPIRVTransforms
     MLIRGPUtoVulkanTransforms
     MLIRIR
     MLIRLLVMIR
-    MLIRLinalgOps
     MLIRLoopToStandard
-    MLIROpenMP
     MLIRParser
-    MLIRQuantOps
-    MLIRROCDLIR
-    MLIRSPIRV
     MLIRSPIRVTransforms
-    MLIRStandardOps
     MLIRStandardToLLVM
     MLIRSupport
     MLIRTargetLLVMIR