parameters:
  os: 'Linux'
  arch: 'x86_64'
  toolchain: 'gcc'
  coverage: 'OFF'
  download_cache_path: ''
  ccache_version: 1 # Increment this number if CI has trouble with ccache.
  serenity_ccache_path: ''
  serenity_ccache_size: '5G'
  toolchain_ccache_path: ''
  toolchain_ccache_size: $(CCACHE_MAXSIZE)
  with_remote_data_caches: true

steps:
  - script: |
      echo "##vso[task.setvariable variable=timestamp]$(date -u +"%Y%m%d%H%M_%S")"
    displayName: 'Stamps'

  - ${{ if ne(parameters.arch, 'Lagom') }}:
    - ${{ if eq(parameters.toolchain, 'clang') }}:
      - task: Cache@2
        inputs:
          key: '"toolchain" | "x86_64" | Toolchain/BuildClang.sh | Toolchain/Patches/llvm/*.patch | Toolchain/CMake/*.cmake | Userland/Libraries/LibC/**/*.h'
          path: $(Build.SourcesDirectory)/Toolchain/Cache
        displayName: 'Toolchain Prebuilt Cache'
    - ${{ if eq(parameters.toolchain, 'gcc') }}:
      - task: Cache@2
        inputs:
          key: '"toolchain" | "${{ parameters.arch }}" | Toolchain/BuildGNU.sh | Toolchain/Patches/binutils/*.patch | Toolchain/Patches/gcc/*.patch | Userland/Libraries/LibC/**/*.h'
          path: $(Build.SourcesDirectory)/Toolchain/Cache
        displayName: 'Toolchain Prebuilt Cache'

    - ${{ if ne(parameters.toolchain_ccache_path, '') }}:
      - task: Cache@2
        inputs:
          key: '"toolchain ccache" | "x86_64" | "${{ parameters.toolchain }}" | "${{ parameters.ccache_version }}" | "$(timestamp)"'
          restoreKeys: |
            "toolchain ccache" | "x86_64" | "${{ parameters.toolchain }}" | "${{ parameters.ccache_version }}"
          path: ${{ parameters.toolchain_ccache_path }}
        displayName: 'Toolchain Compiler Cache'

      - script: |
          CCACHE_DIR=${{ parameters.toolchain_ccache_path }} ccache -M ${{ parameters.toolchain_ccache_size }}
          CCACHE_DIR=${{ parameters.toolchain_ccache_path }} ccache -s
        displayName: 'Configure Toolchain ccache'

  - ${{ if ne(parameters.serenity_ccache_path, '') }}:
    - task: Cache@2
      inputs:
        key: '"ccache" | "${{ parameters.os }}" | "${{ parameters.arch }}" | "${{ parameters.toolchain }}" | "${{ parameters.coverage }}" | "${{ parameters.ccache_version }}" | "$(timestamp)"'
        restoreKeys: |
          "ccache" | "${{ parameters.os }}" | "${{ parameters.arch }}" | "${{ parameters.toolchain }}" | "${{ parameters.coverage }}" | "${{ parameters.ccache_version }}"
        path: ${{ parameters.serenity_ccache_path }}
      displayName: 'Serenity Compiler Cache'

    - script: |
        CCACHE_DIR=${{ parameters.serenity_ccache_path }} ccache -M ${{ parameters.serenity_ccache_size }}
        CCACHE_DIR=${{ parameters.serenity_ccache_path }} ccache -s
      displayName: 'Configure Serenity ccache'

  - ${{ if eq(parameters.with_remote_data_caches, true) }}:
    - task: Cache@2
      inputs:
        key: '"time_zone_data" | Meta/CMake/time_zone_data.cmake | "$(timestamp)"'
        restoreKeys: |
            "time_zone_data" | Meta/CMake/time_zone_data.cmake
        path: $(Build.SourcesDirectory)/${{ parameters.download_cache_path }}/TZDB
      displayName: 'TimeZoneData Cache'

    - task: Cache@2
      inputs:
        key: '"unicode_data" | Meta/CMake/unicode_data.cmake | "$(timestamp)"'
        restoreKeys: |
            "unicode_data" | Meta/CMake/unicode_data.cmake
        path: $(Build.SourcesDirectory)/${{ parameters.download_cache_path }}/UCD
      displayName: 'UnicodeData Cache'

    - task: Cache@2
      inputs:
        key: '"unicode_locale" | Meta/CMake/locale_data.cmake | "$(timestamp)"'
        restoreKeys: |
            "unicode_locale" | Meta/CMake/locale_data.cmake
        path: $(Build.SourcesDirectory)/${{ parameters.download_cache_path }}/CLDR
      displayName: 'UnicodeLocale Cache'
