3333
3434jobs :
3535 Build :
36- runs-on : windows-2025
36+ runs-on : ${{ matrix.runs-on }}
3737 strategy :
3838 fail-fast : false
3939 matrix :
4040 python-version : ['3.13']
4141 platform : [x64]
42+ cuda-version : ['12', '13']
43+ include :
44+ # TODO: Both CUDA versions now use v143 toolset - consider consolidating to single runner
45+ # CUDA 12: Supports Maxwell (5.0) through Blackwell (10.0)
46+ - cuda-version : ' 12'
47+ runs-on : ' windows-2025'
48+ cuda-installer : ' cuda_12.9.1_windows_network.exe'
49+ cuda-path-version : ' v12.9'
50+ cudnn-archive : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive.zip'
51+ cudnn-folder : ' cudnn-windows-x86_64-9.18.1.3_cuda12-archive'
52+ 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'
53+ cuda-arch-ptx : ' 10.0'
54+ cache-key : ' nvidia-deps-cuda-12.9.1-cudnn-9.18.1.3'
55+ # CUDA 13: Supports Turing (7.5) through Blackwell (12.0)
56+ - cuda-version : ' 13'
57+ runs-on : ' windows-2022'
58+ cuda-installer : ' cuda_13.1.1_windows_network.exe'
59+ cuda-path-version : ' v13.1'
60+ cudnn-archive : ' cudnn-windows-x86_64-9.18.1.3_cuda13-archive.zip'
61+ cudnn-folder : ' cudnn-windows-x86_64-9.18.1.3_cuda13-archive'
62+ cuda-arch-bin : ' 7.5;8.0;8.6;8.9;9.0;10.0;12.0'
63+ cuda-arch-ptx : ' 12.0'
64+ cache-key : ' nvidia-deps-cuda-13.1.1-cudnn-9.18.1.3'
4265 env :
4366 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
4467 SDIST : 0
4568 ENABLE_HEADLESS : 0
4669 ENABLE_CONTRIB : 1
4770 ENABLE_ROLLING : ${{ inputs.rolling_build && 1 || 0 }}
4871 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
72+ CUDA_ARCH_BIN : ${{ matrix.cuda-arch-bin }}
73+ CUDA_ARCH_PTX : ${{ matrix.cuda-arch-ptx }}
74+ # Force VS 2022 toolset - scikit-build incorrectly detects v144 which doesn't exist
75+ CMAKE_GENERATOR_TOOLSET : v143
4976 steps :
5077 - name : Cleanup
5178 shell : bash
7299 uses : actions/cache@v3
73100 with :
74101 path : .deps/Nvidia
75- key : nvidia-deps-cuda-12.4.0-cudnn-8.9.7.29
102+ key : ${{ matrix.cache-key }}
76103 - name : Clone NVIDIA dependencies
77104 if : steps.cache-nvidia-deps.outputs.cache-hit != 'true'
78105 env :
@@ -85,27 +112,26 @@ jobs:
85112 shell : bash
86113 - name : 🔧 Install NVIDIA CUDA Toolkit
87114 run : |
88- $installer_path = ".deps/Nvidia/cuda_12.4.0_windows_network.exe "
115+ $installer_path = ".deps/Nvidia/${{ matrix.cuda-installer }} "
89116 if (-not (Test-Path $installer_path)) {
90117 throw "CUDA Toolkit installer not found at $installer_path"
91118 }
92- echo "Installing CUDA Toolkit silently..."
93- $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"
94- Start-Process -FilePath $installer_path -ArgumentList $arguments -Wait -NoNewWindow
119+ echo "Installing CUDA ${{ matrix.cuda-version }} Toolkit silently..."
120+ Start-Process -FilePath $installer_path -ArgumentList "-s" -Wait -NoNewWindow
95121 echo "Adding CUDA to PATH..."
96- $CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4 "
122+ $CUDA_PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\${{ matrix.cuda-path-version }} "
97123 echo "CUDA_PATH=$CUDA_PATH" | Out-File -FilePath $env:GITHUB_ENV -Append
98124 Copy-Item -Path "$CUDA_PATH/bin/*" -Destination . -Include "*.dll"
99125 shell : pwsh
100126 - name : 🔧 Install NVIDIA CuDNN
101127 run : |
102- $cudnn_path = ".deps/Nvidia/cudnn-windows-x86_64-8.9.7.29_cuda12- archive.zip "
128+ $cudnn_path = ".deps/Nvidia/${{ matrix. cudnn-archive }} "
103129 if (-not (Test-Path $cudnn_path)) {
104130 throw "CuDNN archive not found at $cudnn_path"
105131 }
106- echo "Installing CuDNN..."
132+ echo "Installing CuDNN for CUDA ${{ matrix.cuda-version }} ..."
107133 7z x $cudnn_path
108- $CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/cudnn-windows-x86_64-8.9.7.29_cuda12-archive "
134+ $CUDNN_PATH = "D:/a/opencv-python-cuda/opencv-python-cuda/${{ matrix. cudnn-folder }} "
109135 echo "CUDNN_LIBRARY=$CUDNN_PATH/lib/x64/cudnn.lib" | Out-File -FilePath $env:GITHUB_ENV -Append
110136 echo "CUDNN_INCLUDE_DIR=$CUDNN_PATH/include" | Out-File -FilePath $env:GITHUB_ENV -Append
111137 Copy-Item -Path "$CUDNN_PATH/bin/*" -Destination . -Include "*.dll"
@@ -116,9 +142,9 @@ jobs:
116142 if : ${{ inputs.restore_build_cache && !inputs.rolling_build }}
117143 with :
118144 path : _skbuild
119- key : ${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/CMakeLists.txt') }}
145+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}- ${{ hashFiles('**/CMakeLists.txt') }}
120146 restore-keys : |
121- ${{ runner.os }}-${{ matrix.python-version }}-
147+ ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}-
122148
123149 - name : Build a package
124150 # CMake 3.25 regression fix. See https://stackoverflow.com/questions/74162633/problem-compiling-from-source-opencv-with-mvsc2019-in-64-bit-version
@@ -140,11 +166,11 @@ jobs:
140166 if : ${{ inputs.save_build_cache && !inputs.rolling_build }}
141167 with :
142168 path : _skbuild
143- key : ${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/CMakeLists.txt') }}
169+ key : ${{ runner.os }}-${{ matrix.python-version }}-cuda${{ matrix.cuda-version }}- ${{ hashFiles('**/CMakeLists.txt') }}
144170 - name : Saving all wheels
145171 uses : actions/upload-artifact@v4
146172 with :
147- name : wheel-cuda-${{ matrix.platform }}
173+ name : wheel-cuda${{ matrix.cuda-version }} -${{ matrix.platform }}
148174 path : wheelhouse/opencv*
149175
150176 Test :
@@ -158,6 +184,7 @@ jobs:
158184 matrix :
159185 python-version : ['3.12']
160186 platform : [x64]
187+ cuda-version : ['12', '13']
161188 env :
162189 ACTIONS_ALLOW_UNSECURE_COMMANDS : true
163190 OPENCV_TEST_DATA_PATH : ${{ github.workspace }}\opencv_extra\testdata
@@ -182,7 +209,7 @@ jobs:
182209 - name : Download a wheel accordingly to matrix
183210 uses : actions/download-artifact@v4
184211 with :
185- name : wheel-cuda-${{ matrix.platform }}
212+ name : wheel-cuda${{ matrix.cuda-version }} -${{ matrix.platform }}
186213 path : wheelhouse/
187214 - name : Package installation
188215 run : |
0 commit comments