3434
3535jobs :
3636 Build :
37- runs-on : ${{ matrix.runs-on }}
37+ runs-on : ' windows-2025 '
3838 strategy :
3939 fail-fast : false
4040 matrix :
4141 python-version : ['3.13']
4242 platform : [x64]
43- cuda-version : ['12']
43+ # Build variants control binary size vs JIT compilation tradeoff:
44+ # - full: CUDA 12, native SASS for all GPUs (5.0-10.0), largest binary, no JIT needed
45+ # - legacy: CUDA 11, PTX/SASS 3.5, for older GPUs (Kepler+) and systems with older drivers
46+ build-variant : ['full', 'legacy']
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 12 - Full variant: All SASS targets for maximum performance
4849 - cuda-version : ' 12'
49- runs-on : ' windows-2025 '
50+ build-variant : ' full '
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+ - cuda-version : ' 11'
64+ build-variant : ' legacy'
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
@@ -176,6 +180,11 @@ jobs:
176180 if (Test-Path _skbuild) {
177181 $SKIP_CMAKE = "--skip-cmake"
178182 }
183+ # Set CMake toolset if specified (e.g., v142 for CUDA 11 compatibility with VS2019)
184+ if ("${{ matrix.cmake-toolset }}") {
185+ $env:CMAKE_ARGS = "-T ${{ matrix.cmake-toolset }}"
186+ echo "Using CMake toolset: ${{ matrix.cmake-toolset }}"
187+ }
179188 python setup.py $SKIP_CMAKE bdist_wheel --py-limited-api=cp37 --dist-dir="$PWD\wheelhouse" -v
180189 shell : pwsh
181190
@@ -184,11 +193,11 @@ jobs:
184193 if : ${{ inputs.save_build_cache && !inputs.rolling_build }}
185194 with :
186195 path : _skbuild
187- key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
196+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
188197 - name : Saving all wheels
189198 uses : actions/upload-artifact@v4
190199 with :
191- name : wheel- cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
200+ name : opencv-python- cuda- ${{ matrix.build-variant }}-${{ matrix.platform }}
192201 path : wheelhouse/opencv*
193202
194203 Test :
@@ -202,11 +211,10 @@ jobs:
202211 matrix :
203212 python-version : ['3.12']
204213 platform : [x64]
205- cuda-version : ['12'] # TODO: Re-enable '13' after updating to OpenCV 4.13+
214+ build-variant : ['full', 'legacy']
206215 env :
207216 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
208217 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
209- PlatformToolset : v143
210218 steps :
211219 - name : Cleanup
212220 shell : bash
@@ -227,7 +235,7 @@ jobs:
227235 - name : Download a wheel accordingly to matrix
228236 uses : actions/download-artifact@v4
229237 with :
230- name : wheel- cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
238+ name : opencv-python- cuda- ${{ matrix.build-variant }}-${{ matrix.platform }}
231239 path : wheelhouse/
232240 - name : Package installation
233241 run : |
0 commit comments