Skip to content

Support linux via v4l2, and add some build tests. #13

Support linux via v4l2, and add some build tests.

Support linux via v4l2, and add some build tests. #13

Workflow file for this run

name: Linux Build
on:
push:
branches: [ main, develop, support_linux ]
pull_request:
branches: [ main, develop ]
jobs:
build-ubuntu:
name: "Build (${{ matrix.build_type }}-gcc-${{ matrix.glfw_desc }})"
runs-on: ubuntu-latest
strategy:
matrix:
build_type: [Debug, Release]
glfw_mode: [with_glfw, without_glfw]
include:
- glfw_mode: with_glfw
glfw_install: true
glfw_desc: "with system GLFW"
- glfw_mode: without_glfw
glfw_install: false
glfw_desc: "without system GLFW (bundled)"
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install base dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake build-essential gcc
- name: Install GLFW (conditional)
if: matrix.glfw_install == true
run: |
sudo apt-get install -y libglfw3-dev
echo "GLFW_INSTALLED=true" >> $GITHUB_ENV
- name: Setup compiler
run: |
echo "CC=gcc" >> $GITHUB_ENV
echo "CXX=g++" >> $GITHUB_ENV
- name: Configure CMake
run: |
echo "Configuring build ${{ matrix.build_type }} with gcc ${{ matrix.glfw_desc }}"
cmake -B build/${{ matrix.build_type }} \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DCCAP_BUILD_EXAMPLES=ON \
-DCCAP_BUILD_TESTS=ON
- name: Build
run: cmake --build build/${{ matrix.build_type }} --config ${{ matrix.build_type }} --parallel $(nproc)
- name: Verify GLFW examples build status
working-directory: build/${{ matrix.build_type }}
run: |
echo "Checking built examples:"
ls -la | grep -E "(glfw|example)" || echo "No GLFW examples found"
if [ "${{ matrix.glfw_install }}" = "true" ]; then
echo "With system GLFW - checking if GLFW examples were built:"
if [ -f "4-example_with_glfw" ]; then
echo "✓ GLFW example successfully built with system GLFW"
else
echo "✗ GLFW example not found - this might indicate a build issue"
exit 1
fi
else
echo "Without system GLFW - checking if bundled GLFW was used:"
if [ -f "4-example_with_glfw" ]; then
echo "✓ GLFW example successfully built with bundled GLFW"
else
echo "ℹ GLFW example not built - using bundled GLFW or GLFW disabled"
fi
fi
- name: Run Unit Tests
if: matrix.build_type == 'Release'
run: |
cd scripts
./run_tests.sh --functional --exit-when-failed
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ccap-linux-gcc-${{ matrix.build_type }}-${{ matrix.glfw_mode }}
path: |
build/${{ matrix.build_type }}/libccap.a
build/${{ matrix.build_type }}/0-print_camera
build/${{ matrix.build_type }}/1-minimal_example
build/${{ matrix.build_type }}/2-capture_grab
build/${{ matrix.build_type }}/3-capture_callback
build/${{ matrix.build_type }}/4-example_with_glfw
build/${{ matrix.build_type }}/*_results.xml
if-no-files-found: warn
build-ubuntu-clang:
name: "Build (${{ matrix.build_type }}-clang)"
runs-on: ubuntu-latest
# Only run clang builds on push to main branch
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
strategy:
matrix:
build_type: [Debug, Release]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake build-essential clang libglfw3-dev
- name: Setup compiler
run: |
echo "CC=clang" >> $GITHUB_ENV
echo "CXX=clang++" >> $GITHUB_ENV
- name: Configure CMake
run: |
echo "Configuring build ${{ matrix.build_type }} with clang (with system GLFW)"
cmake -B build/${{ matrix.build_type }} \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DCCAP_BUILD_EXAMPLES=ON \
-DCCAP_BUILD_TESTS=ON
- name: Build
run: cmake --build build/${{ matrix.build_type }} --config ${{ matrix.build_type }} --parallel $(nproc)
- name: Verify build outputs
working-directory: build/${{ matrix.build_type }}
run: |
echo "Checking built examples:"
ls -la | grep -E "(glfw|example)" || echo "No examples found"
echo "✓ Build completed successfully"
- name: Run Unit Tests
if: matrix.build_type == 'Release'
run: |
cd scripts
./run_tests.sh --functional --exit-when-failed
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ccap-linux-clang-${{ matrix.build_type }}
path: |
build/${{ matrix.build_type }}/libccap.a
build/${{ matrix.build_type }}/0-print_camera
build/${{ matrix.build_type }}/1-minimal_example
build/${{ matrix.build_type }}/2-capture_grab
build/${{ matrix.build_type }}/3-capture_callback
build/${{ matrix.build_type }}/4-example_with_glfw
build/${{ matrix.build_type }}/*_results.xml
if-no-files-found: warn
build-ubuntu-arm64:
name: "Build ARM64 (${{ matrix.build_type }}-gcc)"
runs-on: ubuntu-latest
strategy:
matrix:
build_type: [Debug, Release]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install cross-compilation toolchain
run: |
sudo apt-get update
sudo apt-get install -y cmake build-essential gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
echo "Cross-compilation toolchain installed"
- name: Configure CMake for ARM64
run: |
echo "Configuring build ${{ matrix.build_type }} for ARM64 (cross-compilation)"
cmake -B build/arm64/${{ matrix.build_type }} \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_CROSSCOMPILING=ON \
-DCCAP_BUILD_EXAMPLES=ON \
-DCCAP_BUILD_TESTS=OFF
- name: Build ARM64
run: cmake --build build/arm64/${{ matrix.build_type }} --config ${{ matrix.build_type }} --parallel $(nproc)
- name: Verify build outputs
working-directory: build/arm64/${{ matrix.build_type }}
run: |
echo "Checking built ARM64 binaries:"
ls -la | grep -E "(ccap|example)" || echo "No examples found"
echo "Verifying ARM64 architecture:"
file libccap.a | grep -q "aarch64" && echo "✓ Library is ARM64" || echo "⚠ Library architecture verification failed"
if [ -f "0-print_camera" ]; then
file 0-print_camera | grep -q "aarch64" && echo "✓ Binary is ARM64" || echo "⚠ Binary architecture verification failed"
fi
echo "✓ ARM64 cross-compilation completed successfully"
- name: Upload ARM64 artifacts
uses: actions/upload-artifact@v4
with:
name: ccap-linux-arm64-gcc-${{ matrix.build_type }}
path: |
build/arm64/${{ matrix.build_type }}/libccap.a
build/arm64/${{ matrix.build_type }}/0-print_camera
build/arm64/${{ matrix.build_type }}/1-minimal_example
build/arm64/${{ matrix.build_type }}/2-capture_grab
build/arm64/${{ matrix.build_type }}/3-capture_callback
build/arm64/${{ matrix.build_type }}/4-example_with_glfw
build/arm64/${{ matrix.build_type }}/*_results.xml
if-no-files-found: warn
build-fedora:
name: "Build Fedora (${{ matrix.build_type }})"
runs-on: ubuntu-latest
container: fedora:latest
strategy:
matrix:
build_type: [Debug, Release]
steps:
- name: Install Git first
run: |
dnf update -y
dnf install -y git
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: |
dnf install -y cmake gcc-c++ make
- name: Configure CMake
run: |
cmake -B build/${{ matrix.build_type }} \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DCCAP_BUILD_EXAMPLES=ON \
-DCCAP_BUILD_TESTS=ON
- name: Build
run: cmake --build build/${{ matrix.build_type }} --config ${{ matrix.build_type }} --parallel $(nproc)
- name: Run Unit Tests
if: matrix.build_type == 'Release'
run: |
cd scripts
./run_tests.sh --functional --exit-when-failed
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ccap-fedora-${{ matrix.build_type }}
path: |
build/${{ matrix.build_type }}/libccap.a
build/${{ matrix.build_type }}/0-print_camera
build/${{ matrix.build_type }}/1-minimal_example
build/${{ matrix.build_type }}/2-capture_grab
build/${{ matrix.build_type }}/3-capture_callback
build/${{ matrix.build_type }}/*_results.xml
if-no-files-found: warn