Skip to content

Linux: portable manylinux build, vcpkg for Linux, slim profile expansion #708

Linux: portable manylinux build, vcpkg for Linux, slim profile expansion

Linux: portable manylinux build, vcpkg for Linux, slim profile expansion #708

Workflow file for this run

name: Linux ARM
on:
pull_request:
types: [synchronize, opened]
push:
branches:
- main
env:
DEBIAN_FRONTEND: noninteractive
OPENCV_VERSION: 4.13.0
CACHE_VERSION: "2"
jobs:
build:
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
run: |
sudo apt-get update -y
sudo apt-get install -y --no-install-recommends \
apt-transport-https \
software-properties-common \
ca-certificates \
g++ \
make \
cmake \
libtbb-dev \
libatlas-base-dev \
libgtk-3-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libdc1394-dev \
libxine2-dev \
libv4l-dev \
libtheora-dev \
libvorbis-dev \
libxvidcore-dev \
libopencore-amrnb-dev \
libopencore-amrwb-dev \
libx264-dev \
libtesseract-dev \
ninja-build
- name: Restore OpenCV cache
id: opencv-cache
uses: actions/cache/restore@v5
with:
path: |
${{ github.workspace }}/opencv_artifacts/include
${{ github.workspace }}/opencv_artifacts/lib
key: opencv-arm-v${{ env.CACHE_VERSION }}-${{ env.OPENCV_VERSION }}-${{ hashFiles('cmake/opencv_build_options.cmake', '.github/workflows/linux-arm.yml') }}
- name: Configure OpenCV
if: steps.opencv-cache.outputs.cache-hit != 'true'
run: |
cmake \
-G Ninja \
-C cmake/opencv_build_options.cmake \
-S opencv \
-B opencv/build \
-D OPENCV_EXTRA_MODULES_PATH=${GITHUB_WORKSPACE}/opencv_contrib/modules \
-D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_artifacts \
2>&1 | tee /tmp/opencv-configure.log
- name: Verify OpenCV cmake features
if: steps.opencv-cache.outputs.cache-hit != 'true'
run: |
log=/tmp/opencv-configure.log
fail=0
for feature in Tesseract FFMPEG JPEG PNG TIFF WEBP; do
val=$(grep -E "^--\s+${feature}:\s+" "$log" | tail -1 | sed -E "s/^.*${feature}:[[:space:]]+//")
if [[ -n "$val" ]] && [[ "$val" != NO* ]]; then
echo "OK: $feature = $val"
else
echo "MISSING or DISABLED: $feature"
grep -iE "${feature}" "$log" | tail -3 || true
fail=1
fi
done
[ "$fail" -eq 0 ]
- name: Build OpenCV
if: steps.opencv-cache.outputs.cache-hit != 'true'
run: |
cmake --build opencv/build -j 3
cmake --install opencv/build
sudo ldconfig
ls
- name: Save OpenCV cache
if: steps.opencv-cache.outputs.cache-hit != 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: actions/cache/save@v5
with:
path: |
${{ github.workspace }}/opencv_artifacts/include
${{ github.workspace }}/opencv_artifacts/lib
key: opencv-arm-v${{ env.CACHE_VERSION }}-${{ env.OPENCV_VERSION }}-${{ hashFiles('cmake/opencv_build_options.cmake', '.github/workflows/linux-arm.yml') }}
- name: Build OpenCvSharpExtern
run: |
cmake \
-G Ninja \
-S src \
-B src/build \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_artifacts
cmake --build src/build -j
ls src/build/OpenCvSharpExtern
cp src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/nuget/
- name: Check OpenCvSharpExtern
run: |
cd ${GITHUB_WORKSPACE}/nuget/
ldd libOpenCvSharpExtern.so
nm libOpenCvSharpExtern.so
echo -ne "#include <stdio.h> \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c
gcc -I./ -L./ test.c -o test -lOpenCvSharpExtern
LD_LIBRARY_PATH=. ./test
- name: Install .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'
- name: Create NuGet package
env:
BETA: "-beta"
run: |
yyyymmdd=`date '+%Y%m%d'`
echo $yyyymmdd
version="${OPENCV_VERSION}.${yyyymmdd}${BETA}"
echo "Package version: $version"
cd ${GITHUB_WORKSPACE}
dotnet pack nuget/OpenCvSharp4.runtime.linux-arm.csproj -o ${GITHUB_WORKSPACE}/artifacts_arm -p:Version=$version
ls ${GITHUB_WORKSPACE}/artifacts_arm
- uses: actions/upload-artifact@v6
with:
name: artifacts_linux_arm
path: artifacts_arm
- name: Test
run: |
cd ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests
dotnet build -c Release -f net10.0
cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net10.0/
cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/
sudo cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so /usr/lib/
LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net10.0 --runtime linux-arm64 --logger "trx;LogFileName=test-results.trx" < /dev/null