name: Windows Build Steps - Qt

on:
  workflow_call:
    inputs:
      jobName:
        required: true
        type: string
      os:
        required: false
        type: string
        default: windows-2022
      platform:
        required: false
        type: string
        default: x64
      configuration:
        required: true
        type: string
      simd:
        required: false
        type: string
        default: AVX2
      buildSystem:
        required: false
        type: string
        default: msbuild
      qt_binary_url:
        required: false
        type: string
        default: https://github.com/PCSX2/pcsx2-windows-dependencies/releases/download/2022-11-20/qt-6.4.0-x64.7z
      qt_dir:
        required: false
        type: string
        default: 3rdparty\qt\6.4.0\msvc2022_64
      cheats_url:
        required: false
        type: string
        default: https://github.com/PCSX2/pcsx2_patches/releases/latest/download

jobs:
  build_windows_qt:
    name: ${{ inputs.jobName }}
    runs-on: ${{ inputs.os }}
    # Set some sort of timeout in the event of run-away builds.  We are limited on concurrent jobs so, get rid of them.
    timeout-minutes: 60
    env:
      POWERSHELL_TELEMETRY_OPTOUT: 1

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Prepare Artifact Metadata
        id: artifact-metadata
        shell: bash
        env:
          OS: windows
          BUILD_SYSTEM: ${{ inputs.buildSystem }}
          GUI_FRAMEWORK: Qt
          ARCH: ${{ inputs.platform }}
          SIMD: ${{ inputs.simd }}
          EVENT_NAME: ${{ github.event_name }}
          PR_TITLE: ${{ github.event.pull_request.title }}
          PR_NUM: ${{ github.event.pull_request.number }}
          PR_SHA: ${{ github.event.pull_request.head.sha }}
        run: ./.github/workflows/scripts/common/name-artifacts.sh

      - name: Setup msbuild
        if: inputs.configuration != 'CMake'
        uses: microsoft/setup-msbuild@v1

      - name: Download Qt build files
        shell: cmd
        run: |
          cd 3rdparty\qt
          aria2c ${{ inputs.qt_binary_url }}
          7z x qt-*-x64.7z
          del qt-*-x64.7z

      - name: Download cheats
        shell: cmd
        run: |
          cd bin/resources
          aria2c -Z "${{ inputs.cheats_url }}/cheats_ni.zip" "${{ inputs.cheats_url }}/cheats_ws.zip"

      - name: Generate CMake
        if: inputs.configuration == 'CMake'
        id: cmake
        shell: cmd
        run: |
          call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          cmake . -B build "-DCMAKE_PREFIX_PATH=%cd%\${{ inputs.qt_dir }}" -DQT_BUILD=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DDISABLE_ADVANCE_SIMD=ON -G Ninja

      - name: Build PCSX2
        shell: cmd
        run: |
          if "${{ inputs.configuration }}"=="CMake" (
            call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
            cmake --build build --config Release || exit /b
            cmake --install build --config Release || exit /b
          ) else (
            msbuild "PCSX2_qt.sln" /m /v:m /p:Configuration="${{ inputs.configuration }}" /p:Platform="${{ inputs.platform }}"
          )

      - name: Run Tests
        if: inputs.configuration == 'CMake'
        shell: cmd
        run: |
          call "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
          cmake --build build --config Release --target unittests

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: ${{ steps.artifact-metadata.outputs.artifact-name }}
          path: |
            ./bin
            !./bin/**/*.bsc
            !./bin/**/*.exp
            !./bin/**/*.ilk
            !./bin/**/*.iobj
            !./bin/**/*.ipdb
            !./bin/**/*.pdb
            !./bin/**/*.lib

      - name: Upload artifact - with symbols
        uses: actions/upload-artifact@v3
        with:
          name: ${{ steps.artifact-metadata.outputs.artifact-name }}-symbols
          path: ./bin/**/*.pdb
