name: build

# build on c/cpp changes or workflow changes
on:
  - push
  - pull_request

jobs:

  linux-gl:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          sudo apt-get update
          sudo apt-get install g++ cmake libxi-dev libgl1-mesa-dev libpng-dev libjpeg-dev zlib1g-dev -qyy

      - name: Build
        run: |
          cmake . -DUSE_SDL2=OFF
          make VERBOSE=1 -j2

      - name: Test
        run: |
          ctest --output-on-failure

      - name: Package
        run: |
          make DESTDIR=$PWD/_install install
          tar -c -I "gzip -9" -f irrlicht-linux.tar.gz -C ./_install/usr/local .

      - uses: actions/upload-artifact@v4
        with:
          name: irrlicht-linux
          path: ./irrlicht-linux.tar.gz

  linux-gles:
    # Xvfb test is broken on 20.04 for unknown reasons (not our bug)
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          sudo apt-get update
          sudo apt-get install g++ cmake libxi-dev libgles2-mesa-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy

      - name: Build
        run: |
          cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=OFF -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
          make -j2

      - name: Test (headless)
        run: |
          cd bin/Linux
          ./AutomatedTest null

      - name: Test (Xvfb)
        run: |
          cd bin/Linux
          LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2

  linux-sdl:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          sudo apt-get update
          sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev -qyy

      - name: Build
        run: |
          cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DCMAKE_BUILD_TYPE=Debug
          make -j2

      - name: Test (headless)
        run: |
          cd bin/Linux
          ./AutomatedTest null

  linux-sdl-gl3:
    # Xvfb test is broken on 20.04 for unknown reasons (not our bug)
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          sudo apt-get update
          sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy

      - name: Build
        run: |
          cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_OPENGL3=ON
          make -j2

      - name: Test (headless)
        run: |
          cd bin/Linux
          ./AutomatedTest null

      - name: Test (Xvfb)
        run: |
          cd bin/Linux
          LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest opengl3

  linux-sdl-gles2:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          sudo apt-get update
          sudo apt-get install g++ cmake libsdl2-dev libpng-dev libjpeg-dev zlib1g-dev xvfb -qyy

      - name: Build
        run: |
          cmake . -DBUILD_EXAMPLES=1 -DUSE_SDL2=ON -DENABLE_OPENGL=OFF -DENABLE_GLES2=ON
          make -j2

      - name: Test (headless)
        run: |
          cd bin/Linux
          ./AutomatedTest null

      - name: Test (Xvfb)
        run: |
          cd bin/Linux
          LIBGL_ALWAYS_SOFTWARE=true xvfb-run ./AutomatedTest ogles2

  mingw:
    name: "MinGW ${{matrix.config.variant}}${{matrix.config.extras}}"
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        config:
          - {variant: win32, arch: i686}
          - {variant: win64, arch: x86_64}
          - {variant: win32, arch: i686, extras: "-sdl"}
          - {variant: win64, arch: x86_64, extras: "-sdl"}
    steps:
      - uses: actions/checkout@v4
      - name: Install compiler
        run: |
          sudo apt-get update && sudo apt-get install cmake -qyy
          ./scripts/ci-get-mingw.sh

      - name: Build
        run: |
          ./scripts/ci-build-mingw.sh package
        env:
          CC: ${{matrix.config.arch}}-w64-mingw32-clang
          CXX: ${{matrix.config.arch}}-w64-mingw32-clang++
          extras: ${{matrix.config.extras}}

      - uses: actions/upload-artifact@v4
        with:
          name: irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}
          path: ./irrlicht-${{matrix.config.variant}}${{matrix.config.extras}}.zip

  macos:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          brew update --auto-update
          brew install cmake libpng jpeg
        env:
          HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
          HOMEBREW_NO_INSTALL_CLEANUP: 1

      - name: Build
        run: |
          cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1
          make -j3

      - name: Test (headless)
        run: |
          ./bin/OSX/AutomatedTest null

  macos-sdl:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install deps
        run: |
          brew update --auto-update
          brew install cmake libpng jpeg sdl2
        env:
          HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
          HOMEBREW_NO_INSTALL_CLEANUP: 1

      - name: Build
        run: |
          cmake . -DCMAKE_FIND_FRAMEWORK=LAST -DBUILD_EXAMPLES=1 -DUSE_SDL2=1
          make -j3

  msvc:
    name: VS 2019 ${{ matrix.config.arch }} ${{ matrix.sdl.label }}
    runs-on: windows-2019
    env:
      VCPKG_VERSION: 8eb57355a4ffb410a2e94c07b4dca2dffbee8e50
      # 2023.10.19
      vcpkg_packages: zlib libpng libjpeg-turbo
    strategy:
      fail-fast: false
      matrix:
        config:
          -
            arch: x86
            generator: "-G'Visual Studio 16 2019' -A Win32"
            vcpkg_triplet: x86-windows
          -
            arch: x64
            generator: "-G'Visual Studio 16 2019' -A x64"
            vcpkg_triplet: x64-windows
        sdl:
          -
            use: FALSE
            label: '(no SDL)'
            vcpkg_packages: opengl-registry
          -
            use: TRUE
            label: '(with SDL)'
            vcpkg_packages: sdl2

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Restore from cache and run vcpkg
        uses: lukka/run-vcpkg@v7
        with:
          vcpkgArguments: ${{env.vcpkg_packages}} ${{matrix.sdl.vcpkg_packages}}
          vcpkgDirectory: '${{ github.workspace }}\vcpkg'
          appendedCacheKey: ${{ matrix.config.vcpkg_triplet }}
          vcpkgGitCommitId: ${{ env.VCPKG_VERSION }}
          vcpkgTriplet: ${{ matrix.config.vcpkg_triplet }}

      - name: CMake
        run: |
            cmake ${{matrix.config.generator}}  `
            -DUSE_SDL2=${{matrix.sdl.use}}  `
            -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}\vcpkg\scripts\buildsystems\vcpkg.cmake"  `
            -DCMAKE_BUILD_TYPE=Release .

      - name: Build
        run: cmake --build . --config Release

      - name: Create artifact folder
        run: |
          mkdir artifact/
          mkdir artifact/lib/

      - name: Move dlls into artifact folder
        run: move bin\Win32-VisualStudio\Release\* artifact\lib\

      - name: Move includes into artifact folder
        run: move include artifact/

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: msvc-${{ matrix.config.arch }}-${{matrix.sdl.use}}
          path: artifact/

  android:
    name: Android ${{ matrix.arch }}
    runs-on: ubuntu-20.04
    env:
       ndk_version: "r25c"
       ANDROID_NDK: ${{ github.workspace }}/android-ndk
    strategy:
      matrix:
        arch: [armeabi-v7a, arm64-v8a, x86, x86_64]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install deps
        run: |
          sudo rm /var/lib/man-db/auto-update
          sudo apt-get update
          sudo apt-get install -qyy wget unzip zip gcc-multilib make cmake

      - name: Cache NDK
        id: cache-ndk
        uses: actions/cache@v4
        with:
          key: android-ndk-${{ env.ndk_version }}-linux
          path: ${{ env.ANDROID_NDK }}

      - name: Install NDK
        run: |
          wget --progress=bar:force "http://dl.google.com/android/repository/android-ndk-${ndk_version}-linux.zip"
          unzip -q "android-ndk-${ndk_version}-linux.zip"
          rm "android-ndk-${ndk_version}-linux.zip"
          mv "android-ndk-${ndk_version}" "${ANDROID_NDK}"
        if: ${{ steps.cache-ndk.outputs.cache-hit != 'true' }}

      - name: Build
        run: ./scripts/ci-build-android.sh ${{ matrix.arch }}

      #- name: Upload Artifact
      #  uses: actions/upload-artifact@v4
      #  with:
      #    name: irrlicht-android-${{ matrix.arch }}
      #    path: ${{ runner.temp }}/pkg/${{ matrix.arch }}
