# Copyright (c) 2016 The WebRTC 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 in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

# FOR DETAILS ON THIS FILE SEE THE MAIN COPY IN //tools/mb/mb_config.pyl.
# This is configuration for standalone WebRTC bots. It is used to keep the bot
# configurations source-side instead of in the buildbot scripts. That makes it
# easy to try different configurations of GN args in tryjob patches.

{
  # This is a map of buildbot master names -> buildbot builder names ->
  # config names (where each config name is a key in the 'configs' dict,
  # above). mb uses this dict to look up which config to use for a given bot.
  # The builders should be sorted by the order they appear in the /builders
  # page on the buildbots, *not* alphabetically.
  'masters': {
    'client.webrtc': {
      # iOS
      'iOS32 Debug': 'ios',
      'iOS32 Release': 'ios',
      'iOS64 Debug': 'ios',
      'iOS64 Release': 'ios',
      'iOS32 Sim Debug (iOS 9.0)': 'ios',
      'iOS64 Sim Debug (iOS 9.0)': 'ios',
      'iOS64 Sim Debug (iOS 10.0)': 'ios',

      # Mac
      'Mac64 Debug': 'debug_bot_x64',
      'Mac64 Release': 'release_bot_x64',
      'Mac Asan': 'mac_asan_clang_release_bot_x64',

      # Linux
      'Linux32 Debug': 'no_h264_debug_bot_x86',
      'Linux32 Release': 'release_bot_x86',
      'Linux32 Debug (ARM)': 'debug_bot_arm',
      'Linux32 Release (ARM)': 'release_bot_arm',
      'Linux64 Debug': 'debug_bot_x64',
      'Linux64 Release': 'release_bot_x64',
      'Linux64 Debug (ARM)': 'debug_bot_arm64',
      'Linux64 Release (ARM)': 'release_bot_arm64',
      'Linux64 Release (GCC)': 'gcc_release_bot_x64',
      'Linux Asan': 'asan_lsan_clang_release_bot_x64',
      'Linux Memcheck': 'memcheck_release_bot_x64',
      'Linux MSan': 'msan_clang_release_bot_x64',
      'Linux Tsan v2': 'tsan_clang_release_bot_x64',
      'Linux UBSan': 'ubsan_clang_release_bot_x64',
      'Linux UBSan vptr': 'ubsan_vptr_clang_release_bot_x64',
      'Linux64 Release (Libfuzzer)': 'libfuzzer_asan_release_bot_x64',

      # Android
      'Android32 (M Nexus5X)': 'android_release_bot_arm',
      'Android32 (M Nexus5X)(dbg)': 'android_debug_static_bot_arm',
      'Android64 (M Nexus5X)': 'android_release_bot_arm64',
      'Android64 (M Nexus5X)(dbg)': 'android_debug_static_bot_arm64',
      'Android32 Builder x86': 'android_release_bot_x86',
      'Android32 Builder x86 (dbg)': 'android_debug_static_bot_x86',
      'Android64 Builder x64 (dbg)': 'android_debug_static_bot_x64',

      # Windows
      'Win32 Debug': 'win_msvc_debug_bot_x86',
      'Win32 Release': 'win_msvc_release_bot_x86',
      'Win64 Debug': 'win_msvc_debug_bot_x64',
      'Win64 Release': 'win_msvc_release_bot_x64',
      'Win32 Debug (Clang)': 'win_clang_debug_bot_x86',
      'Win32 Release (Clang)': 'win_clang_release_bot_x86',
      'Win64 Debug (Clang)': 'win_clang_debug_bot_x64',
      'Win64 Release (Clang)': 'win_clang_release_bot_x64',
      'Win32 ASan': 'win_asan_clang_release_bot_x86',
    },
    'client.webrtc.branches': {
      # iOS
      'iOS (stable)': 'ios',
      'iOS (beta)': 'ios',

      # Mac
      'Mac (stable)': 'release_bot_x64',
      'Mac (beta)': 'release_bot_x64',

      # Linux
      'Linux (stable)': 'release_bot_x64',
      'Linux (beta)': 'release_bot_x64',

      # Android
      'Android (stable)': 'android_release_bot_arm',
      'Android (beta)': 'android_release_bot_arm',

      # Windows
      'Win (stable)': 'release_bot_x86',
      'Win (beta)': 'release_bot_x86',
    },
    'client.webrtc.perf': {
      # Android
      'Android32 Builder': 'perf_android_release_bot_arm',
      'Android64 Builder': 'perf_android_release_bot_arm64',
      'Android32 Tests (J Nexus4)': 'none',
      'Android32 Tests (K Nexus5)': 'none',
      'Android32 Tests (L Nexus5)': 'none',
      'Android32 Tests (L Nexus6)': 'none',
      'Android32 Tests (L Nexus7.2)': 'none',
      'Android64 Tests (L Nexus9)': 'none',
      'Linux Trusty': 'perf_release_bot_x64',
      'Mac 10.11': 'perf_release_bot_x64',
      'Win7': 'perf_release_bot_x86',
    },
    'client.webrtc.fyi': {
      # Mac
      'Mac (swarming)': 'release_bot_x64',

      # Android
      'Android Perf (swarming)': 'perf_android_release_bot_arm',
      'Android ASan (swarming)': 'android_asan_shared_release_bot_arm',
      # Windows
      'Win (swarming)': 'release_bot_x86',
      'Win64 Debug (Win8)': 'debug_bot_x64',
      'Win64 Debug (Win10)': 'debug_bot_x64',
    },
    'chromium.infra.codesearch': {
      'codesearch-gen-webrtc-android': {
        'android': 'android_debug_static_bot_arm',
      },
      'codesearch-gen-webrtc-linux': {
        'linux': 'codesearch_gen_linux_bot',
      }
    },
    'internal.client.webrtc': {
      'iOS64 Debug': 'ios',
      'iOS64 Perf': 'ios',
      'iOS64 Release': 'ios',
    },
    'internal.tryserver.webrtc': {
      'ios_arm64_dbg': 'ios',
      'ios_arm64_rel': 'ios',
    },
    'tryserver.webrtc': {
      # iOS
      'ios_dbg': 'ios',
      'ios_rel': 'ios',
      'ios_arm64_dbg': 'ios',
      'ios_arm64_rel': 'ios',
      'ios32_sim_ios9_dbg': 'ios',
      'ios64_sim_ios9_dbg': 'ios',
      'ios64_sim_ios10_dbg': 'ios',

      # Mac
      'mac_compile_dbg': 'debug_bot_x64',
      'mac_compile_rel': 'release_bot_x64',
      'mac_dbg': 'debug_bot_x64',
      'mac_rel': 'release_bot_x64',
      'mac_asan': 'mac_asan_clang_release_bot_x64',
      'mac_experimental': 'release_bot_x64',

      # Linux
      'linux_compile_dbg': 'debug_bot_x64',
      'linux_compile_rel': 'release_bot_x64',
      'linux_dbg': 'debug_bot_x64',
      'linux_rel': 'release_bot_x64',
      'linux_arm64_dbg': 'debug_bot_arm64',
      'linux_arm64_rel': 'release_bot_arm64',
      'linux32_dbg': 'no_h264_debug_bot_x86',
      'linux32_rel': 'release_bot_x86',
      'linux32_arm_dbg': 'debug_bot_arm',
      'linux32_arm_rel': 'release_bot_arm',
      'linux_asan': 'asan_lsan_clang_release_bot_x64',
      'linux_gcc_rel': 'gcc_release_bot_x64',
      'linux_memcheck': 'memcheck_release_bot_x64',
      'linux_msan': 'msan_clang_release_bot_x64',
      'linux_tsan2': 'tsan_clang_release_bot_x64',
      'linux_ubsan': 'ubsan_clang_release_bot_x64',
      'linux_ubsan_vptr': 'ubsan_vptr_clang_release_bot_x64',
      'linux_experimental': 'release_bot_x64',
      'linux_libfuzzer_rel': 'libfuzzer_asan_release_bot_x64',

      # Android
      'android_compile_dbg': 'android_debug_static_bot_arm',
      'android_compile_rel': 'android_release_bot_arm',
      'android_compile_arm64_dbg': 'android_debug_static_bot_arm64',
      'android_compile_arm64_rel': 'android_release_bot_arm64',
      'android_compile_x86_dbg': 'android_debug_static_bot_x86',
      'android_compile_x86_rel': 'android_release_bot_x86',
      'android_compile_x64_dbg': 'android_debug_static_bot_x64',
      'android_compile_mips_dbg': 'android_debug_static_bot_mipsel',
      'android_dbg': 'android_debug_static_bot_arm',
      'android_rel': 'android_release_bot_arm',
      'android_arm64_rel': 'android_release_bot_arm64',
      'android_experimental': 'android_release_bot_arm',

      # Windows
      'win_compile_dbg': 'debug_bot_x86',
      'win_compile_rel': 'release_bot_x86',
      'win_compile_x64_dbg': 'debug_bot_x64',
      'win_compile_x64_rel': 'release_bot_x64',
      'win_dbg': 'win_msvc_debug_bot_x86',
      'win_rel': 'win_msvc_release_bot_x86',
      'win_x64_dbg': 'win_msvc_debug_bot_x64',
      'win_x64_rel': 'win_msvc_release_bot_x64',
      'win_clang_dbg': 'win_clang_debug_bot_x86',
      'win_clang_rel': 'win_clang_release_bot_x86',
      'win_x64_clang_dbg': 'win_clang_debug_bot_x64',
      'win_x64_clang_rel': 'win_clang_release_bot_x64',
      'win_asan': 'win_asan_clang_release_bot_x86',
      'win_experimental': 'release_bot_x86',
      'win_x64_win8': 'debug_bot_x64',
      'win_x64_win10': 'debug_bot_x64',
    }
  },

  # This is the list of configs that you can pass to mb; each config
  # represents a particular combination of gn args that we must support.
  # A given config *may* be platform-specific but is not necessarily so (i.e.,
  # we might have mac, win, and linux bots all using the 'release_bot' config).
  'configs': {
    # Linux, Mac and Windows
    'gcc_release_bot_x64': [
      'gn', 'gcc', 'release_bot', 'x64', 'no_rtc_tests'
    ],
    # TOOD(kjellander): Restore Goma for this when crbug.com/726706 is fixed.
    'debug_bot_arm': [
      'gn', 'openh264', 'debug', 'arm'
    ],
    'release_bot_arm': [
      'gn', 'openh264_release_bot', 'arm'
    ],
    'debug_bot_arm64': [
      'gn', 'openh264_debug_bot', 'arm64'
    ],
    'release_bot_arm64': [
      'gn', 'openh264_release_bot', 'arm64'
    ],
    'asan_lsan_clang_release_bot_x64': [
      'gn', 'asan', 'lsan', 'clang', 'openh264_release_bot', 'x64'
    ],
    'msan_clang_release_bot_x64': [
      'gn', 'msan', 'clang', 'openh264_release_bot', 'x64'
    ],
    'tsan_clang_release_bot_x64': [
      'gn', 'tsan', 'clang', 'openh264_release_bot', 'x64'
    ],
    'ubsan_clang_release_bot_x64': [
      'gn', 'ubsan', 'clang', 'openh264_release_bot', 'x64'
    ],
    'ubsan_vptr_clang_release_bot_x64': [
      'gn', 'ubsan_vptr', 'clang', 'openh264_release_bot', 'x64'
    ],
    'debug_bot_x86': [
      'gn', 'openh264_debug_bot', 'x86'
    ],
    'no_h264_debug_bot_x86': [
      'gn', 'debug_bot', 'x86'
    ],
    'release_bot_x86': [
      'gn', 'openh264_release_bot', 'x86'
    ],
    'debug_bot_x64': [
      'gn', 'openh264_debug_bot', 'x64'
    ],
    'codesearch_gen_linux_bot': [
      'gn', 'openh264_debug_bot', 'minimal_symbols'
    ],
    'release_bot_x64': [
      'gn', 'openh264_release_bot', 'x64'
    ],
    'perf_release_bot_x86': [
      'gn', 'openh264', 'release', 'goma', 'x86'
    ],
    'perf_release_bot_x64': [
      'gn', 'openh264', 'release', 'goma', 'x64'
    ],
    'libfuzzer_asan_release_bot_x64': [
      'libfuzzer', 'asan', 'optimize_for_fuzzing', 'openh264_release_bot',
      'x64', 'no_rtc_tests'
    ],
    'memcheck_release_bot_x64': [
      'memcheck', 'gn', 'openh264_release_bot', 'x64', 'use_default_libcxx',
      'no_lld'
    ],

    # iOS
    # The 'ios' config is just used for auditing. iOS bots
    # use the ios recipes and look up their GN arguments via files checked in
    # under //tools_webrtc/ios/bots. It is an error to actually use one of these
    # configs to generate the build files.
    'ios': [ 'error'],

    # Windows
    'win_clang_debug_bot_x86': [
      'gn', 'clang', 'openh264_debug_bot', 'x86',
    ],
    'win_clang_release_bot_x86': [
      'gn', 'clang', 'openh264_release_bot', 'x86',
    ],
    'win_clang_debug_bot_x64': [
      'gn', 'clang', 'openh264_debug_bot', 'x64',
    ],
    'win_clang_release_bot_x64': [
      'gn', 'clang', 'openh264_release_bot', 'x64',
    ],
    'win_msvc_debug_bot_x86': [
      'gn', 'no_clang', 'openh264_debug_bot', 'x86',
    ],
    'win_msvc_release_bot_x86': [
      'gn', 'no_clang', 'openh264_release_bot', 'x86',
    ],
    'win_msvc_debug_bot_x64': [
      'gn', 'no_clang', 'openh264_debug_bot', 'x64',
    ],
    'win_msvc_release_bot_x64': [
      'gn', 'no_clang', 'openh264_release_bot', 'x64',
    ],
    'win_asan_clang_release_bot_x86': [
      'gn', 'asan', 'clang',  'full_symbols', 'openh264_release_bot', 'x86',
      'win_fastlink',
    ],

    # Mac
    'mac_asan_clang_release_bot_x64': [
      'gn', 'asan', 'clang', 'openh264_release_bot', 'x64',
    ],

    # Android
    'android_debug_static_bot_arm': [
      'android', 'gn', 'debug_static_bot', 'arm'
    ],
    'android_release_bot_arm': [
      'android', 'gn', 'release_bot', 'arm'
    ],
    'android_debug_static_bot_x86': [
      'android', 'gn', 'debug_static_bot', 'x86'
    ],
    'android_release_bot_x86': [
      'android', 'gn', 'release_bot', 'x86'
    ],
    'android_debug_static_bot_mipsel': [
      'android', 'gn', 'debug_static_bot', 'mipsel'
    ],
    'android_debug_static_bot_arm64': [
      'android', 'gn', 'debug_static_bot', 'arm64'
    ],
    'android_release_bot_arm64': [
      'android', 'gn', 'release_bot', 'arm64'
    ],
    'android_debug_static_bot_x64': [
      'android', 'gn', 'debug_static_bot', 'x64'
    ],
    'android_asan_shared_release_bot_arm': [
      'android', 'gn', 'asan', 'clang', 'release_bot', 'arm'
    ],
    'perf_android_release_bot_arm': [
      'android', 'gn', 'release', 'goma', 'arm'
    ],
    'perf_android_release_bot_arm64': [
      'android', 'gn', 'release', 'goma', 'arm64'
    ],

    # This is used for tracking purposes; any bot that uses this config
    # should never actually run MB.
    'none': [
      'error',
    ],
  },

  # This is a dict mapping a given 'mixin' name to a dict of settings that
  # mb should use. See //tools/mb/docs/user_guide.md for more information.
  'mixins': {
    'android': {
      'gn_args': 'target_os="android"',
    },

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

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

    'asan': {
      'gn_args': 'is_asan=true',
    },

    # is_clang=true by default, this is only to guard from upstream changes.
    'clang': {
      'gn_args': 'is_clang=true',
    },

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

    'debug': {
      'gn_args': 'is_debug=true',
    },

    'debug_bot': {
      'mixins': ['debug', 'goma'],
    },

    'debug_static_bot': {
      'mixins': ['debug', 'minimal_symbols', 'goma'],
    },

    # This mixin is used to force configs that use it to fail. It
    # is used in two cases: when we have bots that we haven't looked
    # at yet and don't know whether they need MB or not, and for bots
    # that are test-only and should never run MB.
    'error': {
      'gn_args': 'error',
    },

    'full_symbols': {
      'gn_args': 'symbol_level=2',
    },

    'gcc': {
      'gn_args': ('is_clang=false use_sysroot=false '
                  'treat_warnings_as_errors=false'),
    },

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

    'goma': {
      'gn_args': 'use_goma=true',
    },

    'libfuzzer': {
      'gn_args': 'use_libfuzzer=true',
    },

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

    'memcheck': {
      'gn_args': 'rtc_use_memcheck=true',
    },

    'minimal_symbols': {
      'gn_args': 'symbol_level=1 strip_absolute_paths_from_debug_symbols=true',
    },

    'mipsel': {
      'gn_args': 'target_cpu="mipsel"',
    },

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

    'no_clang': {
      'gn_args': 'is_clang=false',
    },

    'no_lld': {
      'gn_args': 'use_lld=false',
    },

    'no_rtc_tests': {
      'gn_args': 'rtc_include_tests=false',
    },

    'openh264': {
      'gn_args': 'ffmpeg_branding="Chrome" rtc_use_h264=true',
    },

    'openh264_debug_bot': {
      'mixins': ['openh264', 'debug_bot'],
    },

    'openh264_release_bot': {
      'mixins': ['openh264', 'release_bot'],
    },

    'optimize_for_fuzzing': {
      'gn_args': 'optimize_for_fuzzing=true',
    },

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

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

    'tsan': {
      'gn_args': 'is_tsan=true',
    },

    'ubsan': {
      'gn_args': 'is_ubsan=true is_ubsan_no_recover=true',
    },

    'ubsan_vptr': {
      'gn_args': 'is_ubsan_vptr=true is_ubsan_no_recover=true',
    },

    'win_fastlink': {
      'gn_args': 'is_win_fastlink=true',
    },

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

    'x86': {
      'gn_args': 'target_cpu="x86"',
    },

    'use_default_libcxx': {
      'gn_args': 'use_custom_libcxx=false',
    }
  },
}
