# Defines the configuration of Remote Build Execution (RBE).

# The directory where the re-client tooling binaries are.
rbe_bin_dir = rebase_path("//buildtools/reclient", root_build_dir)

declare_args() {
  # Execution root - this should be the root of the source tree.
  # This is defined here instead of in the config file because
  # this will vary depending on where the user has placed the
  # chromium source on their system.
  rbe_exec_root = rebase_path("//")

  # Set to true to enable remote compilation using reclient.
  use_remoteexec = false

  # Set to true to enable remote linking using reclient.
  use_remoteexec_links = false

  # The directory where the re-client configuration files are.
  rbe_cfg_dir = rebase_path("//buildtools/reclient_cfgs", root_build_dir)
}

declare_args() {
  # Set to the path of the RBE reclient configuration files.
  # Configuration file selection based on operating system.
  if (is_linux || is_android || is_chromeos || is_fuchsia) {
    rbe_py_cfg_file = "${rbe_cfg_dir}/python/rewrapper_linux.cfg"
    rbe_cc_cfg_file =
        "${rbe_cfg_dir}/chromium-browser-clang/rewrapper_linux.cfg"
    rbe_link_cfg_file =
        "${rbe_cfg_dir}/chromium-browser-clang/rewrapper_linux_link.cfg"
  } else if (is_win) {
    rbe_py_cfg_file = "${rbe_cfg_dir}/python/rewrapper_windows.cfg"
    rbe_cc_cfg_file =
        "${rbe_cfg_dir}/chromium-browser-clang/rewrapper_windows.cfg"
    rbe_link_cfg_file = ""
  } else if (is_mac || is_ios) {
    rbe_py_cfg_file = "${rbe_cfg_dir}/python/rewrapper_mac.cfg"
    rbe_cc_cfg_file = "${rbe_cfg_dir}/chromium-browser-clang/rewrapper_mac.cfg"
    rbe_link_cfg_file = ""
  } else {
    rbe_linkcfg_file = ""
    rbe_py_cfg_file = ""
    rbe_cc_cfg_file = ""
  }

  # Set to the path of the RBE recleint wrapper for ChromeOS.
  rbe_cros_cc_wrapper = "${rbe_bin_dir}/rewrapper"
}

if (is_win) {
  if (use_remoteexec_links) {
    print("For now, remote linking is not available for Windows.")
    use_remoteexec_links = false
  }
}
if (is_mac || is_ios) {
  if (use_remoteexec_links) {
    print("For now, remote linking is not available on Macs.")
    use_remoteexec_links = false
  }
}
