platform_build/rbesetup.sh
Kousik Kumar 721533e0d6 Add the ability to source RBE related scripts from envsetup.sh
This is so that developers don't have to remember to source a separate
script to source RBE related variables.
I'll modify the docs once this change is submitted.

Test:
Ran forrest build with fix for previous build failure - https://android-build.googleplex.com/builds/abtd/run/L72300000950316038

Bug: b/193407413
Change-Id: I16f057086e2ee4f5918816ea70dbb33d0f5e99ab
2021-07-14 11:31:54 -04:00

82 lines
2.9 KiB
Bash

function _source_env_setup_script() {
local -r ENV_SETUP_SCRIPT="build/make/envsetup.sh"
local -r TOP_DIR=$(
while [[ ! -f "${ENV_SETUP_SCRIPT}" ]] && [[ "${PWD}" != "/" ]]; do
\cd ..
done
if [[ -f "${ENV_SETUP_SCRIPT}" ]]; then
echo "$(PWD= /bin/pwd -P)"
fi
)
local -r FULL_PATH_ENV_SETUP_SCRIPT="${TOP_DIR}/${ENV_SETUP_SCRIPT}"
if [[ ! -f "${FULL_PATH_ENV_SETUP_SCRIPT}" ]]; then
echo "ERROR: Unable to source ${ENV_SETUP_SCRIPT}"
return 1
fi
# Need to change directory to the repo root so vendor scripts can be sourced
# as well.
local -r CUR_DIR=$PWD
\cd "${TOP_DIR}"
source "${FULL_PATH_ENV_SETUP_SCRIPT}"
\cd "${CUR_DIR}"
}
# This function needs to run first as the remaining defining functions may be
# using the envsetup.sh defined functions. Skip this part if this script is already
# being invoked from envsetup.sh.
if [[ "$1" != "--skip-envsetup" ]]; then
_source_env_setup_script || return
fi
# This function prefixes the given command with appropriate variables needed
# for the build to be executed with RBE.
function use_rbe() {
local RBE_LOG_DIR="/tmp"
local RBE_BINARIES_DIR="prebuilts/remoteexecution-client/latest"
local DOCKER_IMAGE="gcr.io/androidbuild-re-dockerimage/android-build-remoteexec-image@sha256:582efb38f0c229ea39952fff9e132ccbe183e14869b39888010dacf56b360d62"
# Do not set an invocation-ID and let reproxy auto-generate one.
USE_RBE="true" \
FLAG_server_address="unix:///tmp/reproxy_$RANDOM.sock" \
FLAG_exec_root="$(gettop)" \
FLAG_platform="container-image=docker://${DOCKER_IMAGE}" \
RBE_use_application_default_credentials="true" \
RBE_log_dir="${RBE_LOG_DIR}" \
RBE_reproxy_wait_seconds="20" \
RBE_output_dir="${RBE_LOG_DIR}" \
RBE_log_path="text://${RBE_LOG_DIR}/reproxy_log.txt" \
RBE_CXX_EXEC_STRATEGY="remote_local_fallback" \
RBE_cpp_dependency_scanner_plugin="${RBE_BINARIES_DIR}/dependency_scanner_go_plugin.so" \
RBE_DIR=${RBE_BINARIES_DIR} \
RBE_re_proxy="${RBE_BINARIES_DIR}/reproxy" \
$@
}
# This function detects if the uploader is available and sets the path of it to
# ANDROID_ENABLE_METRICS_UPLOAD.
function _export_metrics_uploader() {
local uploader_path="$(gettop)/vendor/google/misc/metrics_uploader_prebuilt/metrics_uploader.sh"
if [[ -x "${uploader_path}" ]]; then
export ANDROID_ENABLE_METRICS_UPLOAD="${uploader_path}"
fi
}
# This function sets RBE specific environment variables needed for the build to
# executed by RBE. This file should be sourced once per checkout of Android code.
function _set_rbe_vars() {
unset USE_GOMA
export USE_RBE="true"
export RBE_CXX_EXEC_STRATEGY="racing"
export RBE_JAVAC_EXEC_STRATEGY="racing"
export RBE_R8_EXEC_STRATEGY="racing"
export RBE_D8_EXEC_STRATEGY="racing"
export RBE_use_unified_cas_ops="true"
export RBE_JAVAC=1
export RBE_R8=1
export RBE_D8=1
}
_export_metrics_uploader
_set_rbe_vars