# 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 GYP and GN in tryjob patches.

{
  # This is the list of configs that you can pass to mb; each config
  # represents a particular combination of GYP_DEFINES/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 'gn_release_bot' config).
  'configs': {
    'ios_gn_debug_bot_arm64_device': ['ios', 'gn', 'debug_bot', 'arm64', 'device'],
    'ios_gn_release_bot_arm64_device': ['ios', 'gn', 'release_bot', 'arm64', 'device'],
    'ios_gyp_debug_bot_arm_device': ['ios', 'gyp', 'debug_bot', 'arm', 'device'],
    'ios_gyp_release_bot_arm_device': ['ios', 'gyp', 'release_bot', 'arm', 'device'],
    'ios_gyp_debug_bot_arm64_device': ['ios', 'gyp', 'debug_bot', 'arm64', 'device'],
    'ios_gyp_release_bot_arm64_device': ['ios', 'gyp', 'release_bot', 'arm64', 'device'],
    'ios_gyp_debug_bot_x86': ['ios', 'gyp', 'debug_bot', 'x86'],
    'ios_gyp_debug_bot_x64': ['ios', 'gyp', 'release_bot', 'x64'],
  },

  # 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': {
    'ios': {
      'gn_args': 'target_os="ios"',
      'gyp_defines': 'OS=ios',
    },

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

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

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

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

    'device': {
      'gn_args': 'ios_enable_code_signing=false',
      'gyp_defines': 'chromium_ios_signing=0',
    },

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

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

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

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

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

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

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

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

  # 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': {
      'iOS32 Debug': 'ios_gyp_debug_bot_arm_device',
      'iOS32 Release': 'ios_gyp_release_bot_arm_device',
      'iOS64 Debug': 'ios_gyp_debug_bot_arm64_device',
      'iOS64 Release': 'ios_gyp_release_bot_arm64_device',
      'iOS32 Debug Simulator': 'ios_gyp_debug_bot_x86',
      'iOS64 Debug Simulator': 'ios_gyp_debug_bot_x64',
      'iOS64 Debug (GN)': 'ios_gn_debug_bot_arm64_device',
      'iOS64 Release (GN)': 'ios_gn_release_bot_arm64_device',
    },
    'tryserver.webrtc': {
      'ios_dbg': 'ios_gyp_debug_bot_arm_device',
      'ios_rel': 'ios_gyp_release_bot_arm_device',
      'ios_arm64_dbg': 'ios_gyp_debug_bot_arm64_device',
      'ios_arm64_rel': 'ios_gyp_release_bot_arm64_device',
      'ios32_sim_dbg': 'ios_gyp_debug_bot_x86',
      'ios64_sim_dbg': 'ios_gyp_debug_bot_x64',
      'ios64_gn_dbg': 'ios_gn_debug_bot_arm64_device',
      'ios64_gn_rel': 'ios_gn_release_bot_arm64_device',
    },
  },
}
