name: GitHub Actions CI

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  build-linux:
    name: Build ${{ matrix.platform.name }} ${{ matrix.compiler.name }} ${{ matrix.flavor }} (${{ matrix.mode.name }})
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        platform: 
          - { name: x86, flags: "-m32" }
          - { name: x64, flags: "-m64" }
        compiler:
          - { name: GNU,  CC: gcc   }
          - { name: LLVM, CC: clang }
        flavor: 
          - Debug
          - Release
        mode: 
          - { name: default, args: ""                }
          - { name: NO_LIBC, args: -DZYAN_NO_LIBC=ON }

    steps:
      - name: Checkout
        uses: actions/checkout@v3.1.0

      - if: matrix.platform.name == 'x86'
        name: Bootstrap
        run: |
          sudo dpkg --add-architecture i386
          sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
          sudo apt-get install -y g++-multilib g++

      - name: Configure
        env:
          CC: ${{ matrix.compiler.CC }}
          CXX: ${{ matrix.compiler.CXX }}
        run: |
          mkdir build
          cd build
          cmake -DCMAKE_C_FLAGS=${{ matrix.platform.flags }} -DCMAKE_CXX_FLAGS=${{ matrix.platform.flags }} -DZYAN_DEV_MODE=ON ${{ matrix.mode.args }} ..
          
      - name: Build
        run: |
          cmake --build build --config ${{ matrix.flavor }}

  build-windows:
    name: Build ${{ matrix.platform.name }} ${{ matrix.compiler.name }} ${{ matrix.flavor }} (${{ matrix.mode.name }})
    runs-on: windows-latest

    strategy:
      fail-fast: false
      matrix:
        platform: 
          - { name: x86, flags: "Win32" }
          - { name: x64, flags: "x64"   }
        compiler:
          - { name: MSVC }
        flavor: 
          - Debug
          - Release
        mode: 
          - { name: default, args: ""                }
          - { name: NO_LIBC, args: -DZYAN_NO_LIBC=ON }

    steps:
      - name: Checkout
        uses: actions/checkout@v3.1.0

      - name: Configure
        run: |
          mkdir build
          cd build
          cmake -DCMAKE_GENERATOR_PLATFORM=${{ matrix.platform.flags }} -DZYAN_DEV_MODE=ON ${{ matrix.mode.args }} ..
          
      - name: Build
        run: |
          cmake --build build --config ${{ matrix.flavor }}
