Support linux via v4l2, and add some build tests. #13
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |