Skip to content

Commit 7ca733a

Browse files
authored
feat(pkg): compat.opencv 三平台完成 +windows(core profile, clang-MSVC) (#99)
compat.opencv 现在三平台从源码构建:linux + macosx(全profile:core/imgproc/ imgcodecs/highgui/videoio+FFmpeg)+ windows(core profile:core/imgproc/imgcodecs, headless)。至此 opencv 与已三平台的 compat.ffmpeg 对齐。 - 描述符经 merge_opencv.lua 合成为 xpm.{linux,macosx,windows} + 每平台 mcpp 块; deps 改为**每平台**(linux/macosx 带 compat.ffmpeg videoio 后端;windows core 无 videoio 故无此 dep — mcpp 支持 per-OS deps,已验证)。零全局 generated_files。 - windows:mcpp clang-MSVC 从 clang-cl 配置快照源码编译全部 ~400 个 OpenCV C++ TU +链接+运行通过(PR#98 spike 已在 windows-latest 绿)。headless via WITH_WIN32UI=OFF; x86_64 SIMD dispatch(core/imgproc .simd.cpp 经 clang -mavx2)。已知取舍:jpeg-turbo NASM SIMD 关(ENABLE_LIBJPEG_TURBO_SIMD=OFF,jpeg 走 C 回退,功能完整仅非 SIMD 加速) + CoCreateGuid 需 -lole32。videoio+FFmpeg 与 jpeg-SIMD 为 windows 后续项。 - gen_descriptor.py 加 windows clang-cl 支持(parser 识别 clang-cl/MSVC driver tokens、 rel_posix/as_posix 路径、compress 正斜杠 glob、-std: 归一、utf-8);POSIX 行为不变。 - 新增 snapshot-windows-opencv.yml(windows-latest + msvc-dev-cmd + clang-cl)。 - 新成员 tests/examples/opencv-win(cfg windows,core 断言);/ 仍 linux+macos(其测试需 videoio)。 本地:mcpp xpkg parse --all-os 三平台 OK(linux 46src/34inc/249gen,macosx 21/23/175, windows 17/20/174)。windows 构建运行 spike PR#98 已绿。
1 parent a4bf601 commit 7ca733a

7 files changed

Lines changed: 3368 additions & 35 deletions

File tree

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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

mcpp.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ members = [
2626
"tests/examples/nlohmann.json",
2727
"tests/examples/openblas",
2828
"tests/examples/opencv",
29+
"tests/examples/opencv-win",
2930
"tests/examples/opencv-unifont",
3031
"tests/examples/opencv-dnn",
3132
"tests/examples/opencv-module",

0 commit comments

Comments
 (0)