forked from opencv/opencv-python
-
Notifications
You must be signed in to change notification settings - Fork 0
187 lines (181 loc) · 6.89 KB
/
build_wheels_windows.yml
File metadata and controls
187 lines (181 loc) · 6.89 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
# 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:
jobs:
Build:
runs-on: windows-2025
strategy:
fail-fast: false
matrix:
python-version: ['3.9']
platform: [x64]
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
SDIST: 0
ENABLE_HEADLESS: 0
ENABLE_CONTRIB: 1
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: Setup environment
shell: bash
run: |
if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "ENABLE_ROLLING=1" >> $GITHUB_ENV
fi
- 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 CUDA Toolkit Installer
id: cache-cuda-installer
uses: actions/cache@v3
with:
path: ./.cache/cuda_installer.exe
key: cuda-installer-12.4.0
- name: 🔧 Install NVIDIA CUDA Toolkit
run: |
$installer_path = "./.cache/cuda_installer.exe"
if (-not (Test-Path $installer_path)) {
echo "Downloading CUDA Toolkit..."
$cuda_installer_url = "https://developer.download.nvidia.com/compute/cuda/12.4.0/network_installers/cuda_12.4.0_windows_network.exe"
New-Item -Path (Split-Path $installer_path) -ItemType Directory -Force
curl -L -o $installer_path $cuda_installer_url
} else {
echo "CUDA Toolkit installer found in cache."
}
echo "Installing CUDA Toolkit silently..."
$arguments = "-s nvcc_12.4 cudart_12.4 cublas_12.4 cublas_dev_12.4 cufft_12.4 cufft_dev_12.4 npp_12.4 npp_dev_12.4"
Start-Process -FilePath $installer_path -ArgumentList $arguments -Wait -NoNewWindow
echo "Adding CUDA to PATH..."
$CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4"
echo "CUDA_PATH=$CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Append
Copy-Item -Path "$CUDA_PATH/bin/*" -Destination . -Include "*.dll"
shell: pwsh
- name: Cache CuDNN Installer
id: cache-cudnn-installer
uses: actions/cache@v3
with:
path: ./.cache/cudnn.zip
key: cudnn-8.9.7.29-cuda-12-windows
- name: 🔧 Install NVIDIA CuDNN
run: |
$cudnn_path = "./.cache/cudnn.zip"
if (-not (Test-Path $cudnn_path)) {
echo "Downloading CuDNN..."
$cudnn_installer_url = "https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip"
New-Item -Path (Split-Path $cudnn_path) -ItemType Directory -Force
curl -L -o $cudnn_path $cudnn_installer_url
} else {
echo "CuDNN installer found in cache."
}
echo "Installing CuDNN..."
7z x $cudnn_path
$CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/cudnn-windows-x86_64-8.9.7.29_cuda12-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: Cache build artifacts
uses: actions/cache@v3
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 bdist_wheel --py-limited-api=cp37 --dist-dir="$PWD\wheelhouse" $SKIP_CMAKE -v
shell: pwsh
- 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
PYLINT_TEST_FILE: ${{ github.workspace }}\opencv\samples\python\squares.py
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 }}/opencv
python modules\python\test\test.py -v --repo .
- name: Pylint test
run: |
python -m pip install pylint==2.15.9
cd ${{ github.workspace }}\tests
python -m pylint $PYLINT_TEST_FILE