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:

Reply via email to