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

# Defines the configuration of RBE and related global variables.

# Prebuilt RBE binaries
rbe_common_tools = [
  "//prebuilt/proprietary/third_party/reclient/$host_platform/bootstrap",
  "//prebuilt/proprietary/third_party/reclient/$host_platform/reproxy",
  "//prebuilt/proprietary/third_party/reclient/$host_platform/rewrapper",
]

# Toolchain-agnostic RBE scripts and configuration.
rbe_common_scripts = [
  "//build/rbe/fuchsia-rbe-action.sh",
  "//build/rbe/fuchsia-re-client.cfg",
  "//build/rbe/fuchsia-reproxy-wrap.sh",
]

rustc_remote_wrapper = "//build/rbe/rustc-remote-wrapper.sh"

# Dependencies for all RBE-enabled rust actions.
rust_rbe_deps = rbe_common_tools + rbe_common_scripts + [ rustc_remote_wrapper ]

cxx_remote_wrapper = "//build/rbe/cxx-remote-wrapper.sh"

# Dependencies for all RBE-enabled C++ actions.
cxx_rbe_deps = rbe_common_tools + rbe_common_scripts + [ cxx_remote_wrapper ]

declare_args() {
  # Set to true to enable distributed compilation using RBE.
  # This may affect Rust and C++ compiles.
  enable_rbe = false

  # Set to true to distribute C++ compiles remotely using RBE.
  # This takes precedence over `use_goma` in //build/toolchain/goma.gni.
  # This feature is experimental and will be likely renamed later.
  #
  # Requires GN args:
  #   `enable_rbe = true`
  #
  use_reclient_cxx_experimental = false

  # One of {local,remote}:
  #   * remote: Execute action remotely on cache miss.
  #         The remote cache is always updated with this result.
  #   * local: Lookup action in the remote cache, but execute action
  #         locally on cache miss.  The locally produced result is
  #         not uploaded to the remote cache.
  #   (There are other rewrapper options that are not exposed.)
  rbe_exec_strategy = "remote"

  ################################################################
  ### Special test modes: enable at most one of the following: ###
  ################################################################

  # Check of determinism of rustc targets by running locally twice
  # and comparing outputs, failing if any differences are found.
  # Even though this check doesn't involve RBE, it uses the same
  # wrapper script, which knows what output files to expect and compare.
  #
  # Build outputs that depend on time are discouraged because they
  # impact caching.
  # If your result depends on the current time, this check will
  # definitely fail.  If it depends on only the date, there is still
  # a nonzero chance of failure, if the rerun falls on the next day.
  #
  # Requires GN args:
  #   `enable_rbe = true`
  #     to use the remote wrapper script, even without RBE
  #
  # Ignores:
  #   `rbe_exec_strategy`
  #     because RBE is not used
  #
  check_rustc_determinism = false

  # Check consistency between local and remote rust compiles.
  # This check is slow and expensive and mostly intended for CI.
  #
  # Requires GN args:
  #   `enable_rbe = true`
  #
  check_rustc_consistency = false
}
