name: Hydra Core Build

on:
  push:
    branches:
      - master
  pull_request:

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  Windows:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v4
    - name: Fetch submodules
      run: git submodule update --init --recursive

    - name: Setup Vulkan SDK
      uses: humbletim/setup-vulkan-sdk@main
      with:
        vulkan-query-version: 1.3.296.0
        vulkan-use-cache: true
        vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_HYDRA_CORE=ON

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
    
    - name: Upload Hydra core
      uses: actions/upload-artifact@v4
      with:
        name: Windows Hydra core
        path: '${{github.workspace}}/build/${{ env.BUILD_TYPE }}/Alber.dll'

    - name: Configure CMake (Again)
      run: |
        rm -r -fo ${{github.workspace}}/build 
        cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON

    - name: Build (Again)
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Upload Libretro core
      uses: actions/upload-artifact@v4
      with:
        name: Windows Libretro core
        path: |
          ${{github.workspace}}/build/${{ env.BUILD_TYPE }}/panda3ds_libretro.dll
          ${{github.workspace}}/docs/libretro/panda3ds_libretro.info

  MacOS:
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v4
    - name: Fetch submodules
      run: git submodule update --init --recursive

    - name: Setup Vulkan SDK
      uses: humbletim/setup-vulkan-sdk@main
      with:
        vulkan-query-version: 1.3.296.0
        vulkan-use-cache: true
        vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_HYDRA_CORE=ON -DCMAKE_OSX_ARCHITECTURE=x86_64

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
    
    - name: Upload core
      uses: actions/upload-artifact@v4
      with:
        name: MacOS Hydra core
        path: '${{github.workspace}}/build/libAlber.dylib'

    - name: Configure CMake (Again)
      run: |
        rm -rf ${{github.workspace}}/build
        cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON -DCMAKE_OSX_ARCHITECTURE=x86_64

    - name: Build (Again)
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} && ls -R ${{github.workspace}}/build

    - name: Upload Libretro core
      uses: actions/upload-artifact@v4
      with:
        name: MacOS Libretro core
        path: |
          ${{github.workspace}}/build/panda3ds_libretro.dylib
          ${{github.workspace}}/docs/libretro/panda3ds_libretro.info

  Linux:
    runs-on: ubuntu-24.04

    steps:
    - uses: actions/checkout@v4
    - name: Fetch submodules
      run: git submodule update --init --recursive

    - name: Install misc packages
      run: |
       sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev
      
    - name: Install newer Clang
      run: |
       wget https://apt.llvm.org/llvm.sh
       chmod +x ./llvm.sh
       sudo ./llvm.sh 17
       
    - name: Setup Vulkan SDK
      uses: humbletim/setup-vulkan-sdk@main
      with:
        vulkan-query-version: 1.3.296.0
        vulkan-use-cache: true
        vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DBUILD_HYDRA_CORE=ON

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
    
    - name: Upload core
      uses: actions/upload-artifact@v4
      with:
        name: Linux Hydra core
        path: '${{github.workspace}}/build/libAlber.so'

    - name: Configure CMake (Again)
      run: |
        rm -rf ${{github.workspace}}/build
        cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON

    - name: Build (Again)
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Upload Libretro core
      uses: actions/upload-artifact@v4
      with:
        name: Linux Libretro core
        path: |
          ${{github.workspace}}/build/panda3ds_libretro.so
          ${{github.workspace}}/docs/libretro/panda3ds_libretro.info

  Android-x64:
    runs-on: ubuntu-24.04

    steps:
    - uses: actions/checkout@v4
    - name: Fetch submodules
      run: git submodule update --init --recursive

    - name: Install misc packages
      run: |
       sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev
       
    - name: Setup Vulkan SDK
      uses: humbletim/setup-vulkan-sdk@main
      with:
        vulkan-query-version: 1.3.296.0
        vulkan-use-cache: true
        vulkan-components: Vulkan-Headers, Vulkan-Loader, SPIRV-Tools, Glslang

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=x86_64 -DBUILD_HYDRA_CORE=1 -DENABLE_VULKAN=0

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
    
    - name: Upload core
      uses: actions/upload-artifact@v4
      with:
        name: Android Hydra core
        path: '${{github.workspace}}/build/libAlber.so'

  ARM-Libretro:
    runs-on: ubuntu-24.04-arm

    steps:
    - uses: actions/checkout@v4
    - name: Fetch submodules
      run: git submodule update --init --recursive

    - name: Install misc packages
      run: |
       sudo apt-get update && sudo apt install libx11-dev libxext-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev
      
    - name: Install newer Clang
      run: |
       wget https://apt.llvm.org/llvm.sh
       chmod +x ./llvm.sh
       sudo ./llvm.sh 17

    - name: Configure CMake
      run: |
        cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-17 -DCMAKE_CXX_COMPILER=clang++-17 -DENABLE_USER_BUILD=ON -DBUILD_LIBRETRO_CORE=ON -DENABLE_VULKAN=OFF -DCRYPTOPP_OPT_DISABLE_ASM=ON

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Upload Libretro core
      uses: actions/upload-artifact@v4
      with:
        name: Linux arm64 Libretro core
        path: |
          ${{github.workspace}}/build/panda3ds_libretro.so
          ${{github.workspace}}/docs/libretro/panda3ds_libretro.info