From 21cb41c8deec674e3a876296aab1c4f5243d6eb2 Mon Sep 17 00:00:00 2001 From: Walter Perdan Date: Sun, 5 Jul 2026 18:27:50 +0200 Subject: [PATCH 1/2] Upgrade opencv-em to 0.2.0 (OpenCV 4.10.0 -> 4.12.0) - Extract shared release coordinates into cmake/OpenCVEm.cmake so WebARKit/CMakeLists.txt and tests/CMakeLists.txt no longer hardcode the version independently. - Add WEBARKIT_SIMD option (default OFF) to opt into the new SIMD-enabled emscripten build shipped in opencv-em 0.2.0. - Pin FetchContent_Declare URLs with SHA256 URL_HASH using digests from GitHub's release API. - Bump CI's emscripten/emsdk Docker tag 3.1.38 -> 3.1.69 to match the emcc version used to build the new opencv-em release. --- .github/workflows/test.yml | 2 +- WebARKit/CMakeLists.txt | 32 ++++++++++++++++++++++---------- cmake/OpenCVEm.cmake | 13 +++++++++++++ tests/CMakeLists.txt | 4 +++- 4 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 cmake/OpenCVEm.cmake diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4c0dbb4..e1b00a0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: run: | cd .. ls - docker run -dit --name emscripten-webarkit-testing -v $(pwd):/src emscripten/emsdk:3.1.38 bash + docker run -dit --name emscripten-webarkit-testing -v $(pwd):/src emscripten/emsdk:3.1.69 bash docker exec emscripten-webarkit-testing emcmake cmake -B WebARKitLib/WebARKit/build -S WebARKitLib/WebARKit -DEMSCRIPTEN_COMP=1 .. docker exec emscripten-webarkit-testing emmake make -C WebARKitLib/WebARKit/build \ No newline at end of file diff --git a/WebARKit/CMakeLists.txt b/WebARKit/CMakeLists.txt index 724e5cd..1e6ea94 100644 --- a/WebARKit/CMakeLists.txt +++ b/WebARKit/CMakeLists.txt @@ -9,21 +9,33 @@ if(VERSION GREATER 3.24) endif() include(FetchContent) +include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/OpenCVEm.cmake) + +option(WEBARKIT_SIMD "Use the SIMD-enabled emscripten OpenCV build" OFF) if(${EMSCRIPTEN_COMP} EQUAL 1) - message("Fetching opencv for emscripten compilation from webarkit/opencv-em ...") - FetchContent_Declare( - build_opencv - URL https://github.com/webarkit/opencv-em/releases/download/0.1.6/opencv-js-4.10.0-emcc-3.1.38.zip - ) + if(WEBARKIT_SIMD) + set(OPENCV_FETCH_DESC "SIMD emscripten") + set(OPENCV_FETCH_URL ${OPENCV_EMSCRIPTEN_SIMD_URL}) + set(OPENCV_FETCH_HASH ${OPENCV_EMSCRIPTEN_SIMD_HASH}) + else() + set(OPENCV_FETCH_DESC "emscripten") + set(OPENCV_FETCH_URL ${OPENCV_EMSCRIPTEN_URL}) + set(OPENCV_FETCH_HASH ${OPENCV_EMSCRIPTEN_HASH}) + endif() else() - message("Fetching opencv from webarkit/opencv-em ...") - FetchContent_Declare( - build_opencv - URL https://github.com/webarkit/opencv-em/releases/download/0.1.6/opencv-4.10.0.zip - ) + set(OPENCV_FETCH_DESC "native") + set(OPENCV_FETCH_URL ${OPENCV_NATIVE_URL}) + set(OPENCV_FETCH_HASH ${OPENCV_NATIVE_HASH}) endif() +message("Fetching ${OPENCV_FETCH_DESC} opencv from webarkit/opencv-em ${OPENCV_EM_RELEASE} ...") +FetchContent_Declare( + build_opencv + URL ${OPENCV_FETCH_URL} + URL_HASH ${OPENCV_FETCH_HASH} +) + FetchContent_MakeAvailable(build_opencv) get_filename_component(PARENT_DIR ./ ABSOLUTE) diff --git a/cmake/OpenCVEm.cmake b/cmake/OpenCVEm.cmake new file mode 100644 index 0000000..b3a1d40 --- /dev/null +++ b/cmake/OpenCVEm.cmake @@ -0,0 +1,13 @@ +# Shared webarkit/opencv-em release coordinates. +# Bump OPENCV_EM_RELEASE (and the three hashes below) to upgrade opencv-em. +set(OPENCV_EM_RELEASE "0.2.0") +set(OPENCV_EM_BASE_URL "https://github.com/webarkit/opencv-em/releases/download/${OPENCV_EM_RELEASE}") + +set(OPENCV_NATIVE_URL "${OPENCV_EM_BASE_URL}/opencv-4.12.0.zip") +set(OPENCV_NATIVE_HASH "SHA256=eb68b3c6cac2781f6bbbe747d9ac8f27c5d716471da82d6c4fd79f26a18263b4") + +set(OPENCV_EMSCRIPTEN_URL "${OPENCV_EM_BASE_URL}/opencv-js-4.12.0-emcc-3.1.69.zip") +set(OPENCV_EMSCRIPTEN_HASH "SHA256=3a9509615bed922b058e3201007c8b9b29c1e5aa3dd0750676b7d847738ce2c7") + +set(OPENCV_EMSCRIPTEN_SIMD_URL "${OPENCV_EM_BASE_URL}/opencv-js-4.12.0-emcc-3.1.69-simd.zip") +set(OPENCV_EMSCRIPTEN_SIMD_HASH "SHA256=3600fd9d0422cb1fc19306bb1f876a578dff970f207947b346180993dfa27026") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 503a7fb..f6e4369 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,6 +10,7 @@ endif() # Fetch googletest v1.13.0 commit b796f7d44681514f58a683a3a71ff17c94edb0c1 include(FetchContent) +include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/OpenCVEm.cmake) FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/b796f7d44681514f58a683a3a71ff17c94edb0c1.zip @@ -19,7 +20,8 @@ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_Declare( build_opencv - URL https://github.com/webarkit/opencv-em/releases/download/0.1.6/opencv-4.10.0.zip + URL ${OPENCV_NATIVE_URL} + URL_HASH ${OPENCV_NATIVE_HASH} ) FetchContent_MakeAvailable(googletest build_opencv) From cc3d1213fe8ac7f37dafa94dc798a60d74a4cfc3 Mon Sep 17 00:00:00 2001 From: Walter Perdan Date: Sun, 5 Jul 2026 18:34:00 +0200 Subject: [PATCH 2/2] ci: bump actions/checkout to v7, actions/setup-node to v6, Node to 22.x --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e1b00a0..ac03f7d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,11 +5,11 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20.x' + node-version: '22.x' - name: Update Ubuntu and install libjpeg-dev run: | sudo apt-get update && sudo apt install libjpeg-dev