@@ -38,37 +38,44 @@ jobs:
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'
48+ # CUDA 12 - Full variant: All SASS targets for maximum performance
49+ - build-variant : ' full'
4950 runs-on : ' windows-2025'
51+ cuda-version : ' 12'
52+ cmake-toolset : ' v143'
5053 cuda-installer : ' cuda_12.9.1_windows_network.exe'
5154 cuda-path-version : ' v12.9'
5255 cudnn-archive : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive.zip'
5356 cudnn-folder : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive'
57+ cudnn-dll-path : ' bin/x64'
5458 video-codec-sdk-archive : ' Video_Codec_SDK_13.0.37.zip'
5559 video-codec-sdk-folder : ' Video_Codec_SDK_13.0.37'
5660 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'
5761 cuda-arch-ptx : ' 10.0'
5862 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'
63+ # CUDA 11 - Legacy variant: For older GPUs (Kepler+) and systems with older drivers
64+ # NOTE: CUDA 11.8 requires VS2017-VS2022, so we use windows-2022 with v142 toolset
65+ - build-variant : ' legacy'
66+ runs-on : ' windows-2022'
67+ cuda-version : ' 11'
68+ cmake-toolset : ' v142'
69+ cuda-installer : ' cuda_11.8.0_windows_network.exe'
70+ cuda-path-version : ' v11.8'
71+ cudnn-archive : ' cudnn-windows-x86_64-8.9.7.29_cuda11-archive.zip'
72+ cudnn-folder : ' cudnn-windows-x86_64-8.9.7.29_cuda11-archive'
73+ cudnn-dll-path : ' bin'
74+ video-codec-sdk-archive : ' Video_Codec_SDK_13.0.37.zip'
75+ video-codec-sdk-folder : ' Video_Codec_SDK_13.0.37'
76+ cuda-arch-bin : ' 3.5'
77+ cuda-arch-ptx : ' 3.5'
78+ cache-key : ' nvidia-deps-cuda-11.8.0-cudnn-8.9.7.29'
7279 env :
7380 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
7481 SDIST : 0
@@ -139,7 +146,7 @@ jobs:
139146 $CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/${{ matrix.cudnn-folder }}"
140147 echo "CUDNN_LIBRARY=$CUDNN_PATH/lib/x64/cudnn.lib" | Out-File -FilePath $env:GITHUB_ENV -Append
141148 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"
149+ Copy-Item -Path "$CUDNN_PATH/${{ matrix.cudnn-dll-path }} /*" -Destination . -Include "*.dll"
143150 shell : pwsh
144151 - name : 🔧 Install NVIDIA Video Codec SDK
145152 run : |
@@ -160,9 +167,9 @@ jobs:
160167 if : ${{ inputs.restore_build_cache && !inputs.rolling_build }}
161168 with :
162169 path : _skbuild
163- key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
170+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
164171 restore-keys : |
165- ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-
172+ ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-
166173
167174 - name : Build a package
168175 # CMake 3.25 regression fix. See https://stackoverflow.com/questions/74162633/problem-compiling-from-source-opencv-with-mvsc2019-in-64-bit-version
@@ -171,11 +178,20 @@ jobs:
171178 python -m pip install --upgrade pip
172179 python -m pip install --upgrade setuptools
173180 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
181+ python -m pip install toml
182+ python -c "import toml; c = toml.load('pyproject.toml'); print('\n'.join(c['build-system']['requires']))" > requirements.txt
183+ python -m pip install -r requirements.txt
175184 $CI_BUILD = 1
176185 if (Test-Path _skbuild) {
177186 $SKIP_CMAKE = "--skip-cmake"
178187 }
188+ # Set CMake generator and toolset (e.g., v142 for CUDA 11, v143 for CUDA 12)
189+ # Note: Toolset (-T) requires Visual Studio generator, not Ninja
190+ # Using environment variables avoids quoting issues with CMAKE_ARGS
191+ $env:CMAKE_GENERATOR = "Visual Studio 17 2022"
192+ $env:CMAKE_GENERATOR_PLATFORM = "x64"
193+ $env:CMAKE_GENERATOR_TOOLSET = "${{ matrix.cmake-toolset }}"
194+ echo "Using CMake generator: Visual Studio 17 2022, platform: x64, toolset: ${{ matrix.cmake-toolset }}"
179195 python setup.py $SKIP_CMAKE bdist_wheel --py-limited-api=cp37 --dist-dir="$PWD\wheelhouse" -v
180196 shell : pwsh
181197
@@ -184,11 +200,11 @@ jobs:
184200 if : ${{ inputs.save_build_cache && !inputs.rolling_build }}
185201 with :
186202 path : _skbuild
187- key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ hashFiles('**/CMakeLists.txt') }}
203+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-${{ matrix.build-variant }}-${{ hashFiles('**/CMakeLists.txt') }}
188204 - name : Saving all wheels
189205 uses : actions/upload-artifact@v4
190206 with :
191- name : wheel- cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
207+ name : opencv-python- cuda- ${{ matrix.build-variant }}-${{ matrix.platform }}
192208 path : wheelhouse/opencv*
193209
194210 Test :
@@ -202,11 +218,10 @@ jobs:
202218 matrix :
203219 python-version : ['3.12']
204220 platform : [x64]
205- cuda-version : ['12'] # TODO: Re-enable '13' after updating to OpenCV 4.13+
221+ build-variant : ['full', 'legacy']
206222 env :
207223 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
208224 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
209- PlatformToolset : v143
210225 steps :
211226 - name : Cleanup
212227 shell : bash
@@ -227,7 +242,7 @@ jobs:
227242 - name : Download a wheel accordingly to matrix
228243 uses : actions/download-artifact@v4
229244 with :
230- name : wheel- cuda${{ matrix.cuda-version }}-${{ matrix.platform }}
245+ name : opencv-python- cuda- ${{ matrix.build-variant }}-${{ matrix.platform }}
231246 path : wheelhouse/
232247 - name : Package installation
233248 run : |
0 commit comments