# Copyright (c) 2015, Google Inc.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

vars = {
  'chromium_git': 'https://chromium.googlesource.com',

  'checkout_clang': False,
  'checkout_fuzzer': False,
  'checkout_sde': False,
  'checkout_nasm': False,
  'checkout_libcxx': False,
  'vs_version': '2019',

  # Run the following command to see the latest builds in CIPD:
  #  cipd describe PACKAGE_NAME -version latest

  # infra/3pp/tools/cmake/linux-amd64
  'cmake_version': 'version:2@3.28.1.chromium.8',
  # infra/3pp/tools/go/linux-amd64
  'go_version': 'version:2@1.21.5',
  # infra/3pp/tools/perl/windows-amd64
  'perl_version': 'version:2@5.32.1.1',

  # Update the following from
  # https://chromium.googlesource.com/chromium/src/+/main/DEPS
  'android_sdk_platform-tools_version': 'HWVsGs2HCKgSVv41FsOcsfJbNcB0UFiNrF6Tc4yRArYC',
  'libfuzzer_revision': '758bd21f103a501b362b1ca46fa8fcb692eaa303',
  'libcxx_revision': 'd0429f0628dd5c2c83a197012b2153b979aff674',
  'libcxxabi_revision': '8806fb8bb26e20206241ea2dfcee4fd2d4157b83',
  'ninja_version': 'version:2@1.11.1.chromium.6',

  # The Android NDK cannot be updated on CI for two reasons:
  #
  # Until https://crbug.com/boringssl/454 is fixed, we rely on an older NDK to
  # test building without NEON instructions as the baseline.
  #
  # Until https://crbug.com/boringssl/653 is fixed, we cannot update past
  # Chromium's version:2@r25c.cr0 package. Chromium has since switched building
  # minimal CIPD packages which do not contain all the NDK files we need. We'll
  # probably need to make our own NDK package.
  'android_ndk_revision': '310956bd122ec2b96049f8d7398de6b717f3452e',
}

deps = {
  'boringssl/util/bot/android_ndk': {
    'url': Var('chromium_git') + '/android_ndk.git' + '@' + Var('android_ndk_revision'),
    'condition': 'checkout_android',
  },

  'boringssl/util/bot/android_sdk/public': {
    'packages': [{
      'package': 'chromium/third_party/android_sdk/public/platform-tools',
      'version': Var('android_sdk_platform-tools_version'),
    }],
    'condition': 'checkout_android',
    'dep_type': 'cipd',
  },

  'boringssl/util/bot/cmake': {
    'packages': [{
      'package': 'infra/3pp/tools/cmake/${{platform}}',
      'version': Var('cmake_version'),
    }],
    'dep_type': 'cipd',
  },

  'boringssl/util/bot/golang': {
    'packages': [{
      'package': 'infra/3pp/tools/go/${{platform}}',
      'version': Var('go_version'),
    }],
    'dep_type': 'cipd',
  },

  'boringssl/util/bot/perl-win32': {
    'packages': [{
      'package': 'infra/3pp/tools/perl/${{platform}}',
      'version': Var('perl_version'),
    }],
    'condition': 'host_os == "win"',
    'dep_type': 'cipd',
  },

  'boringssl/util/bot/libFuzzer': {
    'url': Var('chromium_git') + '/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git' +'@' + Var('libfuzzer_revision'),
    'condition': 'checkout_fuzzer',
  },

  'boringssl/util/bot/libcxx': {
    'url': Var('chromium_git') + '/external/github.com/llvm/llvm-project/libcxx.git' + '@' + Var('libcxx_revision'),
    'condition': 'checkout_libcxx',
  },
  'boringssl/util/bot/libcxxabi': {
    'url': Var('chromium_git') + '/external/github.com/llvm/llvm-project/libcxxabi.git' + '@' + Var('libcxxabi_revision'),
    'condition': 'checkout_libcxx',
  },

  'boringssl/util/bot/ninja': {
    'packages': [{
      'package': 'infra/3pp/tools/ninja/${{platform}}',
      'version': Var('ninja_version'),
    }],
    'dep_type': 'cipd',
  }
}

recursedeps = [
  # android_tools pulls in the NDK from a separate repository.
  'boringssl/util/bot/android_tools',
]

hooks = [
  {
    'name': 'nasm_win32',
    'pattern': '.',
    'condition': 'host_os == "win" and checkout_nasm',
    'action': [ 'download_from_google_storage',
                '--no_resume',
                '--platform=win32',
                '--no_auth',
                '--bucket', 'chromium-tools',
                '-s', 'boringssl/util/bot/nasm-win32.exe.sha1',
    ],
  },
  {
    'name': 'win_toolchain',
    'pattern': '.',
    'condition': 'host_os == "win"',
    'action': [ 'python3',
                'boringssl/util/bot/vs_toolchain.py',
                'update',
                Var('vs_version'),
    ],
  },
  {
    'name': 'clang',
    'pattern': '.',
    'condition': 'checkout_clang',
    'action': [ 'python3',
                'boringssl/util/bot/update_clang.py',
    ],
  },
  {
    'name': 'sde_linux64',
    'pattern': '.',
    'condition': 'checkout_sde and host_os == "linux"',
    'action': [ 'download_from_google_storage',
                '--no_resume',
                '--bucket', 'chrome-boringssl-sde',
                '-s', 'boringssl/util/bot/sde-linux64.tar.xz.sha1'
    ],
  },
  {
    'name': 'sde_linux64_extract',
    'pattern': '.',
    'condition': 'checkout_sde and host_os == "linux"',
    'action': [ 'python3',
                'boringssl/util/bot/extract.py',
                'boringssl/util/bot/sde-linux64.tar.xz',
                'boringssl/util/bot/sde-linux64/',
    ],
  },
  {
    'name': 'sde_win32',
    'pattern': '.',
    'condition': 'checkout_sde and host_os == "win"',
    'action': [ 'download_from_google_storage',
                '--no_resume',
                '--bucket', 'chrome-boringssl-sde',
                '-s', 'boringssl/util/bot/sde-win32.tar.xz.sha1'
    ],
  },
  {
    'name': 'sde_win32_extract',
    'pattern': '.',
    'condition': 'checkout_sde and host_os == "win"',
    'action': [ 'python3',
                'boringssl/util/bot/extract.py',
                'boringssl/util/bot/sde-win32.tar.xz',
                'boringssl/util/bot/sde-win32/',
    ],
  },
]
