# Copyright 2016 The V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

{
  # This is a map of buildbot master names -> buildbot builder names ->
  # config names (where each config name is a key in the 'configs' dict,
  # below). MB uses this dict to look up which config to use for a given bot.
  # Bots are ordered by appearance on waterfall.
  'masters': {
    'developer_default': {
      'arm.debug': 'default_debug_arm',
      'arm.optdebug': 'default_optdebug_arm',
      'arm.release': 'default_release_arm',
      'arm64.debug': 'default_debug_arm64',
      'arm64.optdebug': 'default_optdebug_arm64',
      'arm64.release': 'default_release_arm64',
      'ia32.debug': 'default_debug_x86',
      'ia32.optdebug': 'default_optdebug_x86',
      'ia32.release': 'default_release_x86',
      'x64.debug': 'default_debug_x64',
      'x64.optdebug': 'default_optdebug_x64',
      'x64.release': 'default_release_x64',
    },

    'client.dart.fyi': {
      'v8-linux-release': 'gyp_release_x86_disassembler',
      'v8-win-release': 'gyp_release_x86_disassembler',
      'v8-mac-release': 'gyp_release_x86_disassembler',
    },
    'client.dynamorio': {
      'linux-v8-dr': 'gyp_release_x64',
    },
    'client.v8': {
      # Linux.
      'V8 Linux - builder': 'gn_release_x86_gcmole',
      'V8 Linux - debug builder': 'gn_debug_x86',
      'V8 Linux - nosnap builder': 'gn_release_x86_no_snap',
      'V8 Linux - nosnap debug builder': 'gn_debug_x86_no_snap',
      'V8 Linux - shared': 'gn_release_x86_shared_verify_heap',
      'V8 Linux - noi18n - debug': 'gn_debug_x86_no_i18n',
      # Linux64.
      'V8 Linux64 - builder': 'gn_release_x64_valgrind',
      'V8 Linux64 - debug builder': 'gn_debug_x64_valgrind',
      'V8 Linux64 - custom snapshot - debug builder': 'gn_debug_x64_custom',
      'V8 Linux64 - internal snapshot': 'gn_release_x64_internal',
      'V8 Linux64 - gyp': 'gyp_release_x64',
      # Windows.
      'V8 Win32 - builder': 'gn_release_x86_minimal_symbols',
      'V8 Win32 - debug builder': 'gn_debug_x86_minimal_symbols',
      'V8 Win32 - nosnap - shared':
        'gn_release_x86_no_snap_shared_minimal_symbols',
      'V8 Win64': 'gn_release_x64_minimal_symbols',
      'V8 Win64 - debug': 'gn_debug_x64_minimal_symbols',
      # TODO(machenbach): Switch plugins on when errors are fixed.
      'V8 Win64 - clang': 'gn_release_x64_clang',
      # Mac.
      'V8 Mac': 'gn_release_x86',
      'V8 Mac - debug': 'gn_debug_x86',
      'V8 Mac64': 'gn_release_x64',
      'V8 Mac64 - debug': 'gn_debug_x64',
      'V8 Mac GC Stress': 'gn_debug_x86',
      'V8 Mac64 ASAN': 'gn_release_x64_asan_no_lsan',
      # Sanitizers.
      'V8 Linux64 ASAN': 'gn_release_x64_asan',
      'V8 Linux64 TSAN': 'gn_release_x64_tsan',
      'V8 Linux - arm64 - sim - MSAN': 'gn_release_simulate_arm64_msan',
      # Clusterfuzz.
      'V8 Linux64 ASAN no inline - release builder':
          'gn_release_x64_asan_symbolized_edge_verify_heap',
      'V8 Linux64 ASAN - debug builder': 'gn_debug_x64_asan_edge',
      'V8 Linux64 ASAN arm64 - debug builder':
          'gn_debug_simulate_arm64_asan_edge',
      'V8 Linux ASAN arm - debug builder':
          'gn_debug_simulate_arm_asan_edge',
      'V8 Linux ASAN mipsel - debug builder':
          'gn_debug_simulate_mipsel_asan_edge',
      # Misc.
      'V8 Linux gcc 4.8': 'gn_release_x86_gcc',
      # FYI.
      'V8 Linux - swarming staging': 'gn_release_x64',
      # TODO(machenbach): Figure out if symbolized is still needed. The
      # original config also specified -O1, which we dropped because chromium
      # doesn't have it (anymore).
      'V8 Linux64 - cfi': 'gyp_release_x64_cfi_symbolized',
      'V8 Linux - vtunejit': 'gyp_debug_x86_vtunejit',
      'V8 Linux64 - gcov coverage': 'gyp_release_x64_gcc_coverage',
      'V8 Linux - predictable': 'gyp_release_x86_predictable',
      'V8 Linux - full debug': 'gyp_full_debug_x86',
      'V8 Linux - interpreted regexp': 'gyp_release_x86_interpreted_regexp',
      'V8 Random Deopt Fuzzer - debug': 'gyp_debug_x86',
    },

    'client.v8.ports': {
      # Arm.
      'V8 Arm - builder': 'gn_release_arm',
      'V8 Arm - debug builder': 'gn_debug_arm',
      'V8 Android Arm - builder': 'gn_release_android_arm',
      'V8 Linux - arm - sim': 'gn_release_simulate_arm',
      'V8 Linux - arm - sim - debug': 'gn_debug_simulate_arm',
      # Arm64.
      'V8 Android Arm64 - builder': 'gn_release_android_arm64',
      'V8 Linux - arm64 - sim': 'gn_release_simulate_arm64',
      'V8 Linux - arm64 - sim - debug': 'gn_debug_simulate_arm64',
      'V8 Linux - arm64 - sim - nosnap - debug':
          'gn_debug_simulate_arm64_no_snap',
      'V8 Linux - arm64 - sim - gc stress': 'gn_debug_simulate_arm64',
      # Mips.
      'V8 Mips - builder': 'gyp_release_mips_no_snap_no_i18n',
      'V8 Linux - mipsel - sim - builder': 'gn_release_simulate_mipsel',
      'V8 Linux - mips64el - sim - builder': 'gn_release_simulate_mips64el',
      # PPC.
      'V8 Linux - ppc - sim': 'gyp_release_simulate_ppc',
      'V8 Linux - ppc64 - sim': 'gyp_release_simulate_ppc64',
      # S390.
      'V8 Linux - s390 - sim': 'gyp_release_simulate_s390',
      'V8 Linux - s390x - sim': 'gyp_release_simulate_s390x',
      # X87.
      'V8 Linux - x87 - nosnap - debug builder':
          'gyp_debug_simulate_x87_no_snap',
    },
    'client.v8.branches': {
      'V8 Linux - beta branch': 'gn_release_x86',
      'V8 Linux - beta branch - debug': 'gn_debug_x86',
      'V8 Linux - stable branch': 'gn_release_x86',
      'V8 Linux - stable branch - debug': 'gn_debug_x86',
      'V8 Linux64 - beta branch': 'gn_release_x64',
      'V8 Linux64 - beta branch - debug': 'gn_debug_x64',
      'V8 Linux64 - stable branch': 'gn_release_x64',
      'V8 Linux64 - stable branch - debug': 'gn_debug_x64',
      'V8 arm - sim - beta branch': 'gn_release_simulate_arm',
      'V8 arm - sim - beta branch - debug': 'gn_debug_simulate_arm',
      'V8 arm - sim - stable branch': 'gn_release_simulate_arm',
      'V8 arm - sim - stable branch - debug': 'gn_debug_simulate_arm',
      'V8 mips64el - sim - beta branch': 'gn_release_simulate_mips64el',
      'V8 mips64el - sim - stable branch': 'gn_release_simulate_mips64el',
      'V8 mipsel - sim - beta branch': 'gn_release_simulate_mipsel',
      'V8 mipsel - sim - stable branch': 'gn_release_simulate_mipsel',
      'V8 ppc - sim - beta branch': 'gyp_release_simulate_ppc',
      'V8 ppc - sim - stable branch': 'gyp_release_simulate_ppc',
      'V8 ppc64 - sim - beta branch': 'gyp_release_simulate_ppc64',
      'V8 ppc64 - sim - stable branch': 'gyp_release_simulate_ppc64',
      'V8 s390 - sim - beta branch': 'gyp_release_simulate_s390',
      'V8 s390 - sim - stable branch': 'gyp_release_simulate_s390',
      'V8 s390x - sim - beta branch': 'gyp_release_simulate_s390x',
      'V8 s390x - sim - stable branch': 'gyp_release_simulate_s390x',
    },
    'tryserver.v8': {
      'v8_linux_rel_ng': 'gn_release_x86_gcmole_trybot',
      'v8_linux_avx2_dbg': 'gn_debug_x86_trybot',
      'v8_linux_nodcheck_rel_ng': 'gn_release_x86_minimal_symbols',
      'v8_linux_dbg_ng': 'gn_debug_x86_trybot',
      'v8_linux_noi18n_rel_ng': 'gn_release_x86_no_i18n_trybot',
      'v8_linux_gc_stress_dbg': 'gn_debug_x86_trybot',
      'v8_linux_nosnap_rel': 'gn_release_x86_no_snap_trybot',
      'v8_linux_nosnap_dbg': 'gn_debug_x86_no_snap_trybot',
      'v8_linux_gcc_compile_rel': 'gn_release_x86_gcc_minimal_symbols',
      'v8_linux_gcc_rel': 'gn_release_x86_gcc_minimal_symbols',
      'v8_linux64_rel_ng': 'gn_release_x64_valgrind_trybot',
      'v8_linux64_gyp_rel_ng': 'gyp_release_x64',
      'v8_linux64_avx2_rel_ng': 'gn_release_x64_trybot',
      'v8_linux64_avx2_dbg': 'gn_debug_x64_trybot',
      'v8_linux64_asan_rel_ng': 'gn_release_x64_asan_minimal_symbols',
      'v8_linux64_msan_rel': 'gn_release_simulate_arm64_msan_minimal_symbols',
      'v8_linux64_sanitizer_coverage_rel':
          'gyp_release_x64_asan_minimal_symbols_coverage',
      'v8_linux64_tsan_rel': 'gn_release_x64_tsan_minimal_symbols',
      'v8_win_dbg': 'gn_debug_x86_trybot',
      'v8_win_compile_dbg': 'gn_debug_x86_trybot',
      'v8_win_rel_ng': 'gn_release_x86_trybot',
      'v8_win_nosnap_shared_rel_ng':
        'gn_release_x86_no_snap_shared_minimal_symbols',
      'v8_win64_dbg': 'gn_debug_x64_minimal_symbols',
      'v8_win64_rel_ng': 'gn_release_x64_trybot',
      'v8_mac_rel_ng': 'gn_release_x86_trybot',
      'v8_mac_dbg': 'gn_debug_x86_trybot',
      'v8_mac_gc_stress_dbg': 'gn_debug_x86_trybot',
      'v8_mac64_rel': 'gn_release_x64_trybot',
      'v8_mac64_dbg': 'gn_debug_x64_minimal_symbols',
      'v8_mac64_asan_rel': 'gn_release_x64_asan_no_lsan',
      'v8_linux_arm_rel_ng': 'gn_release_simulate_arm_trybot',
      'v8_linux_arm_dbg': 'gn_debug_simulate_arm',
      'v8_linux_arm_armv8a_rel': 'gn_release_simulate_arm_trybot',
      'v8_linux_arm_armv8a_dbg': 'gn_debug_simulate_arm',
      'v8_linux_arm64_rel_ng': 'gn_release_simulate_arm64_trybot',
      'v8_linux_arm64_dbg': 'gn_debug_simulate_arm64',
      'v8_linux_arm64_gc_stress_dbg': 'gn_debug_simulate_arm64',
      'v8_linux_mipsel_compile_rel': 'gn_release_simulate_mipsel',
      'v8_linux_mips64el_compile_rel': 'gn_release_simulate_mips64el',
      'v8_android_arm_compile_rel': 'gn_release_android_arm',
    },
  },


  # To ease readability, config values are ordered by:
  # gyp/gn, release/debug, arch type, other values alphabetically.
  'configs': {
    # Developer default configs.
    'default_debug_arm': [
      'gn', 'debug', 'simulate_arm', 'v8_enable_slow_dchecks',
      'v8_full_debug'],
    'default_optdebug_arm': [
      'gn', 'debug', 'simulate_arm', 'v8_enable_slow_dchecks'],
    'default_release_arm': [
      'gn', 'release', 'simulate_arm'],
    'default_debug_arm64': [
      'gn', 'debug', 'simulate_arm64', 'v8_enable_slow_dchecks',
      'v8_full_debug'],
    'default_optdebug_arm64': [
      'gn', 'debug', 'simulate_arm64', 'v8_enable_slow_dchecks'],
    'default_release_arm64': [
      'gn', 'release', 'simulate_arm64'],
    'default_debug_x64': [
      'gn', 'debug', 'x64', 'v8_enable_slow_dchecks', 'v8_full_debug'],
    'default_optdebug_x64': [
      'gn', 'debug', 'x64', 'v8_enable_slow_dchecks'],
    'default_release_x64': [
      'gn', 'release', 'x64'],
    'default_debug_x86': [
      'gn', 'debug', 'x86', 'v8_enable_slow_dchecks', 'v8_full_debug'],
    'default_optdebug_x86': [
      'gn', 'debug', 'x86', 'v8_enable_slow_dchecks'],
    'default_release_x86': [
      'gn', 'release', 'x86'],


    # GN debug configs for simulators.
    'gn_debug_simulate_arm': [
      'gn', 'debug_bot', 'simulate_arm', 'swarming'],
    'gn_debug_simulate_arm_asan_edge': [
      'gn', 'debug_bot', 'simulate_arm', 'asan', 'edge'],
    'gn_debug_simulate_arm64': [
      'gn', 'debug_bot', 'simulate_arm64', 'swarming'],
    'gn_debug_simulate_arm64_asan_edge': [
      'gn', 'debug_bot', 'simulate_arm64', 'asan', 'lsan', 'edge'],
    'gn_debug_simulate_arm64_no_snap': [
      'gn', 'debug_bot', 'simulate_arm64', 'swarming', 'v8_snapshot_none'],
    'gn_debug_simulate_mipsel_asan_edge': [
      'gn', 'debug_bot', 'simulate_mipsel', 'asan', 'edge'],

    # GN release configs for simulators.
    'gn_release_simulate_arm': [
      'gn', 'release_bot', 'simulate_arm', 'swarming'],
    'gn_release_simulate_arm_trybot': [
      'gn', 'release_trybot', 'simulate_arm', 'swarming'],
    'gn_release_simulate_arm64': [
      'gn', 'release_bot', 'simulate_arm64', 'swarming'],
    'gn_release_simulate_arm64_msan': [
      'gn', 'release_bot', 'simulate_arm64', 'msan', 'swarming'],
    'gn_release_simulate_arm64_msan_minimal_symbols': [
      'gn', 'release_bot', 'simulate_arm64', 'msan', 'minimal_symbols',
      'swarming'],
    'gn_release_simulate_arm64_trybot': [
      'gn', 'release_trybot', 'simulate_arm64', 'swarming'],
    'gn_release_simulate_mipsel': [
      'gn', 'release_bot', 'simulate_mipsel', 'swarming'],
    'gn_release_simulate_mips64el': [
      'gn', 'release_bot', 'simulate_mips64el', 'swarming'],

    # GN debug configs for arm.
    'gn_debug_arm': [
      'gn', 'debug_bot', 'arm', 'crosscompile', 'hard_float', 'swarming'],

    # GN release configs for arm.
    'gn_release_arm': [
      'gn', 'release_bot', 'arm', 'crosscompile', 'hard_float', 'swarming'],
    'gn_release_android_arm': [
      'gn', 'release_bot', 'arm', 'android', 'crosscompile',
      'minimal_symbols', 'swarming'],
    'gn_release_android_arm64': [
      'gn', 'release_bot', 'arm64', 'android', 'crosscompile',
      'minimal_symbols', 'swarming'],

    # GN release configs for x64.
    'gn_release_x64': [
      'gn', 'release_bot', 'x64', 'swarming'],
    'gn_release_x64_asan': [
      'gn', 'release_bot', 'x64', 'asan', 'lsan', 'swarming'],
    'gn_release_x64_asan_minimal_symbols': [
      'gn', 'release_bot', 'x64', 'asan', 'lsan', 'minimal_symbols',
      'swarming'],
    'gn_release_x64_asan_no_lsan': [
      'gn', 'release_bot', 'x64', 'asan', 'swarming'],
    'gn_release_x64_asan_symbolized_edge_verify_heap': [
      'gn', 'release_bot', 'x64', 'asan', 'edge', 'lsan', 'symbolized',
      'v8_verify_heap'],
    'gn_release_x64_clang': [
      'gn', 'release_bot', 'x64', 'clang', 'swarming'],
    'gn_release_x64_internal': [
      'gn', 'release_bot', 'x64', 'swarming', 'v8_snapshot_internal'],
    'gn_release_x64_minimal_symbols': [
      'gn', 'release_bot', 'x64', 'minimal_symbols', 'swarming'],
    'gn_release_x64_trybot': [
      'gn', 'release_trybot', 'x64', 'swarming'],
    'gn_release_x64_tsan': [
      'gn', 'release_bot', 'x64', 'tsan', 'swarming'],
    'gn_release_x64_tsan_minimal_symbols': [
      'gn', 'release_bot', 'x64', 'tsan', 'minimal_symbols', 'swarming'],
    'gn_release_x64_valgrind': [
      'gn', 'release_bot', 'x64', 'swarming', 'valgrind'],
    'gn_release_x64_valgrind_trybot': [
      'gn', 'release_trybot', 'x64', 'swarming', 'valgrind'],

    # GN debug configs for x64.
    'gn_debug_x64': [
      'gn', 'debug_bot', 'x64', 'swarming'],
    'gn_debug_x64_asan_edge': [
      'gn', 'debug_bot', 'x64', 'asan', 'lsan', 'edge'],
    'gn_debug_x64_custom': [
      'gn', 'debug_bot', 'x64', 'swarming', 'v8_snapshot_custom'],
    'gn_debug_x64_minimal_symbols': [
      'gn', 'debug_bot', 'x64', 'minimal_symbols', 'swarming'],
    'gn_debug_x64_trybot': [
      'gn', 'debug_trybot', 'x64', 'swarming'],
    'gn_debug_x64_valgrind': [
      'gn', 'debug_bot', 'x64', 'swarming', 'valgrind'],

    # GN debug configs for x86.
    'gn_debug_x86': [
      'gn', 'debug_bot', 'x86', 'swarming'],
    'gn_debug_x86_minimal_symbols': [
      'gn', 'debug_bot', 'x86', 'minimal_symbols', 'swarming'],
    'gn_debug_x86_no_i18n': [
      'gn', 'debug_bot', 'x86', 'swarming', 'v8_disable_inspector',
      'v8_no_i18n'],
    'gn_debug_x86_no_snap': [
      'gn', 'debug_bot', 'x86', 'swarming', 'v8_snapshot_none'],
    'gn_debug_x86_no_snap_trybot': [
      'gn', 'debug_trybot', 'x86', 'swarming', 'v8_snapshot_none'],
    'gn_debug_x86_trybot': [
      'gn', 'debug_trybot', 'x86', 'swarming'],

    # GN release configs for x86.
    'gn_release_x86': [
      'gn', 'release_bot', 'x86', 'swarming'],
    'gn_release_x86_gcc': [
      'gn', 'release_bot', 'x86', 'gcc'],
    'gn_release_x86_gcc_minimal_symbols': [
      'gn', 'release_bot', 'x86', 'gcc', 'minimal_symbols'],
    'gn_release_x86_gcmole': [
      'gn', 'release_bot', 'x86', 'gcmole', 'swarming'],
    'gn_release_x86_gcmole_trybot': [
      'gn', 'release_trybot', 'x86', 'gcmole', 'swarming'],
    'gn_release_x86_minimal_symbols': [
      'gn', 'release_bot', 'x86', 'minimal_symbols', 'swarming'],
    'gn_release_x86_no_i18n_trybot': [
      'gn', 'release_trybot', 'x86', 'swarming', 'v8_disable_inspector',
      'v8_no_i18n'],
    'gn_release_x86_no_snap': [
      'gn', 'release_bot', 'x86', 'swarming', 'v8_snapshot_none'],
    'gn_release_x86_no_snap_shared_minimal_symbols': [
      'gn', 'release', 'x86', 'goma', 'minimal_symbols', 'shared', 'swarming',
      'v8_snapshot_none'],
    'gn_release_x86_no_snap_trybot': [
      'gn', 'release_trybot', 'x86', 'swarming', 'v8_snapshot_none'],
    'gn_release_x86_shared_verify_heap': [
      'gn', 'release', 'x86', 'goma', 'shared', 'swarming', 'v8_verify_heap'],
    'gn_release_x86_trybot': [
      'gn', 'release_trybot', 'x86', 'swarming'],

    # Gyp debug configs for simulators.
    'gyp_debug_simulate_x87_no_snap': [
      'gyp', 'debug_bot_static', 'simulate_x87', 'swarming',
      'v8_snapshot_none'],

    # Gyp debug configs for x86.
    'gyp_debug_x86': [
      'gyp', 'debug_bot', 'x86', 'swarming'],
    'gyp_debug_x86_vtunejit': [
      'gyp', 'debug_bot', 'x86', 'v8_enable_vtunejit'],
    'gyp_full_debug_x86': [
      'gyp', 'debug', 'x86', 'goma', 'static', 'v8_enable_slow_dchecks',
      'v8_full_debug'],

    # Gyp release configs for mips.
    'gyp_release_mips_no_snap_no_i18n': [
      'gyp', 'release', 'mips', 'crosscompile', 'static', 'v8_no_i18n',
      'v8_snapshot_none'],

    # Gyp release configs for simulators.
    'gyp_release_simulate_ppc': [
      'gyp', 'release_bot', 'simulate_ppc', 'swarming'],
    'gyp_release_simulate_ppc64': [
      'gyp', 'release_bot', 'simulate_ppc64', 'swarming'],
    'gyp_release_simulate_s390': [
      'gyp', 'release_bot', 'simulate_s390', 'swarming'],
    'gyp_release_simulate_s390x': [
      'gyp', 'release_bot', 'simulate_s390x', 'swarming'],

    # Gyp release configs for x64.
    'gyp_release_x64': [
      'gyp', 'release_bot', 'x64', 'swarming'],
    'gyp_release_x64_asan_minimal_symbols_coverage': [
      'gyp', 'release_bot', 'x64', 'asan', 'bb', 'coverage', 'lsan',
      'minimal_symbols', 'swarming'],
    'gyp_release_x64_cfi_symbolized': [
      'gyp', 'release_bot', 'x64', 'cfi', 'swarming', 'symbolized'],
    'gyp_release_x64_gcc_coverage': [
      'gyp', 'release_bot', 'x64', 'coverage', 'gcc'],

    # Gyp release configs for x86.
    'gyp_release_x86_disassembler': [
      'gyp', 'release_bot', 'x86', 'v8_enable_disassembler'],
    'gyp_release_x86_interpreted_regexp': [
      'gyp', 'release_bot', 'x86', 'v8_interpreted_regexp'],
    'gyp_release_x86_predictable': [
      'gyp', 'release_bot', 'x86', 'v8_enable_verify_predictable'],
  },

  'mixins': {
    'android': {
      'gn_args': 'target_os="android" v8_android_log_stdout=true',
      'gyp_defines': 'OS=android v8_android_log_stdout=1',
    },

    'arm': {
      'gn_args': 'target_cpu="arm"',
      'gyp_defines': 'target_arch=arm',
    },

    'arm64': {
      'gn_args': 'target_cpu="arm64"',
      'gyp_defines': 'target_arch=arm64',
    },

    'asan': {
      'gn_args': 'is_asan=true',
      'gyp_defines': 'clang=1 asan=1',
    },

    'bb': {
      'gn_args': 'sanitizer_coverage_flags="bb"',
      'gyp_defines': 'sanitizer_coverage=bb',
    },

    'cfi': {
      'gn_args': 'is_cfi=true use_cfi_diag=true',
      'gyp_defines': 'cfi_vptr=1 cfi_diag=1',
    },

    'clang': {
      'gn_args': 'is_clang=true',
      'gyp_defines': 'clang=1',
    },

    'coverage': {
      # TODO(machenbach): Add this to gn.
      'gyp_defines': 'coverage=1',
    },

    'crosscompile': {
      'gyp_crosscompile': True,
    },

    'dcheck_always_on': {
      'gn_args': 'dcheck_always_on=true',
      'gyp_defines': 'dcheck_always_on=1',
    },

    'debug': {
      'gn_args': 'is_debug=true v8_enable_backtrace=true',
      'gyp_defines': 'v8_enable_backtrace=1',
    },

    'debug_bot': {
      'mixins': [
        'debug', 'shared', 'goma', 'v8_enable_slow_dchecks',
        'v8_optimized_debug'],
    },

    'debug_bot_static': {
      'mixins': [
        'debug', 'static', 'goma', 'v8_enable_slow_dchecks',
        'v8_optimized_debug'],
    },

    'debug_trybot': {
      'mixins': ['debug_bot', 'minimal_symbols'],
    },

    'edge': {
      'gn_args': 'sanitizer_coverage_flags="edge"',
      'gyp_defines': 'sanitizer_coverage=edge',
    },

    'gcc': {
      'gn_args': 'is_clang=false use_sysroot=false',
      'gyp_defines': 'clang=0',
    },

    'gcmole': {
      'gn_args': 'v8_gcmole=true',
      'gyp_defines': 'gcmole=1',
    },

    'gn': {'type': 'gn'},

    'goma': {
      # The MB code will properly escape goma_dir if necessary in the GYP
      # code path; the GN code path needs no escaping.
      'gn_args': 'use_goma=true',
      'gyp_defines': 'use_goma=1',
    },

    'gyp': {'type': 'gyp'},

    'hard_float': {
      'gn_args': 'arm_float_abi="hard"',
      'gyp_defines': 'arm_float_abi=hard',
    },

    'lsan': {
      'gn_args': 'is_lsan=true',
      'gyp_defines': 'lsan=1',
    },

    'minimal_symbols': {
      'gn_args': 'symbol_level=1',
      'gyp_defines': 'fastbuild=1',
    },

    'mips': {
      'gn_args': 'target_cpu="mips"',
      'gyp_defines': 'target_arch=mips',
    },

    'msan': {
      'gn_args': ('is_msan=true msan_track_origins=2 '
                  'use_prebuilt_instrumented_libraries=true'),
      'gyp_defines': ('clang=1 msan=1 msan_track_origins=2 '
                      'use_prebuilt_instrumented_libraries=1'),
    },

    'release': {
      'gn_args': 'is_debug=false',
    },

    'release_bot': {
      'mixins': ['release', 'static', 'goma'],
    },

    'release_trybot': {
      'mixins': ['release_bot', 'minimal_symbols', 'dcheck_always_on'],
    },

    'shared': {
      'gn_args': 'is_component_build=true',
      'gyp_defines': 'component=shared_library',
    },

    'simulate_arm': {
      'gn_args': 'target_cpu="x86" v8_target_cpu="arm"',
      'gyp_defines': 'target_arch=ia32 v8_target_arch=arm',
    },

    'simulate_arm64': {
      'gn_args': 'target_cpu="x64" v8_target_cpu="arm64"',
      'gyp_defines': 'target_arch=x64 v8_target_arch=arm64',
    },

    'simulate_mipsel': {
      'gn_args':
          'target_cpu="x86" v8_target_cpu="mipsel" mips_arch_variant="r2"',
      'gyp_defines': 'target_arch=ia32 v8_target_arch=mipsel',
    },

    'simulate_mips64el': {
      'gn_args': 'target_cpu="x64" v8_target_cpu="mips64el"',
      'gyp_defines': 'target_arch=x64 v8_target_arch=mips64el',
    },

    'simulate_ppc': {
      'gn_args': 'target_cpu="x86" v8_target_cpu="ppc"',
      'gyp_defines': 'target_arch=ia32 v8_target_arch=ppc',
    },

    'simulate_ppc64': {
      'gn_args': 'target_cpu="x64" v8_target_cpu="ppc64"',
      'gyp_defines': 'target_arch=x64 v8_target_arch=ppc64',
    },

    'simulate_s390': {
      'gn_args': 'target_cpu="x86" v8_target_cpu="s390"',
      'gyp_defines': 'target_arch=ia32 v8_target_arch=s390',
    },

    'simulate_s390x': {
      'gn_args': 'target_cpu="x64" v8_target_cpu="s390x"',
      'gyp_defines': 'target_arch=x64 v8_target_arch=s390x',
    },

    'simulate_x87': {
      'gn_args': 'target_cpu="x86" v8_target_cpu="x87"',
      'gyp_defines': 'target_arch=ia32 v8_target_arch=x87',
    },

    'static': {
      'gn_args': 'is_component_build=false',
      'gyp_defines': 'component=static_library',
    },

    'swarming': {
      'gn_args': 'v8_test_isolation_mode="prepare"',
      'gyp_defines': 'test_isolation_mode=prepare',
    },

    # TODO(machenbach): Remove the symbolized config after the bots are gone.
    'symbolized': {
      'gn_args': 'v8_no_inline=true',
      'gyp_defines':
        'release_extra_cflags="-fno-inline-functions -fno-inline"',
    },

    'tsan': {
      'gn_args': 'is_tsan=true',
      'gyp_defines': 'clang=1 tsan=1',
    },

    'valgrind': {
      'gn_args': 'v8_has_valgrind=true',
      'gyp_defines': 'has_valgrind=1',
    },

    'v8_no_i18n': {
      'gn_args': 'v8_enable_i18n_support=false icu_use_data_file=false',
      'gyp_defines': 'v8_enable_i18n_support=0 icu_use_data_file_flag=0',
    },

    'v8_disable_inspector': {
      'gn_args': 'v8_enable_inspector=false',
      'gyp_defines': 'v8_enable_inspector=0 ',
    },

    'v8_enable_disassembler': {
      'gn_args': 'v8_enable_disassembler=true',
      'gyp_defines': 'v8_enable_disassembler=1',
    },

    'v8_enable_slow_dchecks': {
      'gn_args': 'v8_enable_slow_dchecks=true',
      'gyp_defines': 'v8_enable_slow_dchecks=1',
    },

    'v8_enable_verify_predictable': {
      'gn_args': 'v8_enable_verify_predictable=true',
      'gyp_defines': 'v8_enable_verify_predictable=1',
    },

    'v8_enable_vtunejit': {
      'gn_args': 'v8_enable_vtunejit=true',
      'gyp_defines': 'v8_enable_vtunejit=1',
    },

    'v8_full_debug': {
      'gn_args': 'v8_optimized_debug=false',
      'gyp_defines': 'v8_optimized_debug=0',
    },

    'v8_interpreted_regexp': {
      'gn_args': 'v8_interpreted_regexp=true',
      'gyp_defines': 'v8_interpreted_regexp=1',
    },

    'v8_optimized_debug': {
      # This is the default in gn for debug.
      'gyp_defines': 'v8_optimized_debug=1',
    },

    'v8_snapshot_custom': {
      # GN path is relative to project root.
      'gn_args': 'v8_embed_script="test/mjsunit/mjsunit.js"',

      # Gyp path is relative to src/v8.gyp.
      'gyp_defines': 'embed_script=../test/mjsunit/mjsunit.js',
    },

    'v8_snapshot_internal': {
      'gn_args': 'v8_use_external_startup_data=false',
      'gyp_defines': 'v8_use_external_startup_data=0',
    },

    'v8_snapshot_none': {
      'gn_args': 'v8_use_snapshot=false',
      'gyp_defines': 'v8_use_snapshot=false',
    },

    'v8_verify_heap': {
      'gn_args': 'v8_enable_verify_heap=true',
      'gyp_defines': 'v8_enable_verify_heap=1',
    },

    'x64': {
      'gn_args': 'target_cpu="x64"',
      'gyp_defines': 'target_arch=x64',
    },

    'x86': {
      'gn_args': 'target_cpu="x86"',
      'gyp_defines': 'target_arch=ia32',
    },
  },
}