258 lines
8.2 KiB
TOML
258 lines
8.2 KiB
TOML
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
[build-system]
|
|
# z3-static ships the PIC static libz3 + headers for explicit USE_Z3=ON builds.
|
|
requires = [
|
|
"scikit-build-core>=0.11",
|
|
"setuptools-scm>=8",
|
|
"z3-static>=4.16.0.post1",
|
|
]
|
|
build-backend = "scikit_build_core.build"
|
|
|
|
[project]
|
|
name = "apache-tvm"
|
|
# The version is derived from the most recent Git tag by setuptools_scm at build
|
|
# time (see [tool.setuptools_scm]); no manual version stamping is required.
|
|
dynamic = ["version"]
|
|
description = "Apache TVM: An End-to-End Deep Learning Compiler Stack"
|
|
readme = "README.md"
|
|
license = "Apache-2.0"
|
|
license-files = ["LICENSE"]
|
|
requires-python = ">=3.10"
|
|
authors = [{ name = "Apache TVM Community", email = "dev@tvm.apache.org" }]
|
|
keywords = ["machine learning", "compiler", "deep learning", "inference"]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Intended Audience :: Developers",
|
|
"Intended Audience :: Education",
|
|
"Intended Audience :: Science/Research",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Programming Language :: Python :: 3.13",
|
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
]
|
|
dependencies = [
|
|
"apache-tvm-ffi>=0.1.13",
|
|
"ml_dtypes",
|
|
"numpy",
|
|
"typing_extensions",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
torch = ["torch"]
|
|
cuda = ["cuda-bindings"]
|
|
meta-schedule = ["xgboost"]
|
|
popen-pool = ["psutil", "cloudpickle"]
|
|
rpc = ["tornado", "psutil", "cloudpickle"]
|
|
all = ["xgboost", "psutil", "cloudpickle", "tornado"]
|
|
|
|
[project.urls]
|
|
Homepage = "https://tvm.apache.org/"
|
|
Documentation = "https://tvm.apache.org/docs/"
|
|
Repository = "https://github.com/apache/tvm"
|
|
"Bug Tracker" = "https://github.com/apache/tvm/issues"
|
|
|
|
[dependency-groups]
|
|
torch = ["torch"]
|
|
popen-pool = ["psutil", "cloudpickle"]
|
|
test = [
|
|
"pytest",
|
|
"pytest-xdist",
|
|
"pytest-cov",
|
|
"pytest-mock",
|
|
"pytest-benchmark",
|
|
"pytest-timeout",
|
|
"pytest-rerunfailures",
|
|
"pytest-repeat",
|
|
{ include-group = "torch" },
|
|
{ include-group = "popen-pool" },
|
|
]
|
|
lint = ["ruff", "pre-commit"]
|
|
dev = [{ include-group = "test" }, { include-group = "lint" }]
|
|
|
|
[tool.scikit-build]
|
|
cmake.build-type = "Release"
|
|
wheel.py-api = "py3"
|
|
build-dir = "build"
|
|
|
|
# Wheel configuration
|
|
wheel.packages = ["python/tvm"]
|
|
wheel.install-dir = "tvm"
|
|
|
|
# Derive the project version from the Git tag via setuptools_scm
|
|
# (configured under [tool.setuptools_scm]).
|
|
metadata.version.provider = "scikit_build_core.metadata.setuptools_scm"
|
|
|
|
# Source distribution configuration
|
|
sdist.include = [
|
|
# Build files
|
|
"/CMakeLists.txt",
|
|
"/pyproject.toml",
|
|
"/cmake/**/*",
|
|
|
|
# Source code
|
|
"/src/**/*.cc",
|
|
"/src/**/*.h",
|
|
"/include/**/*.h",
|
|
|
|
# Python source
|
|
"/python/tvm/**/*.py",
|
|
"/python/tvm/**/*.pyi",
|
|
|
|
# Documentation and metadata
|
|
"/docs/**/*",
|
|
"/LICENSE",
|
|
"/README.md",
|
|
"/NOTICE",
|
|
|
|
# Tests
|
|
"/tests/**/*",
|
|
]
|
|
|
|
sdist.exclude = [
|
|
"**/.git",
|
|
"**/.github",
|
|
"**/__pycache__",
|
|
"**/*.pyc",
|
|
"build",
|
|
"dist",
|
|
"**/3rdparty/*/docs",
|
|
"**/3rdparty/*/media",
|
|
"**/3rdparty/*/examples",
|
|
"**/3rdparty/*/test",
|
|
]
|
|
|
|
# Logging
|
|
logging.level = "INFO"
|
|
|
|
[tool.scikit-build.cmake.define]
|
|
TVM_BUILD_PYTHON_MODULE = "ON"
|
|
USE_CUDA = "OFF"
|
|
# Keep Z3 disabled by default until CI's C++ toolchain can link z3-static reliably.
|
|
USE_Z3 = "OFF"
|
|
BUILD_TESTING = "OFF"
|
|
|
|
[tool.setuptools_scm]
|
|
# Version comes from the most recent Git tag (vMAJOR.MINOR.devN or vMAJOR.MINOR.PATCH).
|
|
# guess-next-dev reproduces the previous version.py behaviour for vMAJOR.MINOR.devN
|
|
# tags (e.g. v0.26.dev0 + N commits -> 0.26.devN). local_scheme = "no-local-version"
|
|
# drops the +g<hash> local segment: PyPI rejects local versions on upload, and
|
|
# this matches the public version the old version.py stamped.
|
|
version_file = "python/tvm/_version.py"
|
|
version_scheme = "guess-next-dev"
|
|
local_scheme = "no-local-version"
|
|
fallback_version = "0.26.dev0"
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
addopts = "-v --tb=short"
|
|
python_files = ["test_*.py", "*_test.py"]
|
|
python_classes = ["Test*"]
|
|
python_functions = ["test_*"]
|
|
markers = ["gpu: Mark a test as requiring a GPU"]
|
|
|
|
[tool.ruff]
|
|
include = [
|
|
"python/**/*.py",
|
|
"tests/**/*.py",
|
|
"docs/**/*.py",
|
|
"apps/**/*.py",
|
|
"ci/scripts/**/*.py",
|
|
"conftest.py",
|
|
"jvm/**/*.py",
|
|
"web/tests/**/*.py",
|
|
]
|
|
line-length = 100
|
|
indent-width = 4
|
|
target-version = "py310"
|
|
exclude = ["3rdparty", "build", "dist", ".venv", ".ruff_cache", "node_modules"]
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"E", # pycodestyle errors, https://docs.astral.sh/ruff/rules/#pycodestyle-e-w
|
|
"F", # pyflakes, https://docs.astral.sh/ruff/rules/#pyflakes-f
|
|
"I", # isort, https://docs.astral.sh/ruff/rules/#isort-i
|
|
"UP", # pyupgrade, https://docs.astral.sh/ruff/rules/#pyupgrade-up
|
|
"RUF", # ruff, https://docs.astral.sh/ruff/rules/#ruff-specific-rules-ruf
|
|
]
|
|
ignore = [
|
|
# pyupgrade (style preference or low-value)
|
|
"UP028", # yield-in-for-loop — sometimes clearer to keep
|
|
"UP030", # format-literals — minor
|
|
"UP031", # printf-string-formatting — style preference
|
|
# ruff (preview rules, not yet stable)
|
|
"RUF043", # pytest-raises-ambiguous-pattern
|
|
"RUF059", # unused-unpacked-variable
|
|
]
|
|
fixable = ["ALL"]
|
|
unfixable = []
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"__init__.py" = ["E402", "F401", "F403", "F405"]
|
|
"python/tvm/relax/op/nn/nn.py" = ["E501"]
|
|
"docs/how_to/tutorials/mix_python_and_tvm_with_pymodule.py" = ["RUF003"]
|
|
"python/tvm/relax/frontend/tflite/tflite_frontend.py" = ["E501"]
|
|
"python/tvm/relax/transform/legalize_ops/nn.py" = ["E501"]
|
|
# Scope-id declarations like ``lane_id = Tx.lane_id([32])`` register a TIR
|
|
# scope_id for side effect; the Python handle is often unused. Silence F841
|
|
# for paths that heavily use this idiom.
|
|
"tests/python/tirx/**/*.py" = ["F841"]
|
|
|
|
[tool.ruff.lint.isort]
|
|
known-first-party = ["tvm"]
|
|
|
|
[tool.ruff.format]
|
|
quote-style = "double"
|
|
indent-style = "space"
|
|
skip-magic-trailing-comma = false
|
|
line-ending = "auto"
|
|
docstring-code-format = false
|
|
docstring-code-line-length = "dynamic"
|
|
|
|
[tool.cibuildwheel]
|
|
# Skip win32, i686 (32-bit), and musllinux wheels.
|
|
skip = "*-win32 *-manylinux_i686 *-musllinux*"
|
|
build-verbosity = 1
|
|
test-requires = ["pytest", "numpy"]
|
|
test-command = "pytest -vvs {project}/tests/python/all-platform-minimal-test"
|
|
|
|
[tool.cibuildwheel.linux]
|
|
repair-wheel-command = "auditwheel repair --exclude libtvm_ffi.so --exclude libtvm_runtime_cuda.so --exclude 'libcuda.so.*' --exclude 'libcudart.so.*' --exclude 'libnvrtc.so.*' --exclude 'libnvrtc-builtins.so.*' -w {dest_dir} {wheel}"
|
|
|
|
[tool.cibuildwheel.macos]
|
|
# delocate breaks libtvm_runtime.dylib's ad-hoc signature (it links the excluded
|
|
# libtvm_ffi.dylib) and arm64 dyld kills an unsigned Mach-O, so re-sign + repack.
|
|
repair-wheel-command = '''
|
|
set -euo pipefail
|
|
DELOCATE_TMP_DIR="$(mktemp -d)"
|
|
delocate-wheel --ignore-missing-dependencies --exclude libtvm_ffi.dylib --require-archs {delocate_archs} -w "$DELOCATE_TMP_DIR" -v {wheel}
|
|
python -m pip install -q wheel
|
|
TMP_DIR="$(mktemp -d)"
|
|
python -m wheel unpack "$DELOCATE_TMP_DIR"/*.whl -d "$TMP_DIR"
|
|
find "$TMP_DIR" -type f \( -name "*.dylib" -o -name "*.so" \) -exec codesign --force --sign - {} +
|
|
python -m wheel pack "$TMP_DIR"/*/ -d {dest_dir}
|
|
rm -rf "$DELOCATE_TMP_DIR" "$TMP_DIR"
|
|
'''
|
|
|
|
[tool.cibuildwheel.windows]
|
|
before-build = 'python -m pip install "delvewheel>=1.12.0"'
|
|
repair-wheel-command = 'delvewheel repair --analyze-existing --ignore-existing --exclude "*tvm_ffi*.dll" --exclude tvm_runtime_cuda.dll --exclude nvcuda.dll --exclude cudart64_13.dll --exclude nvrtc64_130_0.dll -w {dest_dir} {wheel}'
|