name: Build Emulator

on:
  push:
    branches: [ "main" ]
    paths: ["gb-emu/**", "lib/**", "vendored/**", "Cargo.toml"]

env:
  CARGO_TERM_COLOR: always
  MACOSX_DEPLOYMENT_TARGET: 10.7

jobs:
  build:
    runs-on: ${{ matrix.os }}-latest
    strategy:
      fail-fast: false
      matrix:
        os: [macos, windows]

    steps:
    - name: checkout  
      uses: actions/checkout@v3
    - name: pull submodules
      run: git submodule update --init --recursive
    - name: get rust toolchain
      uses: dtolnay/rust-toolchain@nightly
    - name: install rust aarch64 and x86_64 targets for mac
      run: rustup target add aarch64-apple-darwin x86_64-apple-darwin
      if: ${{ matrix.os == 'macos' }}
    - name: cache rust build
      uses: Swatinem/rust-cache@v2
      with:
        shared-key: emulator-${{ matrix.os }}
    # - name: install cached apt packages
    #   uses: awalsh128/cache-apt-pkgs-action@latest
    #   if: ${{ matrix.os == 'ubuntu' }}
    #   with:
    #     packages: libasound2-dev libudev-dev
    #     version: 1.0
    - name: build
      run: cargo build --release
      if: ${{ matrix.os != 'macos' }}
    - name: build x86_64
      run: cargo build --release --target x86_64-apple-darwin
      if: ${{ matrix.os == 'macos' }}
    - name: build aarch64
      run: cargo build --release --target aarch64-apple-darwin
      if: ${{ matrix.os == 'macos' }}
    - name: upload build (linux)
      uses: actions/upload-artifact@v3
      if: ${{ matrix.os == 'ubuntu' }}
      with:
        name: gb-emu-linux
        path: target/release/gb-emu
    - name: upload build (windows)
      uses: actions/upload-artifact@v3
      if: ${{ matrix.os == 'windows' }}
      with:
        name: gb-emu-windows
        path: target/release/gb-emu.exe
    - name: upload build (macos x86_64)
      uses: actions/upload-artifact@v3
      if: ${{ matrix.os == 'macos' }}
      with:
        name: gb-emu-macos-x86_64
        path: target/x86_64-apple-darwin/release/gb-emu
    - name: upload build (macos aarch64)
      uses: actions/upload-artifact@v3
      if: ${{ matrix.os == 'macos' }}
      with:
        name: gb-emu-macos-aarch64
        path: target/aarch64-apple-darwin/release/gb-emu