Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
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
6 changes: 3 additions & 3 deletions .github/workflows/torch_c_dlpack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ on:
required: true

jobs:
build_wheels:
build_wheels_linux:
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -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
Expand All @@ -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:
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/torch_c_dlpack_windows.yml
Original file line number Diff line number Diff line change
@@ -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/
109 changes: 109 additions & 0 deletions addons/torch_c_dlpack_ext/build_aot_wheels.bat
Original file line number Diff line number Diff line change
@@ -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%
Comment thread
cyx-6 marked this conversation as resolved.
) 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
11 changes: 10 additions & 1 deletion python/tvm_ffi/utils/_build_optional_torch_c_dlpack.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,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 = []
Expand Down Expand Up @@ -777,9 +782,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:
Expand Down