Add linux arm64 release jobs #10
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 and GLFW | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
| # Add ARM64 architecture and install cross-compiled GLFW | |
| sudo dpkg --add-architecture arm64 | |
| sudo apt-get update | |
| sudo apt-get install -y libglfw3-dev:arm64 || echo "ARM64 GLFW not available, will use bundled version" | |
| - name: Configure CMake for ARM64 | |
| run: | | |
| echo "Configuring build ${{ matrix.build_type }} for ARM64 (with system GLFW)" | |
| 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 \ | |
| -DCCAP_BUILD_EXAMPLES=ON \ | |
| -DCCAP_BUILD_TESTS=ON | |
| - 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 examples:" | |
| ls -la | grep -E "(glfw|example)" || echo "No examples found" | |
| echo "✓ ARM64 build 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 |