3434
3535jobs :
3636 Build :
37- runs-on : ${{ matrix.runs-on }}
37+ runs-on : ' windows-2025 '
3838 strategy :
3939 fail-fast : false
4040 matrix :
41+ # Build variants control binary size vs JIT compilation tradeoff:
42+ # - full: CUDA 12, native SASS for all GPUs (5.0-10.0), largest binary, no JIT needed
43+ # - legacy: CUDA 11, PTX/SASS 3.5, for older GPUs (Kepler+) and systems with older drivers
44+ build-variant : ['full', 'legacy']
4145 python-version : ['3.13']
4246 platform : [x64]
43- cuda-version : ['12']
4447 include :
45- # CUDA 12: Supports Maxwell (5.0) through Blackwell (10.0)
46- # TODO(@Breakthrough): Expand PTX legacy support back to 5.0, it doesn't make the final
47- # distribution that much larger and may help users with older GPUs.
48- - cuda-version : ' 12'
49- runs-on : ' windows-2025'
48+ # CUDA 12 - Full variant: All SASS targets for maximum performance
49+ - build-variant : ' full'
50+ cuda-version : ' 12'
5051 cuda-installer : ' cuda_12.9.1_windows_network.exe'
5152 cuda-path-version : ' v12.9'
5253 cudnn-archive : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive.zip'
5354 cudnn-folder : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive'
55+ cudnn-dll-path : ' bin/x64'
5456 video-codec-sdk-archive : ' Video_Codec_SDK_13.0.37.zip'
5557 video-codec-sdk-folder : ' Video_Codec_SDK_13.0.37'
5658 cuda-arch-bin : ' 5.0;5.2;6.0;6.1;7.0;7.5;8.0;8.6;8.9;9.0;10.0'
5759 cuda-arch-ptx : ' 10.0'
5860 cache-key : ' nvidia-deps-cuda-12.9.1-cudnn-9.18.1.3'
59- # TODO: Re-enable CUDA 13 after updating to OpenCV 4.13+
60- # CUDA 13: Supports Turing (7.5) through Blackwell (12.0)
61- # - cuda-version: '13'
62- # runs-on: 'windows-2025'
63- # cuda-installer: 'cuda_13.1.1_windows_network.exe'
64- # cuda-path-version: 'v13.1'
65- # cudnn-archive: 'cudnn-windows-x86_64-9.18.1.3_cuda13-archive.zip'
66- # cudnn-folder: 'cudnn-windows-x86_64-9.18.1.3_cuda13-archive'
67- # video-codec-sdk-archive: 'Video_Codec_SDK_13.0.37.zip'
68- # video-codec-sdk-folder: 'Video_Codec_SDK_13.0.37'
69- # cuda-arch-bin: '7.5;8.0;8.6;8.9;9.0;10.0;12.0'
70- # cuda-arch-ptx: '12.0'
71- # cache-key: 'nvidia-deps-cuda-13.1.1-cudnn-9.18.1.3'
61+ # CUDA 11 - Legacy variant: For older GPUs (Kepler+) and systems with older drivers
62+ # NOTE: CUDA 11.8 only supports VS2017-VS2022, so we use the v142 toolset on windows-2025
63+ - build-variant : ' legacy'
64+ cuda-version : ' 11'
65+ cmake-toolset : ' v142'
66+ cuda-installer : ' cuda_11.8.0_windows_network.exe'
67+ cuda-path-version : ' v11.8'
68+ cudnn-archive : ' cudnn-windows-x86_64-8.9.7.29_cuda11-archive.zip'
69+ cudnn-folder : ' cudnn-windows-x86_64-8.9.7.29_cuda11-archive'
70+ cudnn-dll-path : ' bin'
71+ video-codec-sdk-archive : ' Video_Codec_SDK_13.0.37.zip'
72+ video-codec-sdk-folder : ' Video_Codec_SDK_13.0.37'
73+ cuda-arch-bin : ' 3.5'
74+ cuda-arch-ptx : ' 3.5'
75+ cache-key : ' nvidia-deps-cuda-11.8.0-cudnn-8.9.7.29'
7276 env :
7377 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
7478 SDIST : 0
@@ -139,7 +143,7 @@ jobs:
139143 $CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/${{ matrix.cudnn-folder }}"
140144 echo "CUDNN_LIBRARY=$CUDNN_PATH/lib/x64/cudnn.lib" | Out-File -FilePath $env:GITHUB_ENV -Append
141145 echo "CUDNN_INCLUDE_DIR=$CUDNN_PATH/include" | Out-File -FilePath $env:GITHUB_ENV -Append
142- Copy-Item -Path "$CUDNN_PATH/bin/x64 /*" -Destination . -Include "*.dll"
146+ Copy-Item -Path "$CUDNN_PATH/${{ matrix.cudnn-dll-path }} /*" -Destination . -Include "*.dll"
143147 shell : pwsh
144148 - name : 🔧 Install NVIDIA Video Codec SDK
145149 run : |
@@ -160,9 +164,9 @@ jobs:
160164 if : ${{ inputs.restore_build_cache && !inputs.rolling_build }}
161165 with :
162166 path : _skbuild
163- key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
167+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
164168 restore-keys : |
165- ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-
169+ ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-
166170
167171 - name : Build a package
168172 # CMake 3.25 regression fix. See https://stackoverflow.com/questions/74162633/problem-compiling-from-source-opencv-with-mvsc2019-in-64-bit-version
@@ -171,11 +175,19 @@ jobs:
171175 python -m pip install --upgrade pip
172176 python -m pip install --upgrade setuptools
173177 python -m pip install cmake==3.24.2
174- 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
178+ python -m pip install toml
179+ python -c "import toml; c = toml.load('pyproject.toml'); print('\n'.join(c['build-system']['requires']))" > requirements.txt
180+ python -m pip install -r requirements.txt
175181 $CI_BUILD = 1
176182 if (Test-Path _skbuild) {
177183 $SKIP_CMAKE = "--skip-cmake"
178184 }
185+ # Set CMake generator and toolset if specified (e.g., v142 for CUDA 11 compatibility with VS2019)
186+ # Note: Toolset (-T) requires Visual Studio generator, not Ninja
187+ if ("${{ matrix.cmake-toolset }}") {
188+ $env:CMAKE_ARGS = "-G ""Visual Studio 17 2022"" -A x64 -T ${{ matrix.cmake-toolset }}"
189+ echo "Using CMake toolset: ${{ matrix.cmake-toolset }} with Visual Studio generator"
190+ }
179191 python setup.py $SKIP_CMAKE bdist_wheel --py-limited-api=cp37 --dist-dir="$PWD\wheelhouse" -v
180192 shell : pwsh
181193
@@ -184,11 +196,11 @@ jobs:
184196 if : ${{ inputs.save_build_cache && !inputs.rolling_build }}
185197 with :
186198 path : _skbuild
187- key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
199+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
188200 - name : Saving all wheels
189201 uses : actions/upload-artifact@v4
190202 with :
191- name : wheel- cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
203+ name : opencv-python- cuda- ${{ matrix.build-variant }}-${{ matrix.platform }}
192204 path : wheelhouse/opencv*
193205
194206 Test :
@@ -202,11 +214,10 @@ jobs:
202214 matrix :
203215 python-version : ['3.12']
204216 platform : [x64]
205- cuda-version : ['12'] # TODO: Re-enable '13' after updating to OpenCV 4.13+
217+ build-variant : ['full', 'legacy']
206218 env :
207219 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
208220 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
209- PlatformToolset : v143
210221 steps :
211222 - name : Cleanup
212223 shell : bash
@@ -227,7 +238,7 @@ jobs:
227238 - name : Download a wheel accordingly to matrix
228239 uses : actions/download-artifact@v4
229240 with :
230- name : wheel- cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
241+ name : opencv-python- cuda- ${{ matrix.build-variant }}-${{ matrix.platform }}
231242 path : wheelhouse/
232243 - name : Package installation
233244 run : |
0 commit comments