|
| 1 | +# TEMP spike: capture a windows-x86_64 compat.opencv config snapshot on a real |
| 2 | +# windows-latest runner using clang-cl (mcpp's windows toolchain is clang targeting |
| 3 | +# the MSVC ABI; OpenCV emits GCC-style -mavx2 SIMD flags under CV_CLANG even with |
| 4 | +# clang-cl -> mcpp-compatible). CORE profile first (core/imgproc/imgcodecs/highgui, |
| 5 | +# headless via WITH_WIN32UI=OFF, WITH_FFMPEG=OFF) to isolate the make-or-break |
| 6 | +# question: does mcpp clang-MSVC compile OpenCV's C++ from a clang-cl snapshot. |
| 7 | +# videoio+FFmpeg is a follow-up. Uploads the descriptor AND raw artifacts. |
| 8 | +name: snapshot-windows-opencv |
| 9 | +on: { workflow_dispatch: {}, push: { branches: [spike/opencv-windows-snapshot] } } |
| 10 | +jobs: |
| 11 | + snapshot: |
| 12 | + runs-on: windows-latest |
| 13 | + timeout-minutes: 90 |
| 14 | + steps: |
| 15 | + - uses: actions/checkout@v4 |
| 16 | + - uses: ilammy/msvc-dev-cmd@v1 # MSVC SDK headers/libs for clang-cl |
| 17 | + - name: tools (llvm/clang-cl, nasm, ninja) |
| 18 | + shell: pwsh |
| 19 | + run: | |
| 20 | + choco install -y --no-progress nasm ninja llvm | Out-Null |
| 21 | + echo "C:\Program Files\NASM" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 |
| 22 | + echo "C:\Program Files\LLVM\bin" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 |
| 23 | + - name: probe toolchain |
| 24 | + shell: bash |
| 25 | + run: | |
| 26 | + set -eux |
| 27 | + which clang-cl cmake ninja nasm |
| 28 | + clang-cl --version |
| 29 | + - name: fetch + extract OpenCV 5.0.0 |
| 30 | + shell: bash |
| 31 | + run: | |
| 32 | + set -eux |
| 33 | + curl -L -fsS -o opencv.tar.gz https://github.com/opencv/opencv/archive/refs/tags/5.0.0.tar.gz |
| 34 | + echo "b0528f5a1d379d59d4701cb28c36e22214cc51cf64594e5b56f2d3e6c0233095 opencv.tar.gz" | sha256sum -c - |
| 35 | + tar -xzf opencv.tar.gz |
| 36 | + echo "OPENCV_SRC=$PWD/opencv-5.0.0" >> "$GITHUB_ENV" |
| 37 | + - name: cmake configure (clang-cl, headless core, hermetic) |
| 38 | + shell: bash |
| 39 | + run: | |
| 40 | + set -eux |
| 41 | + cmake -G Ninja -S "$OPENCV_SRC" -B bld \ |
| 42 | + -DCMAKE_BUILD_TYPE=Release \ |
| 43 | + -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl \ |
| 44 | + -DBUILD_LIST=core,imgproc,imgcodecs,highgui \ |
| 45 | + -DBUILD_SHARED_LIBS=OFF -DBUILD_ZLIB=ON -DBUILD_PNG=ON -DBUILD_JPEG=ON \ |
| 46 | + -DENABLE_LIBJPEG_TURBO_SIMD=OFF \ |
| 47 | + -DWITH_WIN32UI=OFF -DWITH_DSHOW=OFF -DWITH_MSMF=OFF -DWITH_MSMF_DXVA=OFF \ |
| 48 | + -DWITH_TIFF=OFF -DWITH_WEBP=OFF -DWITH_OPENJPEG=OFF -DWITH_JASPER=OFF \ |
| 49 | + -DWITH_OPENEXR=OFF -DWITH_AVIF=OFF -DWITH_JPEGXL=OFF -DWITH_IMGCODEC_GIF=OFF \ |
| 50 | + -DWITH_OPENCL=OFF -DWITH_IPP=OFF -DWITH_LAPACK=OFF -DWITH_EIGEN=OFF -DWITH_ITT=OFF \ |
| 51 | + -DWITH_QT=OFF -DWITH_OPENGL=OFF -DWITH_FFMPEG=OFF -DWITH_GSTREAMER=OFF \ |
| 52 | + -DWITH_OBSENSOR=OFF -DWITH_PROTOBUF=OFF -DWITH_CAROTENE=OFF -DWITH_FLATBUFFERS=OFF \ |
| 53 | + -DWITH_KLEIDICV=OFF -DWITH_NDSRVP=OFF -DWITH_HAL_RVV=OFF \ |
| 54 | + -DWITH_UNIFONT=OFF -DWITH_ADE=OFF \ |
| 55 | + -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF \ |
| 56 | + -DBUILD_opencv_apps=OFF -DBUILD_JAVA=OFF -DBUILD_opencv_python3=OFF 2>&1 | tail -40 |
| 57 | + - name: reference build (materialize generators) + dump commands |
| 58 | + shell: bash |
| 59 | + run: | |
| 60 | + ninja -C bld -k 0 > bld/ninja-build.log 2>&1 || true |
| 61 | + ninja -C bld -t commands > bld/ninja-cmds.log |
| 62 | + echo "=== windows cvconfig facts ===" |
| 63 | + grep -E "HAVE_WIN32UI|WIN32|HAVE_OPENCV_HIGHGUI|BUILTIN_BACKEND" bld/cvconfig.h bld/*highgui* 2>/dev/null | head || true |
| 64 | + echo "=== SIMD dispatch TUs present? ===" |
| 65 | + grep -oE '\.(avx[0-9_a-z]*|sse4_[12]|fp16|neon[a-z0-9_]*)\.cpp' bld/ninja-cmds.log | sort | uniq -c || true |
| 66 | + echo "=== SIMD flag style (-mavx expected, NOT /arch) ===" |
| 67 | + grep -oE '(\-mavx[0-9]*|/arch:[A-Z0-9]+)' bld/ninja-cmds.log | sort | uniq -c || true |
| 68 | + - name: gen descriptor (relabel linux->windows; raw artifacts uploaded regardless) |
| 69 | + shell: bash |
| 70 | + run: | |
| 71 | + set -eux |
| 72 | + python tools/compat-opencv/gen_descriptor.py \ |
| 73 | + "$OPENCV_SRC" bld 5.0.0 \ |
| 74 | + b0528f5a1d379d59d4701cb28c36e22214cc51cf64594e5b56f2d3e6c0233095 \ |
| 75 | + compat.opencv.wingen.lua || echo "gen_descriptor needs windows tweaks — raw artifacts uploaded for local iteration" |
| 76 | + if [ -f compat.opencv.wingen.lua ]; then |
| 77 | + # relabel linux->windows (xpm key + per-OS block) and drop linux ldflags |
| 78 | + # (-lpthread/-ldl don't exist on windows; the build spike surfaces any |
| 79 | + # real LNK deps, added back per-OS afterwards). |
| 80 | + sed -e 's/^ linux = {/ windows = {/' \ |
| 81 | + -e 's/name = "compat.opencv"/name = "compat.opencvwin"/' \ |
| 82 | + -e 's/ldflags = { "-lpthread", "-ldl" }/ldflags = { "-lole32" }/' \ |
| 83 | + compat.opencv.wingen.lua > compat.opencvwin.lua || true |
| 84 | + echo "=== descriptor head ==="; head -50 compat.opencvwin.lua || true |
| 85 | + fi |
| 86 | + - uses: actions/upload-artifact@v4 |
| 87 | + if: always() |
| 88 | + with: |
| 89 | + name: opencv-windows-snapshot |
| 90 | + path: | |
| 91 | + compat.opencvwin.lua |
| 92 | + compat.opencv.wingen.lua |
| 93 | + bld/cvconfig.h |
| 94 | + bld/cv_cpu_config.h |
| 95 | + bld/ninja-cmds.log |
| 96 | + bld/ninja-build.log |
0 commit comments