include(AddMLIRPython) # Specifies that all MLIR packages are co-located under the `mlir_standalone` # top level package (the API has been embedded in a relocatable way). add_compile_definitions("MLIR_PYTHON_PACKAGE_PREFIX=${MLIR_PYTHON_PACKAGE_PREFIX}.") ################################################################################ # Sources ################################################################################ declare_mlir_python_sources(StandalonePythonSources) declare_mlir_dialect_python_bindings( ADD_TO_PARENT StandalonePythonSources ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir_standalone" TD_FILE dialects/StandaloneOps.td SOURCES dialects/standalone_nanobind.py _mlir_libs/_standaloneDialectsNanobind/py.typed DIALECT_NAME standalone) declare_mlir_python_extension(StandalonePythonSources.NanobindExtension MODULE_NAME _standaloneDialectsNanobind ADD_TO_PARENT StandalonePythonSources SOURCES StandaloneExtensionNanobind.cpp PRIVATE_LINK_LIBS LLVMSupport EMBED_CAPI_LINK_LIBS MLIRCAPIIR MLIRCAPIArith MLIRCAPITransforms StandaloneCAPI ) ################################################################################ # Common CAPI ################################################################################ add_mlir_python_common_capi_library(StandalonePythonCAPI INSTALL_COMPONENT StandalonePythonModules INSTALL_DESTINATION "${MLIR_BINDINGS_PYTHON_INSTALL_PREFIX}/_mlir_libs" OUTPUT_DIRECTORY "${MLIR_BINARY_DIR}/${MLIR_BINDINGS_PYTHON_INSTALL_PREFIX}/_mlir_libs" RELATIVE_INSTALL_ROOT "../../../.." DECLARED_SOURCES StandalonePythonSources MLIRPythonSources.Core MLIRPythonSources.Dialects.builtin ) ################################################################################ # Instantiation of all Python modules ################################################################################ set(StandalonePythonModules_ROOT_PREFIX "${MLIR_BINARY_DIR}/${MLIR_BINDINGS_PYTHON_INSTALL_PREFIX}") if(MLIR_PYTHON_STUBGEN_ENABLED) # Everything here is very tightly coupled. See the ample descriptions at the bottom of # mlir/python/CMakeLists.txt. # For a non-external projects build (e.g., installed distro) the type gen targets for the core _mlir module # need to be re-declared. On the contrary, for an external projects build, the MLIRPythonExtension.Core.type_stub_gen # target already exists and can just be added to DECLARED_SOURCES (see below). if(NOT EXTERNAL_PROJECT_BUILD) set(_core_type_stub_sources _mlir/__init__.pyi _mlir/ir.pyi _mlir/passmanager.pyi _mlir/rewrite.pyi ) get_target_property(_core_extension_srcs MLIRPythonExtension.Core INTERFACE_SOURCES) mlir_generate_type_stubs( MODULE_NAME _mlir DEPENDS_TARGETS StandalonePythonModules.extension._mlir.dso OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/type_stubs/_mlir_libs" OUTPUTS "${_core_type_stub_sources}" DEPENDS_TARGET_SRC_DEPS "${_core_extension_srcs}" IMPORT_PATHS "${StandalonePythonModules_ROOT_PREFIX}/_mlir_libs" VERBOSE ) set(_mlir_typestub_gen_target "${NB_STUBGEN_CUSTOM_TARGET}") list(TRANSFORM _core_type_stub_sources PREPEND "_mlir_libs/") declare_mlir_python_sources( StandalonePythonExtension.Core.type_stub_gen ROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/type_stubs" ADD_TO_PARENT StandalonePythonSources SOURCES "${_core_type_stub_sources}" ) endif() get_target_property(_standalone_extension_srcs StandalonePythonSources.NanobindExtension INTERFACE_SOURCES) mlir_generate_type_stubs( MODULE_NAME mlir_standalone._mlir_libs._standaloneDialectsNanobind DEPENDS_TARGETS StandalonePythonModules.extension._mlir.dso StandalonePythonModules.extension._standaloneDialectsNanobind.dso OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/type_stubs/_mlir_libs" OUTPUTS _standaloneDialectsNanobind/__init__.pyi _standaloneDialectsNanobind/standalone.pyi DEPENDS_TARGET_SRC_DEPS "${_standalone_extension_srcs}" IMPORT_PATHS "${StandalonePythonModules_ROOT_PREFIX}/.." ) set(_standaloneDialectsNanobind_typestub_gen_target "${NB_STUBGEN_CUSTOM_TARGET}") declare_mlir_python_sources( StandalonePythonSources.type_stub_gen ROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/type_stubs" ADD_TO_PARENT StandalonePythonSources SOURCES _mlir_libs/_standaloneDialectsNanobind/__init__.pyi _mlir_libs/_standaloneDialectsNanobind/standalone.pyi ) endif() set(_declared_sources StandalonePythonSources MLIRPythonSources.Core MLIRPythonSources.Dialects.builtin ) # For an external projects build, the MLIRPythonExtension.Core.type_stub_gen # target already exists and can just be added to DECLARED_SOURCES. if(EXTERNAL_PROJECT_BUILD AND MLIR_PYTHON_STUBGEN_ENABLED) list(APPEND _declared_sources MLIRPythonExtension.Core.type_stub_gen) endif() add_mlir_python_modules(StandalonePythonModules ROOT_PREFIX "${StandalonePythonModules_ROOT_PREFIX}" INSTALL_PREFIX "${MLIR_BINDINGS_PYTHON_INSTALL_PREFIX}" DECLARED_SOURCES "${_declared_sources}" COMMON_CAPI_LINK_LIBS StandalonePythonCAPI ) if(MLIR_PYTHON_STUBGEN_ENABLED) if(NOT EXTERNAL_PROJECT_BUILD) add_dependencies(StandalonePythonModules "${_mlir_typestub_gen_target}") endif() add_dependencies(StandalonePythonModules "${_standaloneDialectsNanobind_typestub_gen_target}") endif()