include(AddMLIRPython) ################################################################################ # Structural groupings. ################################################################################ declare_mlir_python_sources(MLIRPythonSources) declare_mlir_python_sources(MLIRPythonSources.Dialects ADD_TO_PARENT MLIRPythonSources) declare_mlir_python_sources(MLIRPythonTestSources) declare_mlir_python_sources(MLIRPythonTestSources.Dialects ADD_TO_PARENT MLIRPythonTestSources) ################################################################################ # Pure python sources and generated code ################################################################################ declare_mlir_python_sources(MLIRPythonSources.Core ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" ADD_TO_PARENT MLIRPythonSources SOURCES _mlir_libs/__init__.py ir.py passmanager.py dialects/_ods_common.py ) declare_mlir_python_sources(MLIRPythonSources.ExecutionEngine ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" ADD_TO_PARENT MLIRPythonSources SOURCES execution_engine.py SOURCES_GLOB runtime/*.py ) declare_mlir_python_sources(MLIRPythonSources.Passes ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" ADD_TO_PARENT MLIRPythonSources SOURCES_GLOB all_passes_registration/*.py conversions/*.py transforms/*.py ) declare_mlir_python_sources(MLIRPythonCAPIHeaderSources ROOT_DIR "${MLIR_SOURCE_DIR}/include" SOURCES_GLOB "mlir-c/*.h" DEST_PREFIX "_mlir_libs/include" ) ################################################################################ # Dialect bindings ################################################################################ declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/AsyncOps.td SOURCES_GLOB dialects/async_dialect/*.py DIALECT_NAME async_dialect) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/BuiltinOps.td SOURCES dialects/builtin.py dialects/_builtin_ops_ext.py DIALECT_NAME builtin) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/GPUOps.td SOURCES_GLOB dialects/gpu/*.py DIALECT_NAME gpu) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/LinalgOps.td SOURCES dialects/_linalg_ops_ext.py SOURCES_GLOB dialects/linalg/*.py DIALECT_NAME linalg DEPENDS LinalgOdsGen) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/MathOps.td SOURCES dialects/math.py DIALECT_NAME math) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/MemRefOps.td SOURCES dialects/memref.py DIALECT_NAME memref) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonTestSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/PythonTest.td SOURCES dialects/python_test.py DIALECT_NAME python_test) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/ShapeOps.td SOURCES dialects/shape.py DIALECT_NAME shape) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" SOURCES dialects/sparse_tensor.py DIALECT_NAME sparse_tensor) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/StandardOps.td SOURCES dialects/std.py DIALECT_NAME std) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/TensorOps.td SOURCES dialects/tensor.py DIALECT_NAME tensor) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/TosaOps.td SOURCES dialects/tosa.py DIALECT_NAME tosa) declare_mlir_dialect_python_bindings( ADD_TO_PARENT MLIRPythonSources.Dialects ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir" TD_FILE dialects/VectorOps.td SOURCES dialects/vector.py DIALECT_NAME vector) ################################################################################ # Python extensions. # The sources for these are all in lib/Bindings/Python, but since they have to # be rebuilt for each package and integrate with the source setup here, we # just reference them here instead of having ordered, cross package target # dependencies. ################################################################################ set(PYTHON_SOURCE_DIR "${MLIR_SOURCE_DIR}/lib/Bindings/Python") declare_mlir_python_extension(MLIRPythonExtension.Core MODULE_NAME _mlir ADD_TO_PARENT MLIRPythonSources.Core SOURCES ${PYTHON_SOURCE_DIR}/DialectLinalg.cpp # TODO: Break this out. ${PYTHON_SOURCE_DIR}/DialectSparseTensor.cpp # TODO: Break this out. ${PYTHON_SOURCE_DIR}/MainModule.cpp ${PYTHON_SOURCE_DIR}/IRAffine.cpp ${PYTHON_SOURCE_DIR}/IRAttributes.cpp ${PYTHON_SOURCE_DIR}/IRCore.cpp ${PYTHON_SOURCE_DIR}/IRModule.cpp ${PYTHON_SOURCE_DIR}/IRTypes.cpp ${PYTHON_SOURCE_DIR}/PybindUtils.cpp ${PYTHON_SOURCE_DIR}/Pass.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPIDebug MLIRCAPIIR MLIRCAPIRegistration # TODO: See about dis-aggregating # Dialects MLIRCAPILinalg # TODO: Remove when above is removed. MLIRCAPISparseTensor # TODO: Remove when above is removed. MLIRCAPIStandard ) declare_mlir_python_extension(MLIRPythonExtension.AllPassesRegistration MODULE_NAME _mlirAllPassesRegistration SOURCES ${PYTHON_SOURCE_DIR}/AllPassesRegistration.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPIConversion MLIRCAPITransforms ) declare_mlir_python_extension(MLIRPythonExtension.AsyncDialectPasses MODULE_NAME _mlirAsyncPasses ADD_TO_PARENT MLIRPythonSources.Dialects.async_dialect SOURCES ${PYTHON_SOURCE_DIR}/AsyncPasses.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPIAsync ) declare_mlir_python_extension(MLIRPythonExtension.Conversions MODULE_NAME _mlirConversions ADD_TO_PARENT MLIRPythonSources.Passes SOURCES ${PYTHON_SOURCE_DIR}/Conversions/Conversions.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPIConversion ) declare_mlir_python_extension(MLIRPythonExtension.ExecutionEngine MODULE_NAME _mlirExecutionEngine ADD_TO_PARENT MLIRPythonSources.ExecutionEngine SOURCES ${PYTHON_SOURCE_DIR}/ExecutionEngineModule.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCEXECUTIONENGINE ) declare_mlir_python_extension(MLIRPythonExtension.GPUDialectPasses MODULE_NAME _mlirGPUPasses ADD_TO_PARENT MLIRPythonSources.Dialects.gpu SOURCES ${PYTHON_SOURCE_DIR}/GPUPasses.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPIGPU ) declare_mlir_python_extension(MLIRPythonExtension.LinalgPasses MODULE_NAME _mlirLinalgPasses ADD_TO_PARENT MLIRPythonSources.Dialects.linalg SOURCES ${PYTHON_SOURCE_DIR}/LinalgPasses.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPILinalg ) declare_mlir_python_extension(MLIRPythonExtension.SparseTensorDialectPasses MODULE_NAME _mlirSparseTensorPasses ADD_TO_PARENT MLIRPythonSources.Dialects.sparse_tensor SOURCES ${PYTHON_SOURCE_DIR}/SparseTensorPasses.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPISparseTensor ) declare_mlir_python_extension(MLIRPythonExtension.Transforms MODULE_NAME _mlirTransforms ADD_TO_PARENT MLIRPythonSources.Passes SOURCES ${PYTHON_SOURCE_DIR}/Transforms/Transforms.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPITransforms ) ################################################################################ # Common CAPI dependency DSO. # All python extensions must link through one DSO which exports the CAPI, and # this must have a globally unique name amongst all embeddors of the python # library since it will effectively have global scope. # # The presence of this aggregate library is part of the long term plan, but its # use needs to be made more flexible. # # TODO: Upgrade to the aggregate utility in https://reviews.llvm.org/D106419 # once ready. ################################################################################ add_mlir_python_common_capi_library(MLIRPythonCAPI INSTALL_COMPONENT MLIRPythonModules INSTALL_DESTINATION python_packages/mlir_core/mlir/_mlir_libs OUTPUT_DIRECTORY "${MLIR_BINARY_DIR}/python_packages/mlir_core/mlir/_mlir_libs" RELATIVE_INSTALL_ROOT "../../../.." DECLARED_SOURCES MLIRPythonSources MLIRPythonExtension.AllPassesRegistration ) ################################################################################ # The fully assembled package of modules. # This must come last. ################################################################################ add_mlir_python_modules(MLIRPythonModules ROOT_PREFIX "${MLIR_BINARY_DIR}/python_packages/mlir_core/mlir" INSTALL_PREFIX "python_packages/mlir_core/mlir" DECLARED_SOURCES MLIRPythonSources MLIRPythonExtension.AllPassesRegistration MLIRPythonCAPIHeaderSources COMMON_CAPI_LINK_LIBS MLIRPythonCAPI ) add_mlir_python_modules(MLIRPythonTestModules ROOT_PREFIX "${MLIR_BINARY_DIR}/python_packages/mlir_test/mlir" INSTALL_PREFIX "python_packages/mlir_test/mlir" DECLARED_SOURCES MLIRPythonTestSources )