trigger:
- master

pr:
- master

jobs:
- job: macOS
  pool:
    vmImage: 'macOS-10.14'
    
  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
    
  - script: |
      cmake --version
    displayName: 'CMake version'

  - script: |
      sudo xcode-select --switch /Applications/Xcode_11.3.1.app/Contents/Developer
    displayName: 'Select XCode 11.3.1'
    
  - script: |
      mkdir buildmacOS
      cd buildmacOS
      cmake .. -GXcode
    displayName: 'Generate macOS solution'
      
  - task: Xcode@5
    inputs:
      xcWorkspacePath: 'buildmacOS/BabylonNative.xcodeproj'
      scheme: 'Playground'
      sdk: 'macosx'
      useXcpretty: false
      configuration: Release
    displayName: 'Build macOS'
    
- job: iOS
  pool:
    vmImage: 'macOS-10.14'
    
  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
      
  - script: |
      cmake --version
    displayName: 'CMake version'

  - script: |
      sudo xcode-select --switch /Applications/Xcode_11.3.1.app/Contents/Developer
    displayName: 'Select XCode 11.3.1'

  - script: |
      mkdir buildiOS
      cd buildiOS
      cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../Dependencies/ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64COMBINED -DENABLE_ARC=0 -DDEPLOYMENT_TARGET=12 -DENABLE_GLSLANG_BINARIES=OFF -DSPIRV_CROSS_CLI=OFF
    displayName: 'Generate iOS solution'

  - task: Xcode@5
    inputs:
      xcWorkspacePath: 'buildiOS/BabylonNative.xcodeproj'
      scheme: 'Playground'
      sdk: 'iphoneos'
      useXcpretty: false
      configuration: Release
    displayName: 'Build iOS'
    
- job: win32_x64
  timeoutInMinutes: 20
  pool:
    vmImage: 'windows-latest'

  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'

  - script: |
      mkdir buildWin32_x64
      cd buildWin32_x64
      cmake -G "Visual Studio 16 2019" -A x64 ..
    displayName: 'Generate Win32_x64 solution'
    
  - task: MSBuild@1
    inputs:
      solution: 'buildWin32_x64/BabylonNative.sln'
      maximumCpuCount: true
      configuration: 'Release'
    displayName: 'Build WIN32_x64'
  - script: |
      cd buildWin32_x64\Apps\ValidationTests
      mkdir Results
      mkdir Errors
      cd Release
      ValidationTests
    displayName: 'Validation Tests'
  - task: PublishBuildArtifacts@1
    inputs:
      artifactName: 'Win32_x64 Rendered Pictures'
      pathtoPublish: 'buildWin32_x64/Apps/ValidationTests/Results'
    displayName: 'Publish Tests Win32_x64 Results'
    
- job: win32_x86
  timeoutInMinutes: 20 
  pool:
    vmImage: 'windows-latest'

  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'

  - script: |
      mkdir buildWin32_x86
      cd buildWin32_x86
      cmake .. -G "Visual Studio 16 2019" -A Win32
    displayName: 'Generate Win32_x86 solution'
    
  - task: MSBuild@1
    inputs:
      solution: 'buildWin32_x86/BabylonNative.sln'
      maximumCpuCount: true
      configuration: 'Release'
    displayName: 'Build WIN32_x86'
  - script: |
      cd buildWin32_x86\Apps\ValidationTests
      mkdir Results
      mkdir Errors
      cd Release
      ValidationTests
    displayName: 'Validation Tests'
  - task: PublishBuildArtifacts@1
    inputs:
      artifactName: 'Win32_x86 Rendered Pictures'
      pathtoPublish: 'buildWin32_x86/Apps/ValidationTests/Results'
    displayName: 'Publish Tests Win32_x86 Results'
    
- job: uwp_x64    
  pool:
    vmImage: 'windows-latest'  
    
  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
    
  - script: |
      mkdir buildUWP_x64
      cd buildUWP_x64
      cmake .. -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -A x64
    displayName: 'Generate UWP_x64 solution'
  
  - task: VSBuild@1
    inputs:
      solution: 'buildUWP_x64/BabylonNative.sln'
      maximumCpuCount: true
      configuration: 'Release'
      msbuildArgs: '/p:AppxPackageSigningEnabled=false'
    displayName: 'Build UWP_x64'

- job: uwp_arm64    
  pool:
    vmImage: 'windows-latest'  
    
  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
    
  - script: |
      mkdir buildUWP_arm64
      cd buildUWP_arm64
      cmake .. -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -A arm64
    displayName: 'Generate UWP_arm64 solution'
  
  - task: VSBuild@1
    inputs:
      solution: 'buildUWP_arm64/BabylonNative.sln'
      maximumCpuCount: true
      configuration: 'Release'
      msbuildArgs: '/p:AppxPackageSigningEnabled=false'
    displayName: 'Build UWP_arm64'

