|
65 | 65 | with: |
66 | 66 | path: ${{ env.OPENCV_VENDOR_PREFIX }} |
67 | 67 | key: opencv-${{ env.OPENCV_VERSION }}-${{ runner.os }}-${{ hashFiles('third_party/opencv/CMakeLists.txt') }}-ffmpegON-lapackOFF-worldOFF-v1 |
| 68 | + restore-keys: | |
| 69 | + opencv-${{ env.OPENCV_VERSION }}-${{ runner.os }}- |
| 70 | + opencv- |
68 | 71 |
|
69 | 72 | # Build vendored OpenCV only if cache miss (Ubuntu) |
70 | 73 | - name: Build vendored OpenCV (Ubuntu) |
|
77 | 80 | cmake --build third_party/opencv/build --target opencv_src --parallel 2 |
78 | 81 | test -f "${OPENCV_VENDOR_PREFIX}/lib/cmake/opencv4/OpenCVConfig.cmake" |
79 | 82 |
|
| 83 | + - name: Log cache status (Ubuntu) |
| 84 | + if: matrix.os == 'ubuntu-latest' |
| 85 | + run: echo "OpenCV cache hit: ${{ steps.cache-opencv.outputs.cache-hit }}" |
| 86 | + |
80 | 87 | # -------- Windows toolchain -------- |
81 | 88 | - name: Setup MSVC (Windows) |
82 | 89 | if: matrix.os == 'windows-latest' |
@@ -141,39 +148,43 @@ jobs: |
141 | 148 | - name: Configure (CMake) |
142 | 149 | shell: pwsh |
143 | 150 | run: | |
| 151 | + # Decide MSVC runtime first (literal values only) |
| 152 | + $msvcRuntime = if ("${{ matrix.os }}" -eq "windows-latest" -and "${{ env.BUILD_TYPE }}" -eq "Debug") { "MultiThreadedDebugDLL" } else { "MultiThreadedDLL" } |
| 153 | +
|
| 154 | + # Base args |
144 | 155 | $cmakeArgs = @( |
145 | 156 | "-S", ".", "-B", "build", |
146 | 157 | "-G", "Ninja", |
147 | 158 | "-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }}", |
148 | 159 | "-DBUILD_TESTS=ON", |
149 | 160 | "-DPROJECT_VERSION=${{ env.PKG_VERSION }}", |
150 | | - "-DVIDEOSTRIP_BUNDLE_OPENCV=ON", |
151 | | - "-DVIDEOSTRIP_OPENCV_VERSION=${{ env.OPENCV_VERSION }}", |
152 | 161 | "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=build/bin", |
153 | 162 | "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=build/lib", |
154 | 163 | "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=build/lib" |
155 | 164 | ) |
| 165 | +
|
156 | 166 | if ("${{ matrix.os }}" -eq "windows-latest") { |
157 | | - # On Windows use vcpkg OpenCV; disable vendored OpenCV and pin MSVC runtime |
| 167 | + # Windows: use vcpkg OpenCV; do not vendor OpenCV |
158 | 168 | $cmakeArgs += @( |
159 | 169 | "-DCMAKE_TOOLCHAIN_FILE=${env:VCPKG_TOOLCHAIN}", |
160 | 170 | "-DVCPKG_TARGET_TRIPLET=${env:VCPKG_TARGET_TRIPLET}", |
161 | 171 | "-DVCPKG_HOST_TRIPLET=${env:VCPKG_HOST_TRIPLET}", |
162 | 172 | "-DVCPKG_DEFAULT_BINARY_CACHE=${env:VCPKG_DEFAULT_BINARY_CACHE}", |
163 | | - "-DVIDEOSTRIP_BUNDLE_OPENCV=OFF" |
| 173 | + "-DVIDEOSTRIP_BUNDLE_OPENCV=OFF", |
| 174 | + "-DCMAKE_MSVC_RUNTIME_LIBRARY=$msvcRuntime" |
164 | 175 | ) |
165 | 176 | } else { |
| 177 | + # Linux: vendor OpenCV and (optionally) hint OpenCV_DIR if present |
166 | 178 | $cmakeArgs += @( |
| 179 | + "-DVIDEOSTRIP_BUNDLE_OPENCV=ON", |
| 180 | + "-DVIDEOSTRIP_OPENCV_VERSION=${{ env.OPENCV_VERSION }}", |
167 | 181 | "-DCMAKE_C_COMPILER_LAUNCHER=$env:CMAKE_C_COMPILER_LAUNCHER", |
168 | 182 | "-DCMAKE_CXX_COMPILER_LAUNCHER=$env:CMAKE_CXX_COMPILER_LAUNCHER" |
169 | 183 | ) |
| 184 | + $vendorCfg = "${{ env.OPENCV_VENDOR_PREFIX }}/lib/cmake/opencv4" |
| 185 | + if (Test-Path $vendorCfg) { $cmakeArgs += @("-DOpenCV_DIR=$vendorCfg") } |
170 | 186 | } |
171 | | - if ("${{ matrix.os }}" -eq "windows-latest") { |
172 | | - # Choose a literal MSVC runtime value (generator expressions are not allowed during compiler checks) |
173 | | - if ("${{ env.BUILD_TYPE }}" -eq "Debug") { $msvcRuntime = "MultiThreadedDebugDLL" } else { $msvcRuntime = "MultiThreadedDLL" } |
174 | | - # Append the literal to the existing list of cmake arguments |
175 | | - $cmakeArgs += @("-DCMAKE_MSVC_RUNTIME_LIBRARY=$msvcRuntime") |
176 | | - } |
| 187 | +
|
177 | 188 | cmake @cmakeArgs |
178 | 189 |
|
179 | 190 | # -------- Build -------- |
|
0 commit comments