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