name: Build
on:
  workflow_dispatch:
jobs:
  prebuild:
    strategy:
      matrix:
        include:
          - os: ubuntu-22.04
            platform: linux
            arch: x64
          - os: ubuntu-22.04-arm
            platform: linux
            arch: arm64
          - os: ubuntu-22.04
            platform: android
            arch: x64
            flags: -D ANDROID_STL=c++_static
          - os: ubuntu-22.04
            platform: android
            arch: ia32
            flags: -D ANDROID_STL=c++_static
          - os: ubuntu-22.04
            platform: android
            arch: arm64
            flags: -D ANDROID_STL=c++_static
          - os: ubuntu-22.04
            platform: android
            arch: arm
            flags: -D ANDROID_STL=c++_static
          - os: macos-14
            platform: darwin
            arch: x64
          - os: macos-14
            platform: darwin
            arch: arm64
          - os: macos-14
            platform: ios
            arch: arm64
          - os: macos-14
            platform: ios
            arch: arm64
            tags: -simulator
            flags: --simulator
          - os: macos-14
            platform: ios
            arch: x64
            tags: -simulator
            flags: --simulator
          - os: windows-2022
            platform: win32
            arch: x64
          - os: windows-2022
            platform: win32
            arch: arm64
    runs-on: ${{ matrix.os }}
    name: ${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v4
        with:
          path: build/_drive
          key: corestore-${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }}
      - uses: actions/setup-node@v4
        with:
          node-version: lts/*
      - run: |
          wget https://apt.llvm.org/llvm.sh
          chmod +x llvm.sh
          sudo ./llvm.sh 20
        if: ${{ matrix.platform == 'linux' }}
      - run: choco upgrade llvm
        if: ${{ matrix.platform == 'win32' }}
      - run: choco install nasm
        if: ${{ matrix.platform == 'win32' }}
      - run: npm install -g bare-make
      - run: npm install
      - run: bare-make generate --platform ${{ matrix.platform }} --arch ${{ matrix.arch }} ${{ matrix.flags }}
      - run: bare-make build
      - run: bare-make install --strip  --prefix install/${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }}
      - uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }}
          path: install/${{ matrix.platform }}-${{ matrix.arch }}${{ matrix.tags }}/bin/*
          retention-days: 1

  merge:
    runs-on: ubuntu-latest
    needs: prebuild
    steps:
      - uses: actions/download-artifact@v4
        with:
          path: install
          merge-multiple: true
      - uses: actions/upload-artifact@v4
        with:
          name: builds
          path: install
          retention-days: 1
