name: Test Builds on Windows

on: [push, pull_request, workflow_dispatch]

jobs:
  build-set-windows:
    runs-on: windows-2022

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

    - name: Setup glslangValidator
      shell: pwsh
      run: |
        choco install vulkan-sdk -y
        Write-Output "$([System.Environment]::GetEnvironmentVariable('VULKAN_SDK', 'Machine'))\Bin" `
          | Out-File -FilePath "${Env:GITHUB_PATH}" -Append

    - name: Setup Meson
      shell: pwsh
      run: pip install meson

    - name: Find Visual Studio
      shell: pwsh
      run: |
        $installationPath = Get-VSSetupInstance `
          | Select-VSSetupInstance -Require Microsoft.VisualStudio.Workload.NativeDesktop -Latest `
          | Select-Object -ExpandProperty InstallationPath
        Write-Output "VSDEVCMD=${installationPath}\Common7\Tools\VsDevCmd.bat" `
          | Out-File -FilePath "${Env:GITHUB_ENV}" -Append

    - name: Build MSVC x86
      shell: pwsh
      run: |
        & "${Env:COMSPEC}" /s /c "`"${Env:VSDEVCMD}`" -arch=x86 -host_arch=x64 -no_logo && set" `
          | % { , ($_ -Split '=', 2) } `
          | % { [System.Environment]::SetEnvironmentVariable($_[0], $_[1]) }
        meson --buildtype release --backend vs2022 build-msvc-x86
        msbuild -m build-msvc-x86/dxvk.sln

    - name: Build MSVC x64
      shell: pwsh
      run: |
        & "${Env:COMSPEC}" /s /c "`"${Env:VSDEVCMD}`" -arch=x64 -host_arch=x64 -no_logo && set" `
          | % { , ($_ -Split '=', 2) } `
          | % { [System.Environment]::SetEnvironmentVariable($_[0], $_[1]) }
        meson --buildtype release --backend vs2022 build-msvc-x64
        msbuild -m build-msvc-x64/dxvk.sln
