
version: '{build}'

image: Visual Studio 2015

environment:
  QTDIR: C:\Qt\5.10.0\msvc2015_64
  LLVMLIBS: https://drive.google.com/uc?export=download&id=0B8A6NaxhQAGRY2k3Q2Yya05lcm8
  VULKAN: https://drive.google.com/uc?export=download&id=1A2eOMmCO714i0U7J0qI4aEMKnuWl8l_R
  COMPATDB: https://rpcs3.net/compatibility?api=v1&export

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

install:
- ps: | # set env vars for versioning
    $commDate = $env:APPVEYOR_REPO_COMMIT_TIMESTAMP.Substring(0,10)
    $commSha = $env:APPVEYOR_REPO_COMMIT.Substring(0,8)
    $commTag = $(git describe --tags $(git rev-list --tags --max-count=1))
    
    $env:AVVER = "{0}-{1}" -f $commTag.TrimStart("v"), $env:APPVEYOR_BUILD_NUMBER
    $env:BUILD = "rpcs3-{0}-{1}-{2}_win64.7z" -f $commTag, $commDate, $commSha

- 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/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 -encoding ASCII "$($env:BUILD).sha256"
    (Get-FileHash openssl_win64.7z -Algorithm SHA256).Hash | Out-File -encoding ASCII "openssl_win64.7z.sha256"

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
