Skip to content

[mlir][python] add pyproject.toml #124878

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions mlir/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,8 @@ set(MLIR_BINDINGS_PYTHON_NB_DOMAIN "mlir"
CACHE STRING "nanobind domain for MLIR python bindings.")
set(MLIR_ENABLE_BINDINGS_PYTHON 0 CACHE BOOL
"Enables building of Python bindings.")
set(MLIR_BINDINGS_PYTHON_INSTALL_PREFIX "python_packages/mlir_core/mlir" CACHE STRING
"Prefix under install directory to place python bindings")
set(MLIR_DETECT_PYTHON_ENV_PRIME_SEARCH 1 CACHE BOOL
"Prime the python detection by searching for a full 'Development' \
component first (temporary while diagnosing environment specific Python \
Expand Down
6 changes: 3 additions & 3 deletions mlir/python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ declare_mlir_dialect_python_bindings(
ADD_TO_PARENT MLIRPythonSources.Dialects
ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mlir"
TD_FILE dialects/EmitC.td
SOURCES
SOURCES
dialects/emitc.py
DIALECT_NAME emitc)

Expand Down Expand Up @@ -764,7 +764,7 @@ endif()

add_mlir_python_common_capi_library(MLIRPythonCAPI
INSTALL_COMPONENT MLIRPythonModules
INSTALL_DESTINATION python_packages/mlir_core/mlir/_mlir_libs
INSTALL_DESTINATION "${MLIR_BINDINGS_PYTHON_INSTALL_PREFIX}/_mlir_libs"
OUTPUT_DIRECTORY "${MLIR_BINARY_DIR}/python_packages/mlir_core/mlir/_mlir_libs"
RELATIVE_INSTALL_ROOT "../../../.."
DECLARED_HEADERS
Expand Down Expand Up @@ -795,7 +795,7 @@ endif()

add_mlir_python_modules(MLIRPythonModules
ROOT_PREFIX "${MLIR_BINARY_DIR}/python_packages/mlir_core/mlir"
INSTALL_PREFIX "python_packages/mlir_core/mlir"
INSTALL_PREFIX "${MLIR_BINDINGS_PYTHON_INSTALL_PREFIX}"
DECLARED_SOURCES
MLIRPythonSources
MLIRPythonExtension.RegisterEverything
Expand Down
43 changes: 43 additions & 0 deletions mlir/python/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# Copyright (c) 2025.

[project]
name = "mlir-python-bindings"
version = "0.0.1"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OOC, do you have any idea when we'd bump this? E.g., every new feature bump? (is there an option to just have sha attached or something, I see there is some support for dynamic version)

requires-python = ">=3.8,<=3.13"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there anything that prevents the mlir bindings from working with Python versions newer than 3.13?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no - this toml is copy-pasta from some downstream uses where I do have a hard upperbound but for upstream there's no blocker.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we remove it then?

[project.urls]
Homepage = "https://github.com/llvm/llvm-project"
Discussions = "https://discourse.llvm.org/"
"Issue Tracker" = "https://github.com/llvm/llvm-project/issues?q=is%3Aissue%20state%3Aopen%20label%3Amlir%3Apython%20"
"Source Code" = "https://github.com/llvm/llvm-project/tree/main/mlir/python"

[build-system]
requires = [
"scikit-build-core==0.10.7",
"typing_extensions==4.12.2",
"nanobind>=2.4, <3.0",
"numpy>=1.19.5, <=2.1.2",
"pybind11>=2.10.0, <=2.13.6",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this due to some of the in repo dialects still using pybind? (downstream folks obviously weren't asked to switch etc)

"PyYAML>=5.4.0, <=6.0.1",
'ml_dtypes>=0.1.0, <=0.6.0; python_version<"3.13"',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like this is optional and so too numpy - both very useful and used by most, but optional.

'ml_dtypes>=0.5.0, <=0.6.0; python_version>="3.13"'
]
build-backend = "scikit_build_core.build"

[tool.scikit-build]
minimum-version = "0.10"
build-dir = "../../build"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we use environment variables from/thread through to cmake here?

cmake.source-dir = "../../llvm"
wheel.exclude = ["bin", "include", "lib", "src", "share"]
build.targets = ["MLIRPythonModules"]

[tool.scikit-build.cmake.define]
CMAKE_C_COMPILER_LAUNCHER = { env = "CMAKE_C_COMPILER_LAUNCHER", default = "" }
CMAKE_CXX_COMPILER_LAUNCHER = { env = "CMAKE_CXX_COMPILER_LAUNCHER", default = "" }
CMAKE_CXX_VISIBILITY_PRESET = "hidden"
CMAKE_VERBOSE_MAKEFILE = "ON"
LLVM_ENABLE_PROJECTS = "mlir"
MLIR_ENABLE_BINDINGS_PYTHON = "ON"
MLIR_BINDINGS_PYTHON_INSTALL_PREFIX = "mlir"