name: native and cross

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-24.04
    strategy:
      fail-fast: false
      matrix:
        release:
        - "ubuntu:20.04"
        - "ubuntu:22.04"
        - "ubuntu:24.04"
        - "ubuntu:rolling"
        - "debian:oldstable-slim"
        - "debian:stable-slim"
        - "debian:testing-slim"
        - "debian:unstable-slim"
        - "debian:experimental"

    steps:
    - uses: actions/checkout@v4

    - name: Prepare ${{ matrix.release }} container
      env:
        release: ${{ matrix.release == 'debian:experimental' && '-t experimental' || '' }}
      run: |
        podman version
        podman run --name stable -di --userns=keep-id:uid=1000,gid=1000 -v "$PWD":/home -w /home ${{ matrix.release }} bash
        podman exec -i stable uname -a
        podman exec -i stable id
        podman exec -i -u root stable apt update
        podman exec -e DEBIAN_FRONTEND='noninteractive' -i -u root stable apt install -o APT::Install-Suggests=false -qy ${release} \
                clang \
                cmake \
                gcc \
                gcc-aarch64-linux-gnu \
                gcc-arm-linux-gnueabihf \
                gcc-mips-linux-gnu \
                make

    - name: Configure & Build with gcc
      env:
        cc: gcc
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=${cc} -DENABLE_WERROR=ON -B build-${cc}
        podman exec -i stable cmake --build build-${cc}

    - name: Configure & Build with clang
      env:
        cc: clang
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=${cc} -DENABLE_WERROR=ON -B build-${cc}
        podman exec -i stable cmake --build build-${cc}

    - name: Configure & Build with arm-linux-gnueabihf-gcc
      env:
        toolchain: arm-linux-gnueabihf-gcc
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=cmake/${toolchain}.cmake -DENABLE_WERROR=ON -B build-${toolchain}
        podman exec -i stable cmake --build build-${toolchain}

    - name: Configure & Build with arm-linux-gnueabihf-clang
      if:
        ${{ matrix.release != 'ubuntu:20.04' && matrix.release != 'debian:oldstable-slim' }}
      env:
        toolchain: arm-linux-gnueabihf-clang
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=cmake/${toolchain}.cmake -DENABLE_WERROR=ON -B build-${toolchain}
        podman exec -i stable cmake --build build-${toolchain}

    - name: Configure & Build with aarch64-linux-gnu-gcc
      env:
        toolchain: aarch64-linux-gnu-gcc
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=cmake/${toolchain}.cmake -DENABLE_WERROR=ON -B build-${toolchain}
        podman exec -i stable cmake --build build-${toolchain}

    - name: Configure & Build with aarch64-linux-gnu-clang
      if:
        ${{ matrix.release != 'ubuntu:20.04' && matrix.release != 'debian:oldstable-slim' }}
      env:
        toolchain: aarch64-linux-gnu-clang
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=cmake/${toolchain}.cmake -DENABLE_WERROR=ON -B build-${toolchain}
        podman exec -i stable cmake --build build-${toolchain}

    - name: Configure & Build with mips-linux-gnu-gcc
      env:
        toolchain: mips-linux-gnu-gcc
      run: |
        podman exec -i stable cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=cmake/${toolchain}.cmake -DENABLE_WERROR=ON -B build-${toolchain}
        podman exec -i stable cmake --build build-${toolchain}

    - name: Show logs
      if: ${{ failure() }}
      run: |
        for log in build-*/CMakeFiles/{CMakeOutput.log,CMakeConfigureLog.yaml}; do \
                if [ -e ${log} ]; then \
                        echo "---------------- ${log} ----------------"; \
                        cat ${log}; \
                fi; \
        done