- job: uwp_x86
  pool:
    vmImage: 'windows-latest'  

  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'

  - script: |
      mkdir buildUWP_x86
      cd buildUWP_x86
      cmake .. -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -G "Visual Studio 16 2019" -A Win32
    displayName: 'Generate UWP_x86 solution'

  - task: VSBuild@1
    inputs:
      solution: 'buildUWP_x86/BabylonNative.sln'
      maximumCpuCount: true
      configuration: 'Release'
      msbuildArgs: '/p:AppxPackageSigningEnabled=false'
    displayName: 'Build UWP_x86'

- job: Android_V8
  pool:
    vmImage: 'macOS-10.14'
    
  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
  - script: |
      brew install ninja
    displayName: 'Install Ninja'
  - script: |
      cd Apps/Playground/Android
      npm install
    displayName: 'Install JS engine NPMs'    
  - task: Gradle@2
    inputs:
        workingDirectory: 'Apps/Playground/Android'
        gradleWrapperFile: 'Apps/Playground/Android/gradlew'
        gradleOptions: '-Xmx1536m'
        options: '-PJSEngine=v8android'
        publishJUnitResults: false
        tasks: 'assembleRelease'
    displayName: 'Build androidV8'

- job: Android_JSC
  pool:
    vmImage: 'macOS-10.14'
    
  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
  - script: |
      brew install ninja
    displayName: 'Install Ninja'
  - script: |
      cd Apps/Playground/Android
      npm install
    displayName: 'Install JS engine NPMs'    
  - task: Gradle@2
    inputs:
        workingDirectory: 'Apps/Playground/Android'
        gradleWrapperFile: 'Apps/Playground/Android/gradlew'
        gradleOptions: '-Xmx1536m'
        options: '-PJSEngine=jsc'
        publishJUnitResults: false
        tasks: 'assembleRelease'
    displayName: 'Build androidJSC'

- job: Ubuntu_Clang8_JSC
  timeoutInMinutes: 20
  pool:
    vmImage: 'ubuntu-latest'

  variables:
    CC: clang-8
    CXX: clang++-8

  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
  - script: |
      sudo apt-get update
      sudo apt-get install libjavascriptcoregtk-4.0-dev libgl1-mesa-dev libcurl4-openssl-dev clang-8 libc++-8-dev libc++abi-8-dev lld-8 ninja-build
    displayName: 'Install packages'
  - script: |
      mkdir build
      cd build
      cmake .. -GNinja -DJSCORE_LIBRARY=/usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so
      ninja
    displayName: 'Build X11'
  - script: |
      export DISPLAY=:99
      Xvfb :99 -screen 0 1600x900x24 &
      sleep 3
      cd build/Apps/ValidationTests
      mkdir Errors
      mkdir Results
      ./ValidationTests
    displayName: 'Test on CI'
  - task: PublishBuildArtifacts@1
    inputs:
      artifactName: 'Ubuntu_Clang8_JSC Rendered Pictures'
      pathtoPublish: 'build/Apps/ValidationTests/Results'
    displayName: 'Publish Tests Ubuntu_Clang8_JSC Results'
    
- job: Ubuntu_GCC9_JSC
  timeoutInMinutes: 20
  pool:
    vmImage: 'ubuntu-latest'

  variables:
    CC: gcc-9
    CXX: g++-9

  steps:
  - script: |
      git submodule update --init --recursive
    displayName: 'Checkout dependencies'
  - script: |
      sudo apt-get update
      sudo apt-get install libjavascriptcoregtk-4.0-dev libgl1-mesa-dev libcurl4-openssl-dev gcc-9 libc++-9-dev libc++abi-9-dev lld-9 ninja-build
    displayName: 'Install packages'
  - script: |
      mkdir build
      cd build
      cmake .. -GNinja -DJSCORE_LIBRARY=/usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so
      ninja
    displayName: 'Build X11'
  - script: |
      export DISPLAY=:99
      Xvfb :99 -screen 0 1600x900x24 &
      sleep 3
      cd build/Apps/ValidationTests
      mkdir Errors
      mkdir Results
      ./ValidationTests
    displayName: 'Test on CI'
  - task: PublishBuildArtifacts@1
    inputs:
      artifactName: 'Ubuntu_GCC9_JSC Rendered Pictures'
      pathtoPublish: 'build/Apps/ValidationTests/Results'
    displayName: 'Publish Tests Ubuntu_GCC9_JSC Results'