This is an automated email from the ASF dual-hosted git repository.
tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new 5feed58f52 [Python] Complete Python packaging with scikit-build-core
(#18251)
5feed58f52 is described below
commit 5feed58f52157061fbfccaaf9df6c47da136e1d3
Author: Ruihang Lai <[email protected]>
AuthorDate: Fri Aug 29 14:51:54 2025 -0400
[Python] Complete Python packaging with scikit-build-core (#18251)
Following #18239, this PR fixes a few issues we ran into during
testing the packaging flow through scikit-build-core.
---
CMakeLists.txt | 56 +++++++++++++++++++++++++++---------------------------
ffi/CMakeLists.txt | 10 ++--------
pyproject.toml | 19 +++---------------
3 files changed, 33 insertions(+), 52 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c27c1bd73..b05e5e1657 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -122,7 +122,7 @@ tvm_option(USE_MRVL "Build with MRVL TVM support" OFF)
tvm_option(USE_NVSHMEM "Build with NVSHMEM support" OFF)
# Python package options
-tvm_option(TVM_BUILD_PYTHON_MODULE "Build Python module with
scikit-build-core" ON)
+tvm_option(TVM_BUILD_PYTHON_MODULE "Build Python module with
scikit-build-core" OFF)
# include directories
include_directories(${CMAKE_INCLUDE_PATH})
@@ -826,41 +826,41 @@ endif()
if(TVM_BUILD_PYTHON_MODULE)
message(STATUS "Configuring Python package installation")
- # Install Python source files
- install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/python/tvm"
- DESTINATION "."
- FILES_MATCHING
- PATTERN "*.py"
- PATTERN "*.pyi"
- PATTERN "__pycache__" EXCLUDE
- PATTERN "*.pyc" EXCLUDE
- )
+ # Set RPATH for tvm and tvm_runtime to find other libraries relatively
+ if(APPLE)
+ # macOS uses @loader_path
+ set_target_properties(tvm PROPERTIES INSTALL_RPATH "@loader_path")
+ set_target_properties(tvm_runtime PROPERTIES INSTALL_RPATH "@loader_path")
+ elseif(LINUX)
+ # Linux uses $ORIGIN
+ set_target_properties(tvm PROPERTIES INSTALL_RPATH "\$ORIGIN")
+ set_target_properties(tvm_runtime PROPERTIES INSTALL_RPATH "\$ORIGIN")
+ endif()
# Install compiled shared libraries
- install(TARGETS tvm DESTINATION "tvm")
- install(TARGETS tvm_runtime DESTINATION "tvm")
+ install(TARGETS tvm DESTINATION ".")
+ install(TARGETS tvm_runtime DESTINATION ".")
# Install third-party compiled dependencies
if(TARGET fpA_intB_gemm)
- install(TARGETS fpA_intB_gemm DESTINATION "tvm")
+ install(TARGETS fpA_intB_gemm DESTINATION ".")
endif()
if(TARGET flash_attn)
- install(TARGETS flash_attn DESTINATION "tvm")
+ install(TARGETS flash_attn DESTINATION ".")
endif()
# Install minimal header files needed by Python extensions
install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/tvm/runtime"
- DESTINATION "tvm/include/tvm/runtime"
+ DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/tvm/runtime/"
+ DESTINATION "include/tvm/runtime/"
FILES_MATCHING
PATTERN "*.h"
)
# Install minimal CMake configuration
install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/cmake/utils"
- DESTINATION "tvm/cmake/utils"
+ DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/cmake/utils/"
+ DESTINATION "cmake/utils/"
FILES_MATCHING
PATTERN "*.cmake"
)
@@ -868,8 +868,8 @@ if(TVM_BUILD_PYTHON_MODULE)
# Install CUTLASS headers only if available
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cutlass/include")
install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cutlass/include"
- DESTINATION "tvm/3rdparty/cutlass"
+ DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cutlass/include/"
+ DESTINATION "3rdparty/cutlass/include/"
FILES_MATCHING
PATTERN "*.h"
PATTERN "*.hpp"
@@ -878,8 +878,8 @@ if(TVM_BUILD_PYTHON_MODULE)
# Install minimal source files
install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/runtime"
- DESTINATION "tvm/src/runtime"
+ DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/src/runtime/"
+ DESTINATION "src/runtime/"
FILES_MATCHING
PATTERN "*.cc"
PATTERN "*.h"
@@ -887,14 +887,14 @@ if(TVM_BUILD_PYTHON_MODULE)
# Install essential configuration files
install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/configs"
- DESTINATION "tvm/configs"
+ DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/configs/"
+ DESTINATION "configs/"
)
# Install licenses (required for distribution)
install(
- DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/licenses"
- DESTINATION "tvm/licenses"
+ DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/licenses/"
+ DESTINATION "licenses/"
)
# Install essential metadata files
@@ -902,7 +902,7 @@ if(TVM_BUILD_PYTHON_MODULE)
"${CMAKE_CURRENT_SOURCE_DIR}/README.md"
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
"${CMAKE_CURRENT_SOURCE_DIR}/NOTICE"
- DESTINATION "tvm"
+ DESTINATION "."
)
message(STATUS "Python package installation configured")
diff --git a/ffi/CMakeLists.txt b/ffi/CMakeLists.txt
index 0690c926e0..f40313636a 100644
--- a/ffi/CMakeLists.txt
+++ b/ffi/CMakeLists.txt
@@ -221,16 +221,10 @@ if (TVM_FFI_BUILD_PYTHON_MODULE)
# Set RPATH for tvm_ffi_cython to find tvm_ffi_shared.so relatively
if(APPLE)
# macOS uses @loader_path
- set_target_properties(tvm_ffi_cython PROPERTIES
- INSTALL_RPATH "@loader_path/lib"
- BUILD_WITH_INSTALL_RPATH ON
- )
+ set_target_properties(tvm_ffi_cython PROPERTIES INSTALL_RPATH
"@loader_path/lib")
elseif(LINUX)
# Linux uses $ORIGIN
- set_target_properties(tvm_ffi_cython PROPERTIES
- INSTALL_RPATH "\$ORIGIN/lib"
- BUILD_WITH_INSTALL_RPATH ON
- )
+ set_target_properties(tvm_ffi_cython PROPERTIES INSTALL_RPATH
"\$ORIGIN/lib")
endif()
install(TARGETS tvm_ffi_cython DESTINATION .)
diff --git a/pyproject.toml b/pyproject.toml
index 1634910e14..43be53b8cb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -47,6 +47,7 @@ classifiers = [
]
# Core dependencies - these are the minimum required for basic TVM
functionality
dependencies = [
+ "apache-tvm-ffi",
"cloudpickle",
"ml_dtypes",
"numpy",
@@ -129,25 +130,11 @@ wheel.py-api = "py3"
build-dir = "build"
# CMake configuration - ensure proper installation paths
-cmake.args = [
- "-DTVM_BUILD_PYTHON_MODULE=ON",
- "-DTVM_FFI_BUILD_PYTHON_MODULE=OFF",
- "-DTVM_USE_CUTLASS=OFF",
- "-DTVM_USE_FLASH_ATTN=OFF",
- "-DTVM_USE_LLVM=OFF",
- "-DTVM_USE_CUDA=OFF",
- "-DTVM_USE_OPENCL=OFF",
- "-DTVM_USE_VULKAN=OFF",
- "-DTVM_USE_METAL=OFF",
- "-DTVM_USE_OPENGL=OFF",
- "-DTVM_USE_RPC=OFF",
- "-DTVM_USE_GRAPH_EXECUTOR=OFF",
- "-DTVM_USE_PROFILER=OFF",
- "-DTVM_USE_UTILS=OFF",
-]
+cmake.args = ["-DTVM_BUILD_PYTHON_MODULE=ON"]
# Wheel configuration
wheel.packages = ["python/tvm"]
+wheel.install-dir = "tvm"
# Source distribution configuration
sdist.include = [