forked from opencv/opencv-python
-
Notifications
You must be signed in to change notification settings - Fork 0
196 lines (188 loc) · 6.95 KB
/
build_wheels_windows.yml
File metadata and controls
196 lines (188 loc) · 6.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# GitHub Actions Workflow: Build opencv-python with CUDA support on Windows
#
# This workflow compiles opencv-python from source with CUDA enabled on a
# GitHub-hosted Windows runner. The resulting Python wheel is then uploaded
# as a build artifact.
#
# This is a complex and long-running process. It is configured to run only
# on manual trigger (workflow_dispatch).
name: Windows CUDA x64
on:
workflow_dispatch:
inputs:
# TODO: Right now we don't correctly determine when things have changed and we require a
# rebuild, so for now we just manually trigger rebuilds between runs.
restore_build_cache:
description: "Restore build cache. Uncheck to force re-build."
required: false
type: boolean
default: true
save_build_cache:
description: "Save build cache."
required: false
type: boolean
default: true
rolling_build:
description: "Use latest commit from upstream OpenCV repo. Cache settings will be ignored."
required: false
type: boolean
default: false
jobs:
Build:
runs-on: windows-2025
strategy:
fail-fast: false
matrix:
python-version: ['3.13']
platform: [x64]
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
SDIST: 0
ENABLE_HEADLESS: 0
ENABLE_CONTRIB: 1
ENABLE_ROLLING: ${{ inputs.rolling_build && 1 || 0 }}
OPENCV_TEST_DATA_PATH: ${{ github.workspace }}\opencv_extra\testdata
steps:
- name: Cleanup
shell: bash
run: |
rm -rf ./* || true
rm -rf ./.??* || true
working-directory: ${{ github.workspace }}
- name: Checkout
uses: actions/checkout@v4
with:
submodules: false
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform }}
- name: Setup MSBuild.exe
uses: microsoft/setup-msbuild@v1.1
- name: Setup NASM
uses: ilammy/setup-nasm@v1
- name: Cache NVIDIA dependencies
id: cache-nvidia-deps
uses: actions/cache@v3
with:
path: .deps/Nvidia
key: nvidia-deps-cuda-13.1.1-cudnn-9.18.1.3
- name: Clone NVIDIA dependencies
if: steps.cache-nvidia-deps.outputs.cache-hit != 'true'
env:
SSH_PRIVATE_KEY: ${{ secrets.DEPS_REPO_SSH_KEY }}
run: |
eval "$(ssh-agent -s)"
ssh-add - <<< "${SSH_PRIVATE_KEY}"
ssh-keyscan github.com >> ~/.ssh/known_hosts 2>/dev/null
git clone git@github.com:Breakthrough/opencv-python-cuda-deps.git .deps
shell: bash
- name: 🔧 Install NVIDIA CUDA Toolkit
run: |
$installer_path = ".deps/Nvidia/cuda_13.1.1_windows_network.exe"
if (-not (Test-Path $installer_path)) {
throw "CUDA Toolkit installer not found at $installer_path"
}
echo "Installing CUDA Toolkit silently..."
Start-Process -FilePath $installer_path -ArgumentList "-s" -Wait -NoNewWindow
echo "Adding CUDA to PATH..."
$CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.1"
echo "CUDA_PATH=$CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Append
Copy-Item -Path "$CUDA_PATH/bin/*" -Destination . -Include "*.dll"
shell: pwsh
- name: 🔧 Install NVIDIA CuDNN
run: |
$cudnn_path = ".deps/Nvidia/cudnn-windows-x86_64-9.18.1.3_cuda13-archive.zip"
if (-not (Test-Path $cudnn_path)) {
throw "CuDNN archive not found at $cudnn_path"
}
echo "Installing CuDNN..."
7z x $cudnn_path
$CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/cudnn-windows-x86_64-9.18.1.3_cuda13-archive"
echo "CUDNN_LIBRARY=$CUDNN_PATH/lib/x64/cudnn.lib" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "CUDNN_INCLUDE_DIR=$CUDNN_PATH/include" | Out-File -FilePath $env:GITHUB_ENV -Append
Copy-Item -Path "$CUDNN_PATH/bin/*" -Destination . -Include "*.dll"
shell: pwsh
- name: Restore build artifacts
uses: actions/cache/restore@v3
if: ${{ inputs.restore_build_cache && !inputs.rolling_build }}
with:
path: _skbuild
key: ${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/CMakeLists.txt') }}
restore-keys: |
${{ runner.os }}-${{ matrix.python-version }}-
- name: Build a package
# CMake 3.25 regression fix. See https://stackoverflow.com/questions/74162633/problem-compiling-from-source-opencv-with-mvsc2019-in-64-bit-version
run: |
python --version
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
python -m pip install cmake==3.24.2
python -m pip install toml && python -c "import toml; c = toml.load('pyproject.toml'); print('\n'.join(c['build-system']['requires']))" >> requirements.txt | python -m pip install -r requirements.txt
$CI_BUILD = 1
if (Test-Path _skbuild) {
$SKIP_CMAKE = "--skip-cmake"
}
python setup.py $SKIP_CMAKE bdist_wheel --py-limited-api=cp37 --dist-dir="$PWD\wheelhouse" -v
shell: pwsh
- name: Save build artifacts to cache
uses: actions/cache/save@v3
if: ${{ inputs.save_build_cache && !inputs.rolling_build }}
with:
path: _skbuild
key: ${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/CMakeLists.txt') }}
- name: Saving all wheels
uses: actions/upload-artifact@v4
with:
name: wheel-cuda-${{ matrix.platform }}
path: wheelhouse/opencv*
Test:
needs: [Build]
runs-on: windows-2025
defaults:
run:
shell: cmd
strategy:
fail-fast: false
matrix:
python-version: ['3.12']
platform: [x64]
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
OPENCV_TEST_DATA_PATH: ${{ github.workspace }}\opencv_extra\testdata
PlatformToolset: v143
steps:
- name: Cleanup
shell: bash
run: |
rm -rf ./* || true
rm -rf ./.??* || true
working-directory: ${{ github.workspace }}
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform }}
- name: Download a wheel accordingly to matrix
uses: actions/download-artifact@v4
with:
name: wheel-cuda-${{ matrix.platform }}
path: wheelhouse/
- name: Package installation
run: |
cd ${{ github.workspace }}/tests
&python -m pip install --user --no-warn-script-location (ls "../wheelhouse/opencv*.whl")
if ($LastExitCode -ne 0) {throw $LastExitCode}
python get_build_info.py
shell: powershell
- name: Run tests
run: |
cd ${{ github.workspace }}/tests
python test.py