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
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)
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)
-
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
MLIRTargetLLVMIR
MLIRTransforms
)
-
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
-add_llvm_library(MLIRAffineOps
+add_mlir_dialect_library(MLIRAffineOps
AffineOps.cpp
AffineValueMap.cpp
EDSC/Builders.cpp
${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
-)
-add_llvm_library(MLIRFxpMathOps
+add_mlir_dialect_library(MLIRFxpMathOps
IR/FxpMathOps.cpp
Transforms/LowerUniformRealMath.cpp
-add_llvm_library(MLIRGPU
+add_mlir_dialect_library(MLIRGPU
IR/GPUDialect.cpp
Transforms/AllReduceLowering.cpp
Transforms/KernelOutlining.cpp
-add_llvm_library(MLIRLLVMIR
+add_mlir_dialect_library(MLIRLLVMIR
IR/LLVMDialect.cpp
ADDITIONAL_HEADER_DIRS
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
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
)
-add_llvm_library(MLIRLinalgAnalysis
+add_mlir_dialect_library(MLIRLinalgAnalysis
DependenceAnalysis.cpp
ADDITIONAL_HEADER_DIRS
MLIRStandardOps
)
-add_llvm_library(MLIRLinalgEDSC
+add_mlir_dialect_library(MLIRLinalgEDSC
Builders.cpp
ADDITIONAL_HEADER_DIRS
MLIRStandardOps
)
-add_llvm_library(MLIRLinalgOps
+add_mlir_dialect_library(MLIRLinalgOps
LinalgOps.cpp
LinalgTypes.cpp
MLIRVectorOps
)
-add_llvm_library(MLIRLinalgTransforms
+add_mlir_dialect_library(MLIRLinalgTransforms
Fusion.cpp
LinalgTransforms.cpp
LinalgToLoops.cpp
MLIRTransformUtils
)
-add_llvm_library(MLIRLinalgUtils
+add_mlir_dialect_library(MLIRLinalgUtils
Utils.cpp
file(GLOB globbed *.c *.cpp)
-add_llvm_library(MLIRLoopOps
+add_mlir_dialect_library(MLIRLoopOps
${globbed}
EDSC/Builders.cpp
-add_llvm_library(MLIRLoopOpsTransforms
+add_mlir_dialect_library(MLIRLoopOpsTransforms
ParallelLoopFusion.cpp
ParallelLoopSpecialization.cpp
ParallelLoopTiling.cpp
-add_llvm_library(MLIROpenMP
+add_mlir_dialect_library(MLIROpenMP
IR/OpenMPDialect.cpp
ADDITIONAL_HEADER_DIRS
-add_llvm_library(MLIRQuantOps
+add_mlir_dialect_library(MLIRQuantOps
IR/QuantOps.cpp
IR/QuantTypes.cpp
IR/TypeDetail.h
-add_llvm_library(MLIRSDBM
+add_mlir_dialect_library(MLIRSDBM
SDBM.cpp
SDBMExpr.cpp
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
-add_llvm_library(MLIRSPIRVSerialization
+add_mlir_dialect_library(MLIRSPIRVSerialization
Deserializer.cpp
Serializer.cpp
SPIRVBinaryUtils.cpp
-add_llvm_library(MLIRSPIRVTransforms
+add_mlir_dialect_library(MLIRSPIRVTransforms
DecorateSPIRVCompositeTypeLayoutPass.cpp
LowerABIAttributesPass.cpp
file(GLOB globbed *.c *.cpp)
-add_llvm_library(MLIRShape
+add_mlir_dialect_library(MLIRShape
${globbed}
ADDITIONAL_HEADER_DIRS
-add_llvm_library(MLIRStandardOps
+add_mlir_dialect_library(MLIRStandardOps
IR/Ops.cpp
EDSC/Builders.cpp
EDSC/Intrinsics.cpp
-add_llvm_library(MLIRVectorOps
+add_mlir_dialect_library(MLIRVectorOps
VectorOps.cpp
VectorTransforms.cpp
VectorUtils.cpp
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
${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
${LIB_LIBS}
)
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
set(LIBS
+ ${dialect_libs}
MLIRLoopOpsTransforms
MLIRLoopAnalysis
MLIRAnalysis
- MLIRAffineOps
MLIRAffineToStandard
MLIRDialect
MLIRLoopsToGPU
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
MLIRTestPass
MLIRTestTransforms
MLIRSupport
- MLIRVectorOps
MLIRVectorToLLVM
MLIRVectorToLoops
MLIRIR
+get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
set(LIBS
- MLIRAllDialects
+ ${dialect_libs}
MLIRParser
MLIRPass
MLIRSPIRV
${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