1function _source_env_setup_script() {
2  local -r ENV_SETUP_SCRIPT="build/make/envsetup.sh"
3  local -r TOP_DIR=$(
4    while [[ ! -f "${ENV_SETUP_SCRIPT}" ]] && [[ "${PWD}" != "/" ]]; do
5      \cd ..
6    done
7    if [[ -f "${ENV_SETUP_SCRIPT}" ]]; then
8      echo "$(PWD= /bin/pwd -P)"
9    fi
10  )
11
12  local -r FULL_PATH_ENV_SETUP_SCRIPT="${TOP_DIR}/${ENV_SETUP_SCRIPT}"
13  if [[ ! -f "${FULL_PATH_ENV_SETUP_SCRIPT}" ]]; then
14    echo "ERROR: Unable to source ${ENV_SETUP_SCRIPT}"
15    return 1
16  fi
17
18  # Need to change directory to the repo root so vendor scripts can be sourced
19  # as well.
20  local -r CUR_DIR=$PWD
21  \cd "${TOP_DIR}"
22  source "${FULL_PATH_ENV_SETUP_SCRIPT}"
23  \cd "${CUR_DIR}"
24}
25
26# This function needs to run first as the remaining defining functions may be
27# using the envsetup.sh defined functions.
28_source_env_setup_script || return
29
30# This function prefixes the given command with appropriate variables needed
31# for the build to be executed with RBE.
32function use_rbe() {
33  local RBE_LOG_DIR="/tmp"
34  local RBE_BINARIES_DIR="prebuilts/remoteexecution-client/latest"
35  local DOCKER_IMAGE="gcr.io/androidbuild-re-dockerimage/android-build-remoteexec-image@sha256:582efb38f0c229ea39952fff9e132ccbe183e14869b39888010dacf56b360d62"
36
37  # Do not set an invocation-ID and let reproxy auto-generate one.
38  USE_RBE="true" \
39  FLAG_server_address="unix:///tmp/reproxy_$RANDOM.sock" \
40  FLAG_exec_root="$(gettop)" \
41  FLAG_platform="container-image=docker://${DOCKER_IMAGE}" \
42  RBE_use_application_default_credentials="true" \
43  RBE_log_dir="${RBE_LOG_DIR}" \
44  RBE_reproxy_wait_seconds="20" \
45  RBE_output_dir="${RBE_LOG_DIR}" \
46  RBE_log_path="text://${RBE_LOG_DIR}/reproxy_log.txt" \
47  RBE_CXX_EXEC_STRATEGY="remote_local_fallback" \
48  RBE_cpp_dependency_scanner_plugin="${RBE_BINARIES_DIR}/dependency_scanner_go_plugin.so" \
49  RBE_DIR=${RBE_BINARIES_DIR} \
50  RBE_re_proxy="${RBE_BINARIES_DIR}/reproxy" \
51  $@
52}
53
54# This function detects if the uploader is available and sets the path of it to
55# ANDROID_ENABLE_METRICS_UPLOAD.
56function _export_metrics_uploader() {
57  local uploader_path="$(gettop)/vendor/google/misc/metrics_uploader_prebuilt/metrics_uploader.sh"
58  if [[ -x "${uploader_path}" ]]; then
59    export ANDROID_ENABLE_METRICS_UPLOAD="${uploader_path}"
60  fi
61}
62
63# This function sets RBE specific environment variables needed for the build to
64# executed by RBE. This file should be sourced once per checkout of Android code.
65function _set_rbe_vars() {
66  unset USE_GOMA
67  export USE_RBE="true"
68  export RBE_CXX_EXEC_STRATEGY="racing"
69  export RBE_JAVAC_EXEC_STRATEGY="racing"
70  export RBE_R8_EXEC_STRATEGY="racing"
71  export RBE_D8_EXEC_STRATEGY="racing"
72  export RBE_use_unified_cas_ops="true"
73  export RBE_JAVAC=1
74  export RBE_R8=1
75  export RBE_D8=1
76}
77
78_export_metrics_uploader
79_set_rbe_vars
80