version: '{build}'

image: Visual Studio 2015

environment:
  QTDIR: C:\Qt\5.10\msvc2015_64
  LLVMLIBS: https://github.com/RPCS3/llvm/releases/download/continuous-release_60/llvmlibs.7z
  VULKAN: https://drive.google.com/uc?export=download&id=1A2eOMmCO714i0U7J0qI4aEMKnuWl8l_R
  COMPATDB: https://rpcs3.net/compatibility?api=v1&export

cache:
- vulkan.7z -> appveyor.yml
- compat_database.dat

install:
- ps: | # set env vars for versioning
    $env:COMM_TAG = $(git describe --tags $(git rev-list --tags --max-count=1))
    $env:COMM_COUNT = $(git rev-list --count HEAD)
    $env:COMM_HASH = $env:APPVEYOR_REPO_COMMIT.Substring(0,8)

    if ($env:APPVEYOR_PULL_REQUEST_NUMBER) {
        $env:BUILD = "rpcs3-{0}-{1}_win64.7z" -f $env:COMM_TAG, $env:COMM_HASH
        $env:AVVER = "{0}-{1}" -f $env:COMM_TAG.TrimStart("v"), $env:COMM_HASH
    }
    else {
        $env:BUILD = "rpcs3-{0}-{1}-{2}_win64.7z" -f $env:COMM_TAG, $env:COMM_COUNT, $env:COMM_HASH
        $env:AVVER = "{0}-{1}" -f $env:COMM_TAG.TrimStart("v"), $env:COMM_COUNT
    }

- ps: | # used for experimental build warnings for pr builds
    $env:BRANCH = "{0}/{1}/#{2}" -f $env:APPVEYOR_REPO_NAME, `
      $env:APPVEYOR_REPO_BRANCH, $env:APPVEYOR_PULL_REQUEST_NUMBER
    $env:BRANCH = $env:BRANCH -replace "/#$"

- ps: | # misc global settings
    $env:PATH += $env:QTDIR
    [net.servicepointmanager]::securityprotocol = "tls12, tls11, tls"

- ps: | # update and init submodules
    git submodule -q update --init `
      3rdparty/cereal `
      3rdparty/ffmpeg `
      3rdparty/GSL `
      3rdparty/hidapi `
      3rdparty/libpng `
      3rdparty/Optional `
      3rdparty/pugixml `
      3rdparty/xxHash `
      3rdparty/zlib `
      asmjit `
      Utilities/yaml-cpp `
      Vulkan/glslang `
      Vulkan/Vulkan-LoaderAndValidationLayers

platform: x64

configuration: Release - LLVM

build:
  parallel: true
  project: rpcs3.sln
  verbosity: normal

before_build:
- ps: | # fetch precompiled build dependencies
    if (!(test-path llvmlibs.7z)) { irm $env:LLVMLIBS -outfile llvmlibs.7z }
    if (!(test-path vulkan.7z)) { irm $env:VULKAN -outfile vulkan.7z }
    7z x llvmlibs.7z -aos -o"." | out-null
    7z x vulkan.7z -aos -o".\lib\$env:CONFIGURATION-$env:PLATFORM" | out-null

after_build:
- ps: | # remove unnecessary files
    rm .\bin\rpcs3.exp, .\bin\rpcs3.lib, .\bin\rpcs3.pdb

- ps: | # prepare compatibility database for packaging
    $db = irm $env:COMPATDB -erroraction silentlycontinue
    if ($db -and $db.return_code -eq 0) {
      $db | convertto-json -compress | out-file compat_database.dat -encoding utf8
    }
    copy-item compat_database.dat .\bin\GuiConfigs\compat_database.dat

- ps: | # package artifacts
    7z a -m0=LZMA2 -mx9 $env:BUILD .\bin\*
    7z a -m0=LZMA2 -mx9 openssl_win64.7z C:\OpenSSL-Win64\bin\libeay32.dll `
      C:\OpenSSL-Win64\bin\ssleay32.dll

- ps: | # generate sha256 hashes
    (get-filehash $env:BUILD -algorithm SHA256).Hash | out-file ("{0}.sha256" -f $env:BUILD) -encoding ascii
    (get-filehash openssl_win64.7z -algorithm SHA256).Hash | out-file "openssl_win64.7z.sha256" -encoding ascii

test: off

artifacts:
- path: $(BUILD)
  name: rpcs3
- path: $(BUILD).sha256
  name: rpcs3 sha256 hash
- path: openssl_win64.7z
  name: openssl
- path: openssl_win64.7z.sha256
  name: openssl sha256 hash

on_finish:
- ps: | # update appveyor build version, done last to prevent webhook breakage
    update-appveyorbuild -version $env:AVVER