trigger:
  batch: true
  branches:
    include:
    - release/6.x
    - release/9.x

pr:
  branches:
    include:
    - release/6.x
    - release/9.x

variables:
- template: eng/common-variables.yml

stages:
- stage: build
  displayName: Build
  jobs:
  - template: /eng/common/templates/jobs/jobs.yml
    parameters:
      enablePublishBuildArtifacts: true
      enablePublishBuildAssets: true
      enablePublishUsingPipelines: true
      variables:
        - _BuildConfig: Release
      jobs:

      ############ LINUX BUILD ############
      - job: Build_Linux
        displayName: Linux
        timeoutInMinutes: 120
        strategy:
          matrix:
            x64:
              poolname: Hosted Ubuntu 1604
              assetManifestOS: linux
              assetManifestPlatform: x64
              imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-bfcd90a-20200121150017
              rootfs: 
              archflag: --arch x64
            arm64:
              poolname: Hosted Ubuntu 1604
              assetManifestOS: linux
              assetManifestPlatform: arm64
              imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-arm64-cfdd435-20200121150126
              rootfs: /crossrootfs/arm64
              archflag: --arch arm64
            arm:
              poolname: Hosted Ubuntu 1604
              assetManifestOS: linux
              assetManifestPlatform: arm
              imagename: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-cross-09ec757-20200320131433
              rootfs: /crossrootfs/arm
              archflag: --arch arm
        pool:
          name: $(poolname)
        container:
          image: $(imagename)
        steps:
        - bash: |
            set -ex
            git clean -ffdx
            git reset --hard HEAD
          displayName: 'Clean up working directory'

        - bash: |
            ./build.sh --ci --restore --build --pack $(archflag) --configuration $(_BuildConfig) $(_InternalBuildArgs)
          displayName: 'Build and package'
          env:
            ROOTFS_DIR: $(rootfs)

        - bash: |
            ./eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) --projects $(Build.SourcesDirectory)/llvm.proj
          displayName: Publish packages
          condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))

      ############ MACOS BUILD ############
      - job: Build_macOS
        displayName: macOS
        timeoutInMinutes: 120
        strategy:
          matrix:
            x64:
              poolname: Hosted macOS
              assetManifestOS: osx
              assetManifestPlatform: x64
        pool:
          name: $(poolname)
        steps:
        - bash: |
            set -ex
            git clean -ffdx
            git reset --hard HEAD
          displayName: 'Clean up working directory'

        - bash: |
            brew install autoconf automake libtool
          displayName: 'Prepare macOS dependencies'

        - bash: |
            ./build.sh --ci --restore --build --pack --configuration $(_BuildConfig) $(_InternalBuildArgs)
          displayName: 'Build and package'

        - bash: 
            ./eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) --projects $(Build.SourcesDirectory)/llvm.proj
          displayName: Publish packages
          condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))

      ############ MXE BUILD ############
      - job: Build_mxe
        displayName: mxe
        timeoutInMinutes: 120
        strategy:
          matrix:
            x64:
              poolname: Hosted macOS
              assetManifestOS: osx
              assetManifestPlatform: x64
        pool:
          name: $(poolname)
        steps:
        - bash: |
            set -exv
            git clean -ffdx
            git reset --hard HEAD
          displayName: 'Clean up working directory'

        - bash: |
            brew install autoconf automake libtool
            brew tap xamarin/xamarin-android-windeps
            brew install mingw-w64 xamarin/xamarin-android-windeps/mingw-zlib
          displayName: 'Prepare macOS dependencies'

        - bash: |
            MXE_PREFIX=`brew --prefix`
            sed -e "s,@MXE_PATH@,$MXE_PREFIX," < mxe-Win64.cmake.in > llvm/cmake/modules/mxe-Win64.cmake
            ./build.sh --ci --restore --build --pack --arch x64-mxe /p:MXE_PREFIX=$MXE_PREFIX -v:normal --configuration $(_BuildConfig) $(_InternalBuildArgs)
          displayName: 'Build and package'

        - bash:
            #./eng/common/build.sh --ci --restore --publish --configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) --projects $(Build.SourcesDirectory)/llvm.proj
          displayName: Publish packages
          condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))

      ############ WINDOWS BUILD ############
      - job: Build_Windows
        displayName: Windows
        timeoutInMinutes: 120
        strategy:
          matrix:
            x64:
              poolname: Hosted VS2017
              assetManifestOS: win
              assetManifestPlatform: x64
        pool:
          name: $(poolname)
        steps:
        - bash: |
            set -ex
            git clean -ffdx
            git reset --hard HEAD
          displayName: 'Clean up working directory'

        - powershell: eng\build.ps1 -ci -restore -build -pack -configuration $(_BuildConfig) $(_InternalBuildArgs)
          displayName: 'Build and package'

        - powershell: eng\common\build.ps1 -ci -restore -publish -configuration $(_BuildConfig) $(_InternalBuildArgs) /p:AssetManifestOS=$(assetManifestOS) /p:PlatformName=$(assetManifestPlatform) -projects $(Build.SourcesDirectory)\llvm.proj
          displayName: Publish packages
          condition: and(succeeded(), ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest'))

############ POST BUILD ARCADE LOGIC ############
- ${{ if and(ne(variables['System.TeamProject'], 'public'), ne(variables['Build.Reason'], 'PullRequest')) }}:
  - template: /eng/common/templates/post-build/post-build.yml
    parameters:
      enableSourceLinkValidation: false
      enableSigningValidation: false
      enableSymbolValidation: false
      enableNugetValidation: true