# ------------------------------------------------------------
#  Build and test workflow (Linux x64, macOS x64, Windows x64)
# ------------------------------------------------------------

name: build
on:
  push:
    branches:
      - master
    tags-ignore:
      - 'v*'
  pull_request:
    branches:
      - master

jobs:

  build:
    strategy:
      matrix:
        os: [ ubuntu-latest, windows-latest ]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-go@v5
        with:
          go-version: 'stable'

      - name: Linux
        if: matrix.os == 'ubuntu-latest'
        env:
          MESA_GL_VERSION_OVERRIDE: 3.3COMPAT
        run: |
          sudo apt-get -qq update
          sudo apt-get -qq install -y \
            make pkg-config \
            libvpx-dev libx264-dev libopus-dev libyuv-dev libjpeg-turbo8-dev \
            libsdl2-dev libgl1 libglx-mesa0 libspeexdsp-dev
          
          make build
          xvfb-run --auto-servernum make test verify-cores

      - name: macOS
        if: matrix.os == 'macos-12'
        run: |
          brew install libvpx x264 sdl2 speexdsp
          make build test verify-cores

      - uses: msys2/setup-msys2@v2
        if: matrix.os == 'windows-latest'
        with:
          msystem: ucrt64
          path-type: inherit
          release: false
          install: >
            mingw-w64-ucrt-x86_64-gcc
            mingw-w64-ucrt-x86_64-pkgconf
            mingw-w64-ucrt-x86_64-dlfcn
            mingw-w64-ucrt-x86_64-libvpx
            mingw-w64-ucrt-x86_64-opus
            mingw-w64-ucrt-x86_64-libx264
            mingw-w64-ucrt-x86_64-SDL2
            mingw-w64-ucrt-x86_64-libyuv
            mingw-w64-ucrt-x86_64-libjpeg-turbo
            mingw-w64-ucrt-x86_64-speexdsp

      - name: Windows
        if: matrix.os == 'windows-latest'
        env:
          MESA_VERSION: '24.0.7'
          MESA_GL_VERSION_OVERRIDE: 3.3COMPAT
        shell: msys2 {0}
        run: |
          set MSYSTEM=UCRT64
          
          wget -q https://github.com/pal1000/mesa-dist-win/releases/download/$MESA_VERSION/mesa3d-$MESA_VERSION-release-msvc.7z
          "/c/Program Files/7-Zip/7z.exe" x mesa3d-$MESA_VERSION-release-msvc.7z -omesa
          echo -e " 1\r\n 9\r\n " >> commands
          ./mesa/systemwidedeploy.cmd < ./commands
          
          make build test verify-cores

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: emulator-test-frames-${{ matrix.os }}
          path: _rendered/*.png
