llvm-project/mlir/lib/Bindings/Python/CMakeLists.txt

117 lines
3.6 KiB
CMake

include(AddMLIRPythonExtension)
add_custom_target(MLIRBindingsPythonExtension)
################################################################################
# Copy python source tree.
################################################################################
set(PY_SRC_FILES
mlir/__init__.py
mlir/_dlloader.py
mlir/ir.py
mlir/dialects/__init__.py
mlir/dialects/_linalg.py
mlir/dialects/_builtin.py
mlir/ir.py
mlir/passmanager.py
mlir/transforms/__init__.py
)
add_custom_target(MLIRBindingsPythonSources ALL
DEPENDS ${PY_SRC_FILES}
)
add_dependencies(MLIRBindingsPythonExtension MLIRBindingsPythonSources)
foreach(PY_SRC_FILE ${PY_SRC_FILES})
set(PY_DEST_FILE "${PROJECT_BINARY_DIR}/python/${PY_SRC_FILE}")
add_custom_command(
TARGET MLIRBindingsPythonSources PRE_BUILD
COMMENT "Copying python source ${PY_SRC_FILE} -> ${PY_DEST_FILE}"
DEPENDS "${PY_SRC_FILE}"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/${PY_SRC_FILE}" "${PY_DEST_FILE}"
)
endforeach()
################################################################################
# Generate dialect-specific bindings.
################################################################################
add_mlir_dialect_python_bindings(MLIRBindingsPythonBuiltinOps
TD_FILE BuiltinOps.td
DIALECT_NAME builtin)
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonBuiltinOps)
add_mlir_dialect_python_bindings(MLIRBindingsPythonLinalgOps
TD_FILE LinalgOps.td
DIALECT_NAME linalg
DEPENDS LinalgOdsGen)
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonLinalgOps)
add_mlir_dialect_python_bindings(MLIRBindingsPythonShapeOps
TD_FILE ShapeOps.td
DIALECT_NAME shape)
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonShapeOps)
add_mlir_dialect_python_bindings(MLIRBindingsPythonStandardOps
TD_FILE StandardOps.td
DIALECT_NAME std)
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonStandardOps)
add_mlir_dialect_python_bindings(MLIRBindingsPythonTensorOps
TD_FILE TensorOps.td
DIALECT_NAME tensor)
add_dependencies(MLIRBindingsPythonSources MLIRBindingsPythonTensorOps)
################################################################################
# Build core python extension
################################################################################
add_mlir_python_extension(MLIRCoreBindingsPythonExtension _mlir
INSTALL_DIR
python
SOURCES
MainModule.cpp
IRModules.cpp
PybindUtils.cpp
Pass.cpp
)
add_dependencies(MLIRBindingsPythonExtension MLIRCoreBindingsPythonExtension)
# Note that we copy from the source tree just like for headers because
# it will not be polluted with py_cache runtime artifacts (from testing and
# such).
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/mlir
DESTINATION python
COMPONENT MLIRBindingsPythonSources
FILES_MATCHING PATTERN "*.py"
)
if (NOT LLVM_ENABLE_IDE)
add_llvm_install_targets(
install-MLIRBindingsPythonSources
DEPENDS MLIRBindingsPythonSources
COMPONENT MLIRBindingsPythonSources)
endif()
# Dialect sources are generated. Install separately.
# Note that __pycache__ directories may have been left by tests and other
# executions. And __init__.py is handled as a regular source file.
install(
DIRECTORY ${PROJECT_BINARY_DIR}/python/mlir/dialects
DESTINATION python/mlir
COMPONENT MLIRBindingsPythonDialects
FILES_MATCHING PATTERN "*.py"
PATTERN "__pycache__" EXCLUDE
PATTERN "__init__.py" EXCLUDE
)
if (NOT LLVM_ENABLE_IDE)
add_llvm_install_targets(
install-MLIRBindingsPythonDialects
DEPENDS MLIRBindingsPythonSources
COMPONENT MLIRBindingsPythonDialects)
endif()
add_subdirectory(Transforms)