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-ffi.git
The following commit(s) were added to refs/heads/main by this push:
new d1595c4 [ADDON] Add torch c dlpack ext wheels for windows (#252)
d1595c4 is described below
commit d1595c459f5c5a17ed80ab4b152f24d2c8a65a49
Author: Yaxing Cai <[email protected]>
AuthorDate: Mon Nov 10 14:38:20 2025 -0800
[ADDON] Add torch c dlpack ext wheels for windows (#252)
This PR adds the torch c dlpack ext wheels for windows.
---
.github/workflows/torch_c_dlpack.yml | 6 +-
.github/workflows/torch_c_dlpack_windows.yml | 80 +++++++++++++++
addons/torch_c_dlpack_ext/build_aot_wheels.bat | 109 +++++++++++++++++++++
.../utils/_build_optional_torch_c_dlpack.py | 11 ++-
4 files changed, 202 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/torch_c_dlpack.yml
b/.github/workflows/torch_c_dlpack.yml
index 93fec23..8d7296e 100644
--- a/.github/workflows/torch_c_dlpack.yml
+++ b/.github/workflows/torch_c_dlpack.yml
@@ -25,7 +25,7 @@ on:
required: true
jobs:
- build_wheels:
+ build_wheels_linux:
strategy:
fail-fast: false
matrix:
@@ -64,7 +64,7 @@ jobs:
docker cp build_lib:/tvm-ffi/addons/torch_c_dlpack_ext/wheelhouse/ .
- uses: actions/upload-artifact@v4
with:
- name: pypi-wheels-${{ matrix.arch }}-${{ matrix.python-version }}
+ name: pypi-wheels-linux-${{ matrix.arch }}-${{ matrix.python-version
}}
path: ./wheelhouse/*.whl
build_source:
runs-on: ubuntu-latest
@@ -90,7 +90,7 @@ jobs:
name: pypi-source
path: ./tvm-ffi/addons/torch_c_dlpack_ext/dist/*tar.gz
upload_pypi:
- needs: [build_wheels, build_source]
+ needs: [build_wheels_linux, build_source]
runs-on: ubuntu-latest
environment: pypi
permissions:
diff --git a/.github/workflows/torch_c_dlpack_windows.yml
b/.github/workflows/torch_c_dlpack_windows.yml
new file mode 100644
index 0000000..d893a23
--- /dev/null
+++ b/.github/workflows/torch_c_dlpack_windows.yml
@@ -0,0 +1,80 @@
+# 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.
+
+name: torch c dlpack
+
+on:
+ workflow_dispatch:
+ inputs:
+ branch:
+ description: "Branch or tag to publish (manual run)"
+ required: true
+
+jobs:
+ build_wheels_windows:
+ strategy:
+ fail-fast: false
+ matrix:
+ arch: ["x86_64"]
+ python-version: ["cp39", "cp310", "cp311", "cp312", "cp313", "cp314"]
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v5
+ with:
+ repository: apache/tvm-ffi
+ ref: main
+ fetch-depth: 0
+ submodules: recursive
+ path: tvm-ffi
+ - uses: Jimver/cuda-toolkit@6008063726ffe3309d1b22e413d9e88fed91a2f2
+ id: cuda-toolkit
+ - uses: astral-sh/setup-uv@v7
+ - name: build wheels
+ env:
+ CUDA_HOME: ${{steps.cuda-toolkit.outputs.CUDA_PATH}}
+ shell: cmd
+ working-directory: ./tvm-ffi
+ run: ./addons/torch_c_dlpack_ext/build_aot_wheels.bat ${{ matrix.arch
}} ${{ matrix.python-version }}
+ - uses: actions/upload-artifact@v4
+ with:
+ name: pypi-wheels-windows-${{ matrix.arch }}-${{
matrix.python-version }}
+ path: ./tvm-ffi/addons/torch_c_dlpack_ext/wheelhouse/*.whl
+ upload_pypi:
+ needs: [build_wheels_windows]
+ runs-on: ubuntu-latest
+ environment: pypi
+ permissions:
+ id-token: write
+ attestations: write
+ if: github.event_name == 'workflow_dispatch' # <-- publish only on
manual trigger
+ steps:
+ - uses: actions/download-artifact@v4
+ with:
+ pattern: pypi-*
+ path: dist
+ merge-multiple: true
+ - name: Generate artifact attestation for sdist and wheels
+ uses: actions/attest-build-provenance@v1
+ with:
+ subject-path: dist/*
+ - name: Publish package distributions to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ attestations: true
+ verbose: true
+ # testing publish url
+ # repository-url: https://test.pypi.org/legacy/
diff --git a/addons/torch_c_dlpack_ext/build_aot_wheels.bat
b/addons/torch_c_dlpack_ext/build_aot_wheels.bat
new file mode 100644
index 0000000..4b55c04
--- /dev/null
+++ b/addons/torch_c_dlpack_ext/build_aot_wheels.bat
@@ -0,0 +1,109 @@
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@echo off
+setlocal enabledelayedexpansion
+
+set arch=%~1
+set python_version=%~2
+
+set tvm_ffi=%cd%
+set torch_c_dlpack_ext=%tvm_ffi%\addons\torch_c_dlpack_ext
+
+if not exist "%tvm_ffi%\.venv" mkdir "%tvm_ffi%\.venv"
+if not exist "%tvm_ffi%\lib" mkdir "%tvm_ffi%\lib"
+for %%P in (2.4 2.5 2.6 2.7 2.8 2.9) do (
+ call :build_libs %%P
+)
+
+copy %tvm_ffi%\lib\*.dll %torch_c_dlpack_ext%\torch_c_dlpack_ext
+uv venv %tvm_ffi%\.venv\build --python %python_version%
+call %tvm_ffi%\.venv\build\Scripts\activate
+uv pip install build wheel
+cd %torch_c_dlpack_ext%
+python -m build -w
+dir dist
+for %%f in (dist\*.whl) do python -m wheel tags "%%f"
--python-tag=%python_version% --abi-tag=%python_version%
--platform-tag=win_amd64
+dir dist
+mkdir wheelhouse
+copy dist\*-win_amd64.whl wheelhouse
+dir wheelhouse
+endlocal
+exit /b
+
+:build_libs
+ set torch_version=%1
+ call :check_availability
+ if %errorlevel%==0 (
+ call :get_torch_url
+ uv venv %tvm_ffi%\.venv\torch%torch_version% --python %python_version%
+ call %tvm_ffi%\.venv\torch%torch_version%\Scripts\activate
+ uv pip install setuptools ninja
+ uv pip install torch==%torch_version% --index-url !torch_url!
+ uv pip install -v .
+ python -m tvm_ffi.utils._build_optional_torch_c_dlpack --output-dir
%tvm_ffi%\lib
+ python -m tvm_ffi.utils._build_optional_torch_c_dlpack --output-dir
%tvm_ffi%\lib --build-with-cuda
+ call deactivate
+ rmdir -s -q %tvm_ffi%\.venv\torch%torch_version%
+ ) else (
+ echo Skipping build for torch %torch_version% on %arch% with python
%python_version% as it is not available.
+ )
+ exit /b 0
+
+
+:check_availability
+ if %torch_version%==2.4 (
+ if %python_version%==cp313 exit /b 1
+ if %python_version%==cp314 exit /b 1
+ exit /b 0
+ )
+ if %torch_version%==2.5 (
+ if %python_version%==cp314 exit /b 1
+ exit /b 0
+ )
+ if %torch_version%==2.6 (
+ if %python_version%==cp314 exit /b 1
+ exit /b 0
+ )
+ if %torch_version%==2.7 (
+ if %python_version%==cp314 exit /b 1
+ exit /b 0
+ )
+ if %torch_version%==2.8 (
+ if %python_version%==cp314 exit /b 1
+ exit /b 0
+ )
+ if %torch_version%==2.9 (
+ if %python_version%==cp39 exit /b 1
+ exit /b 0
+ )
+ echo Unknown or unsupported torch version: %torch_version% >&2
+ exit /b 1
+
+:get_torch_url
+ set cuda_version=
+ if %torch_version%==2.4 set cuda_version=cu124
+ if %torch_version%==2.5 set cuda_version=cu124
+ if %torch_version%==2.6 set cuda_version=cu126
+ if %torch_version%==2.7 set cuda_version=cu128
+ if %torch_version%==2.8 set cuda_version=cu129
+ if %torch_version%==2.9 set cuda_version=cu129
+ if defined cuda_version (
+ set torch_url=https://download.pytorch.org/whl/%cuda_version%
+ exit /b 0
+ )
+ echo Unknown or unsupported torch version: %torch_version% >&2
+ exit /b 1
diff --git a/python/tvm_ffi/utils/_build_optional_torch_c_dlpack.py
b/python/tvm_ffi/utils/_build_optional_torch_c_dlpack.py
index 20705be..294e340 100644
--- a/python/tvm_ffi/utils/_build_optional_torch_c_dlpack.py
+++ b/python/tvm_ffi/utils/_build_optional_torch_c_dlpack.py
@@ -627,7 +627,12 @@ def _generate_ninja_build(
# append include paths
for path in include_paths:
- cflags.append("-I{}".format(path.replace(":", "$:")))
+ path_str = str(path)
+ if " " in path_str:
+ path_str = f'"{path_str}"'
+ if IS_WINDOWS:
+ path_str = path_str.replace(":", "$:")
+ cflags.append(f"-I{path_str}")
# flags
ninja = []
@@ -795,9 +800,13 @@ def main() -> None: # noqa: PLR0912, PLR0915
if IS_WINDOWS:
# On Windows, use .lib format for linking
ldflags.extend(["c10.lib", "torch.lib", "torch_cpu.lib",
"torch_python.lib"])
+ if args.build_with_cuda:
+ ldflags.extend(["torch_cuda.lib", "c10_cuda.lib"])
else:
# On Unix/macOS, use -l format for linking
ldflags.extend(["-lc10", "-ltorch", "-ltorch_cpu",
"-ltorch_python"])
+ if args.build_with_cuda:
+ ldflags.extend(["-ltorch_cuda", "-lc10_cuda"])
# Add Python library linking
if IS_WINDOWS: