1*9e94795aSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project 2*9e94795aSAndroid Build Coastguard Worker# 3*9e94795aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*9e94795aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*9e94795aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*9e94795aSAndroid Build Coastguard Worker# 7*9e94795aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*9e94795aSAndroid Build Coastguard Worker# 9*9e94795aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*9e94795aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*9e94795aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9e94795aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*9e94795aSAndroid Build Coastguard Worker# limitations under the License. 14*9e94795aSAndroid Build Coastguard Worker 15*9e94795aSAndroid Build Coastguard Worker# gettop is duplicated here and in shell_utils.mk, because it's difficult 16*9e94795aSAndroid Build Coastguard Worker# to find shell_utils.make without it for all the novel ways this file can be 17*9e94795aSAndroid Build Coastguard Worker# sourced. Other common functions should only be in one place or the other. 18*9e94795aSAndroid Build Coastguard Workerfunction _gettop_once 19*9e94795aSAndroid Build Coastguard Worker{ 20*9e94795aSAndroid Build Coastguard Worker local TOPFILE=build/make/core/envsetup.mk 21*9e94795aSAndroid Build Coastguard Worker if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then 22*9e94795aSAndroid Build Coastguard Worker # The following circumlocution ensures we remove symlinks from TOP. 23*9e94795aSAndroid Build Coastguard Worker (cd "$TOP"; PWD= /bin/pwd) 24*9e94795aSAndroid Build Coastguard Worker else 25*9e94795aSAndroid Build Coastguard Worker if [ -f $TOPFILE ] ; then 26*9e94795aSAndroid Build Coastguard Worker # The following circumlocution (repeated below as well) ensures 27*9e94795aSAndroid Build Coastguard Worker # that we record the true directory name and not one that is 28*9e94795aSAndroid Build Coastguard Worker # faked up with symlink names. 29*9e94795aSAndroid Build Coastguard Worker PWD= /bin/pwd 30*9e94795aSAndroid Build Coastguard Worker else 31*9e94795aSAndroid Build Coastguard Worker local HERE=$PWD 32*9e94795aSAndroid Build Coastguard Worker local T= 33*9e94795aSAndroid Build Coastguard Worker while [ \( ! \( -f $TOPFILE \) \) -a \( "$PWD" != "/" \) ]; do 34*9e94795aSAndroid Build Coastguard Worker \cd .. 35*9e94795aSAndroid Build Coastguard Worker T=`PWD= /bin/pwd -P` 36*9e94795aSAndroid Build Coastguard Worker done 37*9e94795aSAndroid Build Coastguard Worker \cd "$HERE" 38*9e94795aSAndroid Build Coastguard Worker if [ -f "$T/$TOPFILE" ]; then 39*9e94795aSAndroid Build Coastguard Worker echo "$T" 40*9e94795aSAndroid Build Coastguard Worker fi 41*9e94795aSAndroid Build Coastguard Worker fi 42*9e94795aSAndroid Build Coastguard Worker fi 43*9e94795aSAndroid Build Coastguard Worker} 44*9e94795aSAndroid Build Coastguard WorkerT=$(_gettop_once) 45*9e94795aSAndroid Build Coastguard Workerif [ ! "$T" ]; then 46*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Always source build/envsetup.sh from the root of the tree." >&2 47*9e94795aSAndroid Build Coastguard Worker return 1 48*9e94795aSAndroid Build Coastguard Workerfi 49*9e94795aSAndroid Build Coastguard WorkerIMPORTING_ENVSETUP=true source $T/build/make/shell_utils.sh 50*9e94795aSAndroid Build Coastguard Worker 51*9e94795aSAndroid Build Coastguard Worker# Get all the build variables needed by this script in a single call to the build system. 52*9e94795aSAndroid Build Coastguard Workerfunction build_build_var_cache() 53*9e94795aSAndroid Build Coastguard Worker{ 54*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 55*9e94795aSAndroid Build Coastguard Worker # Grep out the variable names from the script. 56*9e94795aSAndroid Build Coastguard Worker cached_vars=(`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/_get_build_var_cached/) print $(i+1)}' | sort -u | tr '\n' ' '`) 57*9e94795aSAndroid Build Coastguard Worker cached_abs_vars=(`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/_get_abs_build_var_cached/) print $(i+1)}' | sort -u | tr '\n' ' '`) 58*9e94795aSAndroid Build Coastguard Worker # Call the build system to dump the "<val>=<value>" pairs as a shell script. 59*9e94795aSAndroid Build Coastguard Worker build_dicts_script=`\builtin cd $T; build/soong/soong_ui.bash --dumpvars-mode \ 60*9e94795aSAndroid Build Coastguard Worker --vars="${cached_vars[*]}" \ 61*9e94795aSAndroid Build Coastguard Worker --abs-vars="${cached_abs_vars[*]}" \ 62*9e94795aSAndroid Build Coastguard Worker --var-prefix=var_cache_ \ 63*9e94795aSAndroid Build Coastguard Worker --abs-var-prefix=abs_var_cache_` 64*9e94795aSAndroid Build Coastguard Worker local ret=$? 65*9e94795aSAndroid Build Coastguard Worker if [ $ret -ne 0 ] 66*9e94795aSAndroid Build Coastguard Worker then 67*9e94795aSAndroid Build Coastguard Worker unset build_dicts_script 68*9e94795aSAndroid Build Coastguard Worker return $ret 69*9e94795aSAndroid Build Coastguard Worker fi 70*9e94795aSAndroid Build Coastguard Worker # Execute the script to store the "<val>=<value>" pairs as shell variables. 71*9e94795aSAndroid Build Coastguard Worker eval "$build_dicts_script" 72*9e94795aSAndroid Build Coastguard Worker ret=$? 73*9e94795aSAndroid Build Coastguard Worker unset build_dicts_script 74*9e94795aSAndroid Build Coastguard Worker if [ $ret -ne 0 ] 75*9e94795aSAndroid Build Coastguard Worker then 76*9e94795aSAndroid Build Coastguard Worker return $ret 77*9e94795aSAndroid Build Coastguard Worker fi 78*9e94795aSAndroid Build Coastguard Worker BUILD_VAR_CACHE_READY="true" 79*9e94795aSAndroid Build Coastguard Worker} 80*9e94795aSAndroid Build Coastguard Worker 81*9e94795aSAndroid Build Coastguard Worker# Delete the build var cache, so that we can still call into the build system 82*9e94795aSAndroid Build Coastguard Worker# to get build variables not listed in this script. 83*9e94795aSAndroid Build Coastguard Workerfunction destroy_build_var_cache() 84*9e94795aSAndroid Build Coastguard Worker{ 85*9e94795aSAndroid Build Coastguard Worker unset BUILD_VAR_CACHE_READY 86*9e94795aSAndroid Build Coastguard Worker local v 87*9e94795aSAndroid Build Coastguard Worker for v in $cached_vars; do 88*9e94795aSAndroid Build Coastguard Worker unset var_cache_$v 89*9e94795aSAndroid Build Coastguard Worker done 90*9e94795aSAndroid Build Coastguard Worker unset cached_vars 91*9e94795aSAndroid Build Coastguard Worker for v in $cached_abs_vars; do 92*9e94795aSAndroid Build Coastguard Worker unset abs_var_cache_$v 93*9e94795aSAndroid Build Coastguard Worker done 94*9e94795aSAndroid Build Coastguard Worker unset cached_abs_vars 95*9e94795aSAndroid Build Coastguard Worker} 96*9e94795aSAndroid Build Coastguard Worker 97*9e94795aSAndroid Build Coastguard Worker# Get the value of a build variable as an absolute path. 98*9e94795aSAndroid Build Coastguard Workerfunction _get_abs_build_var_cached() 99*9e94795aSAndroid Build Coastguard Worker{ 100*9e94795aSAndroid Build Coastguard Worker if [ "$BUILD_VAR_CACHE_READY" = "true" ] 101*9e94795aSAndroid Build Coastguard Worker then 102*9e94795aSAndroid Build Coastguard Worker eval "echo \"\${abs_var_cache_$1}\"" 103*9e94795aSAndroid Build Coastguard Worker return 104*9e94795aSAndroid Build Coastguard Worker fi 105*9e94795aSAndroid Build Coastguard Worker 106*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 107*9e94795aSAndroid Build Coastguard Worker if [ ! "$T" ]; then 108*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Try setting TOP." >&2 109*9e94795aSAndroid Build Coastguard Worker return 110*9e94795aSAndroid Build Coastguard Worker fi 111*9e94795aSAndroid Build Coastguard Worker (\cd $T; build/soong/soong_ui.bash --dumpvar-mode --abs $1) 112*9e94795aSAndroid Build Coastguard Worker} 113*9e94795aSAndroid Build Coastguard Worker 114*9e94795aSAndroid Build Coastguard Worker# Get the exact value of a build variable. 115*9e94795aSAndroid Build Coastguard Workerfunction _get_build_var_cached() 116*9e94795aSAndroid Build Coastguard Worker{ 117*9e94795aSAndroid Build Coastguard Worker if [ "$BUILD_VAR_CACHE_READY" = "true" ] 118*9e94795aSAndroid Build Coastguard Worker then 119*9e94795aSAndroid Build Coastguard Worker eval "echo \"\${var_cache_$1}\"" 120*9e94795aSAndroid Build Coastguard Worker return 0 121*9e94795aSAndroid Build Coastguard Worker fi 122*9e94795aSAndroid Build Coastguard Worker 123*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 124*9e94795aSAndroid Build Coastguard Worker if [ ! "$T" ]; then 125*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Try setting TOP." >&2 126*9e94795aSAndroid Build Coastguard Worker return 1 127*9e94795aSAndroid Build Coastguard Worker fi 128*9e94795aSAndroid Build Coastguard Worker (\cd $T; build/soong/soong_ui.bash --dumpvar-mode $1) 129*9e94795aSAndroid Build Coastguard Worker} 130*9e94795aSAndroid Build Coastguard Worker 131*9e94795aSAndroid Build Coastguard Worker# This logic matches envsetup.mk 132*9e94795aSAndroid Build Coastguard Workerfunction get_host_prebuilt_prefix 133*9e94795aSAndroid Build Coastguard Worker{ 134*9e94795aSAndroid Build Coastguard Worker local un=$(uname) 135*9e94795aSAndroid Build Coastguard Worker if [[ $un == "Linux" ]] ; then 136*9e94795aSAndroid Build Coastguard Worker echo linux-x86 137*9e94795aSAndroid Build Coastguard Worker elif [[ $un == "Darwin" ]] ; then 138*9e94795aSAndroid Build Coastguard Worker echo darwin-x86 139*9e94795aSAndroid Build Coastguard Worker else 140*9e94795aSAndroid Build Coastguard Worker echo "Error: Invalid host operating system: $un" 1>&2 141*9e94795aSAndroid Build Coastguard Worker fi 142*9e94795aSAndroid Build Coastguard Worker} 143*9e94795aSAndroid Build Coastguard Worker 144*9e94795aSAndroid Build Coastguard Worker# Add directories to PATH that are dependent on the lunch target. 145*9e94795aSAndroid Build Coastguard Worker# For directories that are not lunch-specific, add them in set_global_paths 146*9e94795aSAndroid Build Coastguard Workerfunction set_lunch_paths() 147*9e94795aSAndroid Build Coastguard Worker{ 148*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 149*9e94795aSAndroid Build Coastguard Worker if [ ! "$T" ]; then 150*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Try setting TOP." 151*9e94795aSAndroid Build Coastguard Worker return 152*9e94795aSAndroid Build Coastguard Worker fi 153*9e94795aSAndroid Build Coastguard Worker 154*9e94795aSAndroid Build Coastguard Worker ################################################################## 155*9e94795aSAndroid Build Coastguard Worker # # 156*9e94795aSAndroid Build Coastguard Worker # Read me before you modify this code # 157*9e94795aSAndroid Build Coastguard Worker # # 158*9e94795aSAndroid Build Coastguard Worker # This function sets ANDROID_LUNCH_BUILD_PATHS to what it is # 159*9e94795aSAndroid Build Coastguard Worker # adding to PATH, and the next time it is run, it removes that # 160*9e94795aSAndroid Build Coastguard Worker # from PATH. This is required so lunch can be run more than # 161*9e94795aSAndroid Build Coastguard Worker # once and still have working paths. # 162*9e94795aSAndroid Build Coastguard Worker # # 163*9e94795aSAndroid Build Coastguard Worker ################################################################## 164*9e94795aSAndroid Build Coastguard Worker 165*9e94795aSAndroid Build Coastguard Worker # Note: on windows/cygwin, ANDROID_LUNCH_BUILD_PATHS will contain spaces 166*9e94795aSAndroid Build Coastguard Worker # due to "C:\Program Files" being in the path. 167*9e94795aSAndroid Build Coastguard Worker 168*9e94795aSAndroid Build Coastguard Worker # Handle compat with the old ANDROID_BUILD_PATHS variable. 169*9e94795aSAndroid Build Coastguard Worker # TODO: Remove this after we think everyone has lunched again. 170*9e94795aSAndroid Build Coastguard Worker if [ -z "$ANDROID_LUNCH_BUILD_PATHS" -a -n "$ANDROID_BUILD_PATHS" ] ; then 171*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS="$ANDROID_BUILD_PATHS" 172*9e94795aSAndroid Build Coastguard Worker ANDROID_BUILD_PATHS= 173*9e94795aSAndroid Build Coastguard Worker fi 174*9e94795aSAndroid Build Coastguard Worker if [ -n "$ANDROID_PRE_BUILD_PATHS" ] ; then 175*9e94795aSAndroid Build Coastguard Worker export PATH=${PATH/$ANDROID_PRE_BUILD_PATHS/} 176*9e94795aSAndroid Build Coastguard Worker # strip leading ':', if any 177*9e94795aSAndroid Build Coastguard Worker export PATH=${PATH/:%/} 178*9e94795aSAndroid Build Coastguard Worker ANDROID_PRE_BUILD_PATHS= 179*9e94795aSAndroid Build Coastguard Worker fi 180*9e94795aSAndroid Build Coastguard Worker 181*9e94795aSAndroid Build Coastguard Worker # Out with the old... 182*9e94795aSAndroid Build Coastguard Worker if [ -n "$ANDROID_LUNCH_BUILD_PATHS" ] ; then 183*9e94795aSAndroid Build Coastguard Worker export PATH=${PATH/$ANDROID_LUNCH_BUILD_PATHS/} 184*9e94795aSAndroid Build Coastguard Worker fi 185*9e94795aSAndroid Build Coastguard Worker 186*9e94795aSAndroid Build Coastguard Worker # And in with the new... 187*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS=$(_get_abs_build_var_cached SOONG_HOST_OUT_EXECUTABLES) 188*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS+=:$(_get_abs_build_var_cached HOST_OUT_EXECUTABLES) 189*9e94795aSAndroid Build Coastguard Worker 190*9e94795aSAndroid Build Coastguard Worker # Append llvm binutils prebuilts path to ANDROID_LUNCH_BUILD_PATHS. 191*9e94795aSAndroid Build Coastguard Worker local ANDROID_LLVM_BINUTILS=$(_get_abs_build_var_cached ANDROID_CLANG_PREBUILTS)/llvm-binutils-stable 192*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS+=:$ANDROID_LLVM_BINUTILS 193*9e94795aSAndroid Build Coastguard Worker 194*9e94795aSAndroid Build Coastguard Worker # Set up ASAN_SYMBOLIZER_PATH for SANITIZE_HOST=address builds. 195*9e94795aSAndroid Build Coastguard Worker export ASAN_SYMBOLIZER_PATH=$ANDROID_LLVM_BINUTILS/llvm-symbolizer 196*9e94795aSAndroid Build Coastguard Worker 197*9e94795aSAndroid Build Coastguard Worker # Append asuite prebuilts path to ANDROID_LUNCH_BUILD_PATHS. 198*9e94795aSAndroid Build Coastguard Worker local os_arch=$(_get_build_var_cached HOST_PREBUILT_TAG) 199*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS+=:$T/prebuilts/asuite/acloud/$os_arch 200*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS+=:$T/prebuilts/asuite/aidegen/$os_arch 201*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS+=:$T/prebuilts/asuite/atest/$os_arch 202*9e94795aSAndroid Build Coastguard Worker 203*9e94795aSAndroid Build Coastguard Worker export ANDROID_JAVA_HOME=$(_get_abs_build_var_cached ANDROID_JAVA_HOME) 204*9e94795aSAndroid Build Coastguard Worker export JAVA_HOME=$ANDROID_JAVA_HOME 205*9e94795aSAndroid Build Coastguard Worker export ANDROID_JAVA_TOOLCHAIN=$(_get_abs_build_var_cached ANDROID_JAVA_TOOLCHAIN) 206*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_BUILD_PATHS+=:$ANDROID_JAVA_TOOLCHAIN 207*9e94795aSAndroid Build Coastguard Worker 208*9e94795aSAndroid Build Coastguard Worker # Fix up PYTHONPATH 209*9e94795aSAndroid Build Coastguard Worker if [ -n $ANDROID_PYTHONPATH ]; then 210*9e94795aSAndroid Build Coastguard Worker export PYTHONPATH=${PYTHONPATH//$ANDROID_PYTHONPATH/} 211*9e94795aSAndroid Build Coastguard Worker fi 212*9e94795aSAndroid Build Coastguard Worker # //development/python-packages contains both a pseudo-PYTHONPATH which 213*9e94795aSAndroid Build Coastguard Worker # mimics an already assembled venv, but also contains real Python packages 214*9e94795aSAndroid Build Coastguard Worker # that are not in that layout until they are installed. We can fake it for 215*9e94795aSAndroid Build Coastguard Worker # the latter type by adding the package source directories to the PYTHONPATH 216*9e94795aSAndroid Build Coastguard Worker # directly. For the former group, we only need to add the python-packages 217*9e94795aSAndroid Build Coastguard Worker # directory itself. 218*9e94795aSAndroid Build Coastguard Worker # 219*9e94795aSAndroid Build Coastguard Worker # This could be cleaned up by converting the remaining packages that are in 220*9e94795aSAndroid Build Coastguard Worker # the first category into a typical python source layout (that is, another 221*9e94795aSAndroid Build Coastguard Worker # layer of directory nesting) and automatically adding all subdirectories of 222*9e94795aSAndroid Build Coastguard Worker # python-packages to the PYTHONPATH instead of manually curating this. We 223*9e94795aSAndroid Build Coastguard Worker # can't convert the packages like adb to the other style because doing so 224*9e94795aSAndroid Build Coastguard Worker # would prevent exporting type info from those packages. 225*9e94795aSAndroid Build Coastguard Worker # 226*9e94795aSAndroid Build Coastguard Worker # http://b/266688086 227*9e94795aSAndroid Build Coastguard Worker export ANDROID_PYTHONPATH=$T/development/python-packages/adb:$T/development/python-packages/gdbrunner:$T/development/python-packages: 228*9e94795aSAndroid Build Coastguard Worker if [ -n $VENDOR_PYTHONPATH ]; then 229*9e94795aSAndroid Build Coastguard Worker ANDROID_PYTHONPATH=$ANDROID_PYTHONPATH$VENDOR_PYTHONPATH 230*9e94795aSAndroid Build Coastguard Worker fi 231*9e94795aSAndroid Build Coastguard Worker export PYTHONPATH=$ANDROID_PYTHONPATH$PYTHONPATH 232*9e94795aSAndroid Build Coastguard Worker 233*9e94795aSAndroid Build Coastguard Worker unset ANDROID_PRODUCT_OUT 234*9e94795aSAndroid Build Coastguard Worker export ANDROID_PRODUCT_OUT=$(_get_abs_build_var_cached PRODUCT_OUT) 235*9e94795aSAndroid Build Coastguard Worker export OUT=$ANDROID_PRODUCT_OUT 236*9e94795aSAndroid Build Coastguard Worker 237*9e94795aSAndroid Build Coastguard Worker unset ANDROID_HOST_OUT 238*9e94795aSAndroid Build Coastguard Worker export ANDROID_HOST_OUT=$(_get_abs_build_var_cached HOST_OUT) 239*9e94795aSAndroid Build Coastguard Worker 240*9e94795aSAndroid Build Coastguard Worker unset ANDROID_SOONG_HOST_OUT 241*9e94795aSAndroid Build Coastguard Worker export ANDROID_SOONG_HOST_OUT=$(_get_abs_build_var_cached SOONG_HOST_OUT) 242*9e94795aSAndroid Build Coastguard Worker 243*9e94795aSAndroid Build Coastguard Worker unset ANDROID_HOST_OUT_TESTCASES 244*9e94795aSAndroid Build Coastguard Worker export ANDROID_HOST_OUT_TESTCASES=$(_get_abs_build_var_cached HOST_OUT_TESTCASES) 245*9e94795aSAndroid Build Coastguard Worker 246*9e94795aSAndroid Build Coastguard Worker unset ANDROID_TARGET_OUT_TESTCASES 247*9e94795aSAndroid Build Coastguard Worker export ANDROID_TARGET_OUT_TESTCASES=$(_get_abs_build_var_cached TARGET_OUT_TESTCASES) 248*9e94795aSAndroid Build Coastguard Worker 249*9e94795aSAndroid Build Coastguard Worker # Finally, set PATH 250*9e94795aSAndroid Build Coastguard Worker export PATH=$ANDROID_LUNCH_BUILD_PATHS:$PATH 251*9e94795aSAndroid Build Coastguard Worker} 252*9e94795aSAndroid Build Coastguard Worker 253*9e94795aSAndroid Build Coastguard Worker# Add directories to PATH that are NOT dependent on the lunch target. 254*9e94795aSAndroid Build Coastguard Worker# For directories that are lunch-specific, add them in set_lunch_paths 255*9e94795aSAndroid Build Coastguard Workerfunction set_global_paths() 256*9e94795aSAndroid Build Coastguard Worker{ 257*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 258*9e94795aSAndroid Build Coastguard Worker if [ ! "$T" ]; then 259*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Try setting TOP." 260*9e94795aSAndroid Build Coastguard Worker return 261*9e94795aSAndroid Build Coastguard Worker fi 262*9e94795aSAndroid Build Coastguard Worker 263*9e94795aSAndroid Build Coastguard Worker ################################################################## 264*9e94795aSAndroid Build Coastguard Worker # # 265*9e94795aSAndroid Build Coastguard Worker # Read me before you modify this code # 266*9e94795aSAndroid Build Coastguard Worker # # 267*9e94795aSAndroid Build Coastguard Worker # This function sets ANDROID_GLOBAL_BUILD_PATHS to what it is # 268*9e94795aSAndroid Build Coastguard Worker # adding to PATH, and the next time it is run, it removes that # 269*9e94795aSAndroid Build Coastguard Worker # from PATH. This is required so envsetup.sh can be sourced # 270*9e94795aSAndroid Build Coastguard Worker # more than once and still have working paths. # 271*9e94795aSAndroid Build Coastguard Worker # # 272*9e94795aSAndroid Build Coastguard Worker ################################################################## 273*9e94795aSAndroid Build Coastguard Worker 274*9e94795aSAndroid Build Coastguard Worker # Out with the old... 275*9e94795aSAndroid Build Coastguard Worker if [ -n "$ANDROID_GLOBAL_BUILD_PATHS" ] ; then 276*9e94795aSAndroid Build Coastguard Worker export PATH=${PATH/$ANDROID_GLOBAL_BUILD_PATHS/} 277*9e94795aSAndroid Build Coastguard Worker fi 278*9e94795aSAndroid Build Coastguard Worker 279*9e94795aSAndroid Build Coastguard Worker # And in with the new... 280*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS=$T/build/soong/bin 281*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS+=:$T/build/bazel/bin 282*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS+=:$T/development/scripts 283*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS+=:$T/prebuilts/devtools/tools 284*9e94795aSAndroid Build Coastguard Worker 285*9e94795aSAndroid Build Coastguard Worker # add kernel specific binaries 286*9e94795aSAndroid Build Coastguard Worker if [ $(uname -s) = Linux ] ; then 287*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS+=:$T/prebuilts/misc/linux-x86/dtc 288*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS+=:$T/prebuilts/misc/linux-x86/libufdt 289*9e94795aSAndroid Build Coastguard Worker fi 290*9e94795aSAndroid Build Coastguard Worker 291*9e94795aSAndroid Build Coastguard Worker # If prebuilts/android-emulator/<system>/ exists, prepend it to our PATH 292*9e94795aSAndroid Build Coastguard Worker # to ensure that the corresponding 'emulator' binaries are used. 293*9e94795aSAndroid Build Coastguard Worker case $(uname -s) in 294*9e94795aSAndroid Build Coastguard Worker Darwin) 295*9e94795aSAndroid Build Coastguard Worker ANDROID_EMULATOR_PREBUILTS=$T/prebuilts/android-emulator/darwin-x86_64 296*9e94795aSAndroid Build Coastguard Worker ;; 297*9e94795aSAndroid Build Coastguard Worker Linux) 298*9e94795aSAndroid Build Coastguard Worker ANDROID_EMULATOR_PREBUILTS=$T/prebuilts/android-emulator/linux-x86_64 299*9e94795aSAndroid Build Coastguard Worker ;; 300*9e94795aSAndroid Build Coastguard Worker *) 301*9e94795aSAndroid Build Coastguard Worker ANDROID_EMULATOR_PREBUILTS= 302*9e94795aSAndroid Build Coastguard Worker ;; 303*9e94795aSAndroid Build Coastguard Worker esac 304*9e94795aSAndroid Build Coastguard Worker if [ -n "$ANDROID_EMULATOR_PREBUILTS" -a -d "$ANDROID_EMULATOR_PREBUILTS" ]; then 305*9e94795aSAndroid Build Coastguard Worker ANDROID_GLOBAL_BUILD_PATHS+=:$ANDROID_EMULATOR_PREBUILTS 306*9e94795aSAndroid Build Coastguard Worker export ANDROID_EMULATOR_PREBUILTS 307*9e94795aSAndroid Build Coastguard Worker fi 308*9e94795aSAndroid Build Coastguard Worker 309*9e94795aSAndroid Build Coastguard Worker # Finally, set PATH 310*9e94795aSAndroid Build Coastguard Worker export PATH=$ANDROID_GLOBAL_BUILD_PATHS:$PATH 311*9e94795aSAndroid Build Coastguard Worker} 312*9e94795aSAndroid Build Coastguard Worker 313*9e94795aSAndroid Build Coastguard Workerfunction printconfig() 314*9e94795aSAndroid Build Coastguard Worker{ 315*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 316*9e94795aSAndroid Build Coastguard Worker if [ ! "$T" ]; then 317*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Try setting TOP." >&2 318*9e94795aSAndroid Build Coastguard Worker return 319*9e94795aSAndroid Build Coastguard Worker fi 320*9e94795aSAndroid Build Coastguard Worker _get_build_var_cached report_config 321*9e94795aSAndroid Build Coastguard Worker} 322*9e94795aSAndroid Build Coastguard Worker 323*9e94795aSAndroid Build Coastguard Workerfunction set_stuff_for_environment() 324*9e94795aSAndroid Build Coastguard Worker{ 325*9e94795aSAndroid Build Coastguard Worker set_lunch_paths 326*9e94795aSAndroid Build Coastguard Worker set_sequence_number 327*9e94795aSAndroid Build Coastguard Worker 328*9e94795aSAndroid Build Coastguard Worker export ANDROID_BUILD_TOP=$(gettop) 329*9e94795aSAndroid Build Coastguard Worker} 330*9e94795aSAndroid Build Coastguard Worker 331*9e94795aSAndroid Build Coastguard Workerfunction set_sequence_number() 332*9e94795aSAndroid Build Coastguard Worker{ 333*9e94795aSAndroid Build Coastguard Worker export BUILD_ENV_SEQUENCE_NUMBER=13 334*9e94795aSAndroid Build Coastguard Worker} 335*9e94795aSAndroid Build Coastguard Worker 336*9e94795aSAndroid Build Coastguard Worker# Takes a command name, and check if it's in ENVSETUP_NO_COMPLETION or not. 337*9e94795aSAndroid Build Coastguard Workerfunction should_add_completion() { 338*9e94795aSAndroid Build Coastguard Worker local cmd="$(basename $1| sed 's/_completion//' |sed 's/\.\(.*\)*sh$//')" 339*9e94795aSAndroid Build Coastguard Worker case :"$ENVSETUP_NO_COMPLETION": in 340*9e94795aSAndroid Build Coastguard Worker *:"$cmd":*) 341*9e94795aSAndroid Build Coastguard Worker return 1 342*9e94795aSAndroid Build Coastguard Worker ;; 343*9e94795aSAndroid Build Coastguard Worker esac 344*9e94795aSAndroid Build Coastguard Worker return 0 345*9e94795aSAndroid Build Coastguard Worker} 346*9e94795aSAndroid Build Coastguard Worker 347*9e94795aSAndroid Build Coastguard Workerfunction addcompletions() 348*9e94795aSAndroid Build Coastguard Worker{ 349*9e94795aSAndroid Build Coastguard Worker local f= 350*9e94795aSAndroid Build Coastguard Worker 351*9e94795aSAndroid Build Coastguard Worker # Keep us from trying to run in something that's neither bash nor zsh. 352*9e94795aSAndroid Build Coastguard Worker if [ -z "$BASH_VERSION" -a -z "$ZSH_VERSION" ]; then 353*9e94795aSAndroid Build Coastguard Worker return 354*9e94795aSAndroid Build Coastguard Worker fi 355*9e94795aSAndroid Build Coastguard Worker 356*9e94795aSAndroid Build Coastguard Worker # Keep us from trying to run in bash that's too old. 357*9e94795aSAndroid Build Coastguard Worker if [ -n "$BASH_VERSION" -a ${BASH_VERSINFO[0]} -lt 3 ]; then 358*9e94795aSAndroid Build Coastguard Worker return 359*9e94795aSAndroid Build Coastguard Worker fi 360*9e94795aSAndroid Build Coastguard Worker 361*9e94795aSAndroid Build Coastguard Worker local completion_files=( 362*9e94795aSAndroid Build Coastguard Worker packages/modules/adb/adb.bash 363*9e94795aSAndroid Build Coastguard Worker system/core/fastboot/fastboot.bash 364*9e94795aSAndroid Build Coastguard Worker tools/asuite/asuite.sh 365*9e94795aSAndroid Build Coastguard Worker ) 366*9e94795aSAndroid Build Coastguard Worker # Completion can be disabled selectively to allow users to use non-standard completion. 367*9e94795aSAndroid Build Coastguard Worker # e.g. 368*9e94795aSAndroid Build Coastguard Worker # ENVSETUP_NO_COMPLETION=adb # -> disable adb completion 369*9e94795aSAndroid Build Coastguard Worker # ENVSETUP_NO_COMPLETION=adb:bit # -> disable adb and bit completion 370*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 371*9e94795aSAndroid Build Coastguard Worker for f in ${completion_files[*]}; do 372*9e94795aSAndroid Build Coastguard Worker f="$T/$f" 373*9e94795aSAndroid Build Coastguard Worker if [ ! -f "$f" ]; then 374*9e94795aSAndroid Build Coastguard Worker echo "Warning: completion file $f not found" 375*9e94795aSAndroid Build Coastguard Worker elif should_add_completion "$f"; then 376*9e94795aSAndroid Build Coastguard Worker . $f 377*9e94795aSAndroid Build Coastguard Worker fi 378*9e94795aSAndroid Build Coastguard Worker done 379*9e94795aSAndroid Build Coastguard Worker 380*9e94795aSAndroid Build Coastguard Worker if [ -z "$ZSH_VERSION" ]; then 381*9e94795aSAndroid Build Coastguard Worker # Doesn't work in zsh. 382*9e94795aSAndroid Build Coastguard Worker complete -o nospace -F _croot croot 383*9e94795aSAndroid Build Coastguard Worker # TODO(b/244559459): Support b autocompletion for zsh 384*9e94795aSAndroid Build Coastguard Worker complete -F _bazel__complete -o nospace b 385*9e94795aSAndroid Build Coastguard Worker fi 386*9e94795aSAndroid Build Coastguard Worker complete -F _lunch lunch 387*9e94795aSAndroid Build Coastguard Worker complete -F _lunch_completion lunch2 388*9e94795aSAndroid Build Coastguard Worker 389*9e94795aSAndroid Build Coastguard Worker complete -F _complete_android_module_names pathmod 390*9e94795aSAndroid Build Coastguard Worker complete -F _complete_android_module_names gomod 391*9e94795aSAndroid Build Coastguard Worker complete -F _complete_android_module_names outmod 392*9e94795aSAndroid Build Coastguard Worker complete -F _complete_android_module_names installmod 393*9e94795aSAndroid Build Coastguard Worker complete -F _complete_android_module_names m 394*9e94795aSAndroid Build Coastguard Worker} 395*9e94795aSAndroid Build Coastguard Worker 396*9e94795aSAndroid Build Coastguard Workerfunction add_lunch_combo() 397*9e94795aSAndroid Build Coastguard Worker{ 398*9e94795aSAndroid Build Coastguard Worker if [ -n "$ZSH_VERSION" ]; then 399*9e94795aSAndroid Build Coastguard Worker echo -n "${funcfiletrace[1]}: " 400*9e94795aSAndroid Build Coastguard Worker else 401*9e94795aSAndroid Build Coastguard Worker echo -n "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: " 402*9e94795aSAndroid Build Coastguard Worker fi 403*9e94795aSAndroid Build Coastguard Worker echo "add_lunch_combo is obsolete. Use COMMON_LUNCH_CHOICES in your AndroidProducts.mk instead." 404*9e94795aSAndroid Build Coastguard Worker} 405*9e94795aSAndroid Build Coastguard Worker 406*9e94795aSAndroid Build Coastguard Workerfunction print_lunch_menu() 407*9e94795aSAndroid Build Coastguard Worker{ 408*9e94795aSAndroid Build Coastguard Worker local uname=$(uname) 409*9e94795aSAndroid Build Coastguard Worker local choices 410*9e94795aSAndroid Build Coastguard Worker choices=$(TARGET_BUILD_APPS= TARGET_PRODUCT= TARGET_RELEASE= TARGET_BUILD_VARIANT= _get_build_var_cached COMMON_LUNCH_CHOICES 2>/dev/null) 411*9e94795aSAndroid Build Coastguard Worker local ret=$? 412*9e94795aSAndroid Build Coastguard Worker 413*9e94795aSAndroid Build Coastguard Worker echo 414*9e94795aSAndroid Build Coastguard Worker echo "You're building on" $uname 415*9e94795aSAndroid Build Coastguard Worker echo 416*9e94795aSAndroid Build Coastguard Worker 417*9e94795aSAndroid Build Coastguard Worker if [ $ret -ne 0 ] 418*9e94795aSAndroid Build Coastguard Worker then 419*9e94795aSAndroid Build Coastguard Worker echo "Warning: Cannot display lunch menu." 420*9e94795aSAndroid Build Coastguard Worker echo 421*9e94795aSAndroid Build Coastguard Worker echo "Note: You can invoke lunch with an explicit target:" 422*9e94795aSAndroid Build Coastguard Worker echo 423*9e94795aSAndroid Build Coastguard Worker echo " usage: lunch [target]" >&2 424*9e94795aSAndroid Build Coastguard Worker echo 425*9e94795aSAndroid Build Coastguard Worker return 426*9e94795aSAndroid Build Coastguard Worker fi 427*9e94795aSAndroid Build Coastguard Worker 428*9e94795aSAndroid Build Coastguard Worker echo "Lunch menu .. Here are the common combinations:" 429*9e94795aSAndroid Build Coastguard Worker 430*9e94795aSAndroid Build Coastguard Worker local i=1 431*9e94795aSAndroid Build Coastguard Worker local choice 432*9e94795aSAndroid Build Coastguard Worker for choice in $(echo $choices) 433*9e94795aSAndroid Build Coastguard Worker do 434*9e94795aSAndroid Build Coastguard Worker echo " $i. $choice" 435*9e94795aSAndroid Build Coastguard Worker i=$(($i+1)) 436*9e94795aSAndroid Build Coastguard Worker done 437*9e94795aSAndroid Build Coastguard Worker 438*9e94795aSAndroid Build Coastguard Worker echo 439*9e94795aSAndroid Build Coastguard Worker} 440*9e94795aSAndroid Build Coastguard Worker 441*9e94795aSAndroid Build Coastguard Workerfunction lunch() 442*9e94795aSAndroid Build Coastguard Worker{ 443*9e94795aSAndroid Build Coastguard Worker local answer 444*9e94795aSAndroid Build Coastguard Worker setup_cog_env_if_needed 445*9e94795aSAndroid Build Coastguard Worker 446*9e94795aSAndroid Build Coastguard Worker if [[ $# -gt 1 ]]; then 447*9e94795aSAndroid Build Coastguard Worker echo "usage: lunch [target]" >&2 448*9e94795aSAndroid Build Coastguard Worker return 1 449*9e94795aSAndroid Build Coastguard Worker fi 450*9e94795aSAndroid Build Coastguard Worker 451*9e94795aSAndroid Build Coastguard Worker local used_lunch_menu=0 452*9e94795aSAndroid Build Coastguard Worker 453*9e94795aSAndroid Build Coastguard Worker if [ "$1" ]; then 454*9e94795aSAndroid Build Coastguard Worker answer=$1 455*9e94795aSAndroid Build Coastguard Worker else 456*9e94795aSAndroid Build Coastguard Worker print_lunch_menu 457*9e94795aSAndroid Build Coastguard Worker echo "Which would you like? [aosp_cf_x86_64_phone-trunk_staging-eng]" 458*9e94795aSAndroid Build Coastguard Worker echo -n "Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-trunk_staging-eng): " 459*9e94795aSAndroid Build Coastguard Worker read answer 460*9e94795aSAndroid Build Coastguard Worker used_lunch_menu=1 461*9e94795aSAndroid Build Coastguard Worker fi 462*9e94795aSAndroid Build Coastguard Worker 463*9e94795aSAndroid Build Coastguard Worker local selection= 464*9e94795aSAndroid Build Coastguard Worker 465*9e94795aSAndroid Build Coastguard Worker if [ -z "$answer" ] 466*9e94795aSAndroid Build Coastguard Worker then 467*9e94795aSAndroid Build Coastguard Worker selection=aosp_cf_x86_64_phone-trunk_staging-eng 468*9e94795aSAndroid Build Coastguard Worker elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$") 469*9e94795aSAndroid Build Coastguard Worker then 470*9e94795aSAndroid Build Coastguard Worker local choices=($(TARGET_BUILD_APPS= TARGET_PRODUCT= TARGET_RELEASE= TARGET_BUILD_VARIANT= _get_build_var_cached COMMON_LUNCH_CHOICES 2>/dev/null)) 471*9e94795aSAndroid Build Coastguard Worker if [ $answer -le ${#choices[@]} ] 472*9e94795aSAndroid Build Coastguard Worker then 473*9e94795aSAndroid Build Coastguard Worker # array in zsh starts from 1 instead of 0. 474*9e94795aSAndroid Build Coastguard Worker if [ -n "$ZSH_VERSION" ] 475*9e94795aSAndroid Build Coastguard Worker then 476*9e94795aSAndroid Build Coastguard Worker selection=${choices[$(($answer))]} 477*9e94795aSAndroid Build Coastguard Worker else 478*9e94795aSAndroid Build Coastguard Worker selection=${choices[$(($answer-1))]} 479*9e94795aSAndroid Build Coastguard Worker fi 480*9e94795aSAndroid Build Coastguard Worker fi 481*9e94795aSAndroid Build Coastguard Worker else 482*9e94795aSAndroid Build Coastguard Worker selection=$answer 483*9e94795aSAndroid Build Coastguard Worker fi 484*9e94795aSAndroid Build Coastguard Worker 485*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_APPS= 486*9e94795aSAndroid Build Coastguard Worker 487*9e94795aSAndroid Build Coastguard Worker # This must be <product>-<release>-<variant> 488*9e94795aSAndroid Build Coastguard Worker local product release variant 489*9e94795aSAndroid Build Coastguard Worker # Split string on the '-' character. 490*9e94795aSAndroid Build Coastguard Worker IFS="-" read -r product release variant <<< "$selection" 491*9e94795aSAndroid Build Coastguard Worker 492*9e94795aSAndroid Build Coastguard Worker if [[ -z "$product" ]] || [[ -z "$release" ]] || [[ -z "$variant" ]] 493*9e94795aSAndroid Build Coastguard Worker then 494*9e94795aSAndroid Build Coastguard Worker echo 495*9e94795aSAndroid Build Coastguard Worker echo "Invalid lunch combo: $selection" 496*9e94795aSAndroid Build Coastguard Worker echo "Valid combos must be of the form <product>-<release>-<variant>" 497*9e94795aSAndroid Build Coastguard Worker return 1 498*9e94795aSAndroid Build Coastguard Worker fi 499*9e94795aSAndroid Build Coastguard Worker 500*9e94795aSAndroid Build Coastguard Worker _lunch_meat $product $release $variant 501*9e94795aSAndroid Build Coastguard Worker} 502*9e94795aSAndroid Build Coastguard Worker 503*9e94795aSAndroid Build Coastguard Workerfunction _lunch_meat() 504*9e94795aSAndroid Build Coastguard Worker{ 505*9e94795aSAndroid Build Coastguard Worker local product=$1 506*9e94795aSAndroid Build Coastguard Worker local release=$2 507*9e94795aSAndroid Build Coastguard Worker local variant=$3 508*9e94795aSAndroid Build Coastguard Worker 509*9e94795aSAndroid Build Coastguard Worker TARGET_PRODUCT=$product \ 510*9e94795aSAndroid Build Coastguard Worker TARGET_RELEASE=$release \ 511*9e94795aSAndroid Build Coastguard Worker TARGET_BUILD_VARIANT=$variant \ 512*9e94795aSAndroid Build Coastguard Worker build_build_var_cache 513*9e94795aSAndroid Build Coastguard Worker if [ $? -ne 0 ] 514*9e94795aSAndroid Build Coastguard Worker then 515*9e94795aSAndroid Build Coastguard Worker if [[ "$product" =~ .*_(eng|user|userdebug) ]] 516*9e94795aSAndroid Build Coastguard Worker then 517*9e94795aSAndroid Build Coastguard Worker echo "Did you mean -${product/*_/}? (dash instead of underscore)" 518*9e94795aSAndroid Build Coastguard Worker fi 519*9e94795aSAndroid Build Coastguard Worker return 1 520*9e94795aSAndroid Build Coastguard Worker fi 521*9e94795aSAndroid Build Coastguard Worker export TARGET_PRODUCT=$(_get_build_var_cached TARGET_PRODUCT) 522*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_VARIANT=$(_get_build_var_cached TARGET_BUILD_VARIANT) 523*9e94795aSAndroid Build Coastguard Worker export TARGET_RELEASE=$release 524*9e94795aSAndroid Build Coastguard Worker # Note this is the string "release", not the value of the variable. 525*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_TYPE=release 526*9e94795aSAndroid Build Coastguard Worker 527*9e94795aSAndroid Build Coastguard Worker [[ -n "${ANDROID_QUIET_BUILD:-}" ]] || echo 528*9e94795aSAndroid Build Coastguard Worker 529*9e94795aSAndroid Build Coastguard Worker set_stuff_for_environment 530*9e94795aSAndroid Build Coastguard Worker [[ -n "${ANDROID_QUIET_BUILD:-}" ]] || printconfig 531*9e94795aSAndroid Build Coastguard Worker 532*9e94795aSAndroid Build Coastguard Worker if [[ -z "${ANDROID_QUIET_BUILD}" ]]; then 533*9e94795aSAndroid Build Coastguard Worker local spam_for_lunch=$(gettop)/build/make/tools/envsetup/spam_for_lunch 534*9e94795aSAndroid Build Coastguard Worker if [[ -x $spam_for_lunch ]]; then 535*9e94795aSAndroid Build Coastguard Worker $spam_for_lunch 536*9e94795aSAndroid Build Coastguard Worker fi 537*9e94795aSAndroid Build Coastguard Worker fi 538*9e94795aSAndroid Build Coastguard Worker 539*9e94795aSAndroid Build Coastguard Worker destroy_build_var_cache 540*9e94795aSAndroid Build Coastguard Worker 541*9e94795aSAndroid Build Coastguard Worker if [[ -n "${CHECK_MU_CONFIG:-}" ]]; then 542*9e94795aSAndroid Build Coastguard Worker check_mu_config 543*9e94795aSAndroid Build Coastguard Worker fi 544*9e94795aSAndroid Build Coastguard Worker} 545*9e94795aSAndroid Build Coastguard Worker 546*9e94795aSAndroid Build Coastguard Workerunset COMMON_LUNCH_CHOICES_CACHE 547*9e94795aSAndroid Build Coastguard Worker# Tab completion for lunch. 548*9e94795aSAndroid Build Coastguard Workerfunction _lunch() 549*9e94795aSAndroid Build Coastguard Worker{ 550*9e94795aSAndroid Build Coastguard Worker local cur prev opts 551*9e94795aSAndroid Build Coastguard Worker COMPREPLY=() 552*9e94795aSAndroid Build Coastguard Worker cur="${COMP_WORDS[COMP_CWORD]}" 553*9e94795aSAndroid Build Coastguard Worker prev="${COMP_WORDS[COMP_CWORD-1]}" 554*9e94795aSAndroid Build Coastguard Worker 555*9e94795aSAndroid Build Coastguard Worker if [ -z "$COMMON_LUNCH_CHOICES_CACHE" ]; then 556*9e94795aSAndroid Build Coastguard Worker COMMON_LUNCH_CHOICES_CACHE=$(TARGET_BUILD_APPS= _get_build_var_cached COMMON_LUNCH_CHOICES) 557*9e94795aSAndroid Build Coastguard Worker fi 558*9e94795aSAndroid Build Coastguard Worker 559*9e94795aSAndroid Build Coastguard Worker COMPREPLY=( $(compgen -W "${COMMON_LUNCH_CHOICES_CACHE}" -- ${cur}) ) 560*9e94795aSAndroid Build Coastguard Worker return 0 561*9e94795aSAndroid Build Coastguard Worker} 562*9e94795aSAndroid Build Coastguard Worker 563*9e94795aSAndroid Build Coastguard Workerfunction _lunch_usage() 564*9e94795aSAndroid Build Coastguard Worker{ 565*9e94795aSAndroid Build Coastguard Worker ( 566*9e94795aSAndroid Build Coastguard Worker echo "The lunch command selects the configuration to use for subsequent" 567*9e94795aSAndroid Build Coastguard Worker echo "Android builds." 568*9e94795aSAndroid Build Coastguard Worker echo 569*9e94795aSAndroid Build Coastguard Worker echo "Usage: lunch TARGET_PRODUCT [TARGET_RELEASE [TARGET_BUILD_VARIANT]]" 570*9e94795aSAndroid Build Coastguard Worker echo 571*9e94795aSAndroid Build Coastguard Worker echo " Choose the product, release and variant to use. If not" 572*9e94795aSAndroid Build Coastguard Worker echo " supplied, TARGET_RELEASE will be 'trunk_staging' and" 573*9e94795aSAndroid Build Coastguard Worker echo " TARGET_BUILD_VARIANT will be 'eng'" 574*9e94795aSAndroid Build Coastguard Worker echo 575*9e94795aSAndroid Build Coastguard Worker echo 576*9e94795aSAndroid Build Coastguard Worker echo "Usage: lunch TARGET_PRODUCT-TARGET_RELEASE-TARGET_BUILD_VARIANT" 577*9e94795aSAndroid Build Coastguard Worker echo 578*9e94795aSAndroid Build Coastguard Worker echo " Chose the product, release and variant to use. This" 579*9e94795aSAndroid Build Coastguard Worker echo " legacy format is maintained for compatibility." 580*9e94795aSAndroid Build Coastguard Worker echo 581*9e94795aSAndroid Build Coastguard Worker echo 582*9e94795aSAndroid Build Coastguard Worker echo "Note that the previous interactive menu and list of hard-coded" 583*9e94795aSAndroid Build Coastguard Worker echo "list of curated targets has been removed. If you would like the" 584*9e94795aSAndroid Build Coastguard Worker echo "list of products, release configs for a particular product, or" 585*9e94795aSAndroid Build Coastguard Worker echo "variants, run list_products, list_release_configs, list_variants" 586*9e94795aSAndroid Build Coastguard Worker echo "respectively." 587*9e94795aSAndroid Build Coastguard Worker echo 588*9e94795aSAndroid Build Coastguard Worker ) 1>&2 589*9e94795aSAndroid Build Coastguard Worker} 590*9e94795aSAndroid Build Coastguard Worker 591*9e94795aSAndroid Build Coastguard Workerfunction lunch2() 592*9e94795aSAndroid Build Coastguard Worker{ 593*9e94795aSAndroid Build Coastguard Worker if [[ $# -eq 1 && $1 = "--help" ]]; then 594*9e94795aSAndroid Build Coastguard Worker _lunch_usage 595*9e94795aSAndroid Build Coastguard Worker return 0 596*9e94795aSAndroid Build Coastguard Worker fi 597*9e94795aSAndroid Build Coastguard Worker if [[ $# -eq 0 ]]; then 598*9e94795aSAndroid Build Coastguard Worker echo "No target specified. See lunch --help" 1>&2 599*9e94795aSAndroid Build Coastguard Worker return 1 600*9e94795aSAndroid Build Coastguard Worker fi 601*9e94795aSAndroid Build Coastguard Worker if [[ $# -gt 3 ]]; then 602*9e94795aSAndroid Build Coastguard Worker echo "Too many parameters given. See lunch --help" 1>&2 603*9e94795aSAndroid Build Coastguard Worker return 1 604*9e94795aSAndroid Build Coastguard Worker fi 605*9e94795aSAndroid Build Coastguard Worker 606*9e94795aSAndroid Build Coastguard Worker local product release variant 607*9e94795aSAndroid Build Coastguard Worker 608*9e94795aSAndroid Build Coastguard Worker # Handle the legacy format 609*9e94795aSAndroid Build Coastguard Worker local legacy=$(echo $1 | grep "-") 610*9e94795aSAndroid Build Coastguard Worker if [[ $# -eq 1 && -n $legacy ]]; then 611*9e94795aSAndroid Build Coastguard Worker IFS="-" read -r product release variant <<< "$1" 612*9e94795aSAndroid Build Coastguard Worker if [[ -z "$product" ]] || [[ -z "$release" ]] || [[ -z "$variant" ]]; then 613*9e94795aSAndroid Build Coastguard Worker echo "Invalid lunch combo: $1" 1>&2 614*9e94795aSAndroid Build Coastguard Worker echo "Valid combos must be of the form <product>-<release>-<variant> when using" 1>&2 615*9e94795aSAndroid Build Coastguard Worker echo "the legacy format. Run 'lunch --help' for usage." 1>&2 616*9e94795aSAndroid Build Coastguard Worker return 1 617*9e94795aSAndroid Build Coastguard Worker fi 618*9e94795aSAndroid Build Coastguard Worker fi 619*9e94795aSAndroid Build Coastguard Worker 620*9e94795aSAndroid Build Coastguard Worker # Handle the new format. 621*9e94795aSAndroid Build Coastguard Worker if [[ -z $legacy ]]; then 622*9e94795aSAndroid Build Coastguard Worker product=$1 623*9e94795aSAndroid Build Coastguard Worker release=$2 624*9e94795aSAndroid Build Coastguard Worker if [[ -z $release ]]; then 625*9e94795aSAndroid Build Coastguard Worker release=trunk_staging 626*9e94795aSAndroid Build Coastguard Worker fi 627*9e94795aSAndroid Build Coastguard Worker variant=$3 628*9e94795aSAndroid Build Coastguard Worker if [[ -z $variant ]]; then 629*9e94795aSAndroid Build Coastguard Worker variant=eng 630*9e94795aSAndroid Build Coastguard Worker fi 631*9e94795aSAndroid Build Coastguard Worker fi 632*9e94795aSAndroid Build Coastguard Worker 633*9e94795aSAndroid Build Coastguard Worker # Validate the selection and set all the environment stuff 634*9e94795aSAndroid Build Coastguard Worker _lunch_meat $product $release $variant 635*9e94795aSAndroid Build Coastguard Worker} 636*9e94795aSAndroid Build Coastguard Worker 637*9e94795aSAndroid Build Coastguard Workerunset ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE 638*9e94795aSAndroid Build Coastguard Workerunset ANDROID_LUNCH_COMPLETION_CHOSEN_PRODUCT 639*9e94795aSAndroid Build Coastguard Workerunset ANDROID_LUNCH_COMPLETION_RELEASE_CACHE 640*9e94795aSAndroid Build Coastguard Worker# Tab completion for lunch. 641*9e94795aSAndroid Build Coastguard Workerfunction _lunch_completion() 642*9e94795aSAndroid Build Coastguard Worker{ 643*9e94795aSAndroid Build Coastguard Worker # Available products 644*9e94795aSAndroid Build Coastguard Worker if [[ $COMP_CWORD -eq 1 ]] ; then 645*9e94795aSAndroid Build Coastguard Worker if [[ -z $ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE ]]; then 646*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE=$(list_products) 647*9e94795aSAndroid Build Coastguard Worker fi 648*9e94795aSAndroid Build Coastguard Worker COMPREPLY=( $(compgen -W "${ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE}" -- "${COMP_WORDS[COMP_CWORD]}") ) 649*9e94795aSAndroid Build Coastguard Worker fi 650*9e94795aSAndroid Build Coastguard Worker 651*9e94795aSAndroid Build Coastguard Worker # Available release configs 652*9e94795aSAndroid Build Coastguard Worker if [[ $COMP_CWORD -eq 2 ]] ; then 653*9e94795aSAndroid Build Coastguard Worker if [[ -z $ANDROID_LUNCH_COMPLETION_RELEASE_CACHE || $ANDROID_LUNCH_COMPLETION_CHOSEN_PRODUCT != ${COMP_WORDS[1]} ]] ; then 654*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_COMPLETION_RELEASE_CACHE=$(list_releases ${COMP_WORDS[1]}) 655*9e94795aSAndroid Build Coastguard Worker ANDROID_LUNCH_COMPLETION_CHOSEN_PRODUCT=${COMP_WORDS[1]} 656*9e94795aSAndroid Build Coastguard Worker fi 657*9e94795aSAndroid Build Coastguard Worker COMPREPLY=( $(compgen -W "${ANDROID_LUNCH_COMPLETION_RELEASE_CACHE}" -- "${COMP_WORDS[COMP_CWORD]}") ) 658*9e94795aSAndroid Build Coastguard Worker fi 659*9e94795aSAndroid Build Coastguard Worker 660*9e94795aSAndroid Build Coastguard Worker # Available variants 661*9e94795aSAndroid Build Coastguard Worker if [[ $COMP_CWORD -eq 3 ]] ; then 662*9e94795aSAndroid Build Coastguard Worker COMPREPLY=(user userdebug eng) 663*9e94795aSAndroid Build Coastguard Worker fi 664*9e94795aSAndroid Build Coastguard Worker 665*9e94795aSAndroid Build Coastguard Worker return 0 666*9e94795aSAndroid Build Coastguard Worker} 667*9e94795aSAndroid Build Coastguard Worker 668*9e94795aSAndroid Build Coastguard Worker 669*9e94795aSAndroid Build Coastguard Worker# Configures the build to build unbundled apps. 670*9e94795aSAndroid Build Coastguard Worker# Run tapas with one or more app names (from LOCAL_PACKAGE_NAME) 671*9e94795aSAndroid Build Coastguard Workerfunction tapas() 672*9e94795aSAndroid Build Coastguard Worker{ 673*9e94795aSAndroid Build Coastguard Worker local showHelp="$(echo $* | xargs -n 1 echo | \grep -E '^(help)$' | xargs)" 674*9e94795aSAndroid Build Coastguard Worker local arch="$(echo $* | xargs -n 1 echo | \grep -E '^(arm|x86|arm64|x86_64)$' | xargs)" 675*9e94795aSAndroid Build Coastguard Worker # TODO(b/307975293): Expand tapas to take release arguments (and update hmm() usage). 676*9e94795aSAndroid Build Coastguard Worker local release="trunk_staging" 677*9e94795aSAndroid Build Coastguard Worker local variant="$(echo $* | xargs -n 1 echo | \grep -E '^(user|userdebug|eng)$' | xargs)" 678*9e94795aSAndroid Build Coastguard Worker local density="$(echo $* | xargs -n 1 echo | \grep -E '^(ldpi|mdpi|tvdpi|hdpi|xhdpi|xxhdpi|xxxhdpi|alldpi)$' | xargs)" 679*9e94795aSAndroid Build Coastguard Worker local keys="$(echo $* | xargs -n 1 echo | \grep -E '^(devkeys)$' | xargs)" 680*9e94795aSAndroid Build Coastguard Worker local apps="$(echo $* | xargs -n 1 echo | \grep -E -v '^(user|userdebug|eng|arm|x86|arm64|x86_64|ldpi|mdpi|tvdpi|hdpi|xhdpi|xxhdpi|xxxhdpi|alldpi|devkeys)$' | xargs)" 681*9e94795aSAndroid Build Coastguard Worker 682*9e94795aSAndroid Build Coastguard Worker 683*9e94795aSAndroid Build Coastguard Worker if [ "$showHelp" != "" ]; then 684*9e94795aSAndroid Build Coastguard Worker $(gettop)/build/make/tapasHelp.sh 685*9e94795aSAndroid Build Coastguard Worker return 686*9e94795aSAndroid Build Coastguard Worker fi 687*9e94795aSAndroid Build Coastguard Worker 688*9e94795aSAndroid Build Coastguard Worker if [ $(echo $arch | wc -w) -gt 1 ]; then 689*9e94795aSAndroid Build Coastguard Worker echo "tapas: Error: Multiple build archs supplied: $arch" 690*9e94795aSAndroid Build Coastguard Worker return 691*9e94795aSAndroid Build Coastguard Worker fi 692*9e94795aSAndroid Build Coastguard Worker if [ $(echo $release | wc -w) -gt 1 ]; then 693*9e94795aSAndroid Build Coastguard Worker echo "tapas: Error: Multiple build releases supplied: $release" 694*9e94795aSAndroid Build Coastguard Worker return 695*9e94795aSAndroid Build Coastguard Worker fi 696*9e94795aSAndroid Build Coastguard Worker if [ $(echo $variant | wc -w) -gt 1 ]; then 697*9e94795aSAndroid Build Coastguard Worker echo "tapas: Error: Multiple build variants supplied: $variant" 698*9e94795aSAndroid Build Coastguard Worker return 699*9e94795aSAndroid Build Coastguard Worker fi 700*9e94795aSAndroid Build Coastguard Worker if [ $(echo $density | wc -w) -gt 1 ]; then 701*9e94795aSAndroid Build Coastguard Worker echo "tapas: Error: Multiple densities supplied: $density" 702*9e94795aSAndroid Build Coastguard Worker return 703*9e94795aSAndroid Build Coastguard Worker fi 704*9e94795aSAndroid Build Coastguard Worker if [ $(echo $keys | wc -w) -gt 1 ]; then 705*9e94795aSAndroid Build Coastguard Worker echo "tapas: Error: Multiple keys supplied: $keys" 706*9e94795aSAndroid Build Coastguard Worker return 707*9e94795aSAndroid Build Coastguard Worker fi 708*9e94795aSAndroid Build Coastguard Worker 709*9e94795aSAndroid Build Coastguard Worker local product=aosp_arm 710*9e94795aSAndroid Build Coastguard Worker case $arch in 711*9e94795aSAndroid Build Coastguard Worker x86) product=aosp_x86;; 712*9e94795aSAndroid Build Coastguard Worker arm64) product=aosp_arm64;; 713*9e94795aSAndroid Build Coastguard Worker x86_64) product=aosp_x86_64;; 714*9e94795aSAndroid Build Coastguard Worker esac 715*9e94795aSAndroid Build Coastguard Worker if [ -n "$keys" ]; then 716*9e94795aSAndroid Build Coastguard Worker product=${product/aosp_/aosp_${keys}_} 717*9e94795aSAndroid Build Coastguard Worker fi; 718*9e94795aSAndroid Build Coastguard Worker 719*9e94795aSAndroid Build Coastguard Worker if [ -z "$variant" ]; then 720*9e94795aSAndroid Build Coastguard Worker variant=eng 721*9e94795aSAndroid Build Coastguard Worker fi 722*9e94795aSAndroid Build Coastguard Worker if [ -z "$apps" ]; then 723*9e94795aSAndroid Build Coastguard Worker apps=all 724*9e94795aSAndroid Build Coastguard Worker fi 725*9e94795aSAndroid Build Coastguard Worker if [ -z "$density" ]; then 726*9e94795aSAndroid Build Coastguard Worker density=alldpi 727*9e94795aSAndroid Build Coastguard Worker fi 728*9e94795aSAndroid Build Coastguard Worker 729*9e94795aSAndroid Build Coastguard Worker export TARGET_PRODUCT=$product 730*9e94795aSAndroid Build Coastguard Worker export TARGET_RELEASE=$release 731*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_VARIANT=$variant 732*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_DENSITY=$density 733*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_TYPE=release 734*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_APPS=$apps 735*9e94795aSAndroid Build Coastguard Worker 736*9e94795aSAndroid Build Coastguard Worker build_build_var_cache 737*9e94795aSAndroid Build Coastguard Worker set_stuff_for_environment 738*9e94795aSAndroid Build Coastguard Worker printconfig 739*9e94795aSAndroid Build Coastguard Worker destroy_build_var_cache 740*9e94795aSAndroid Build Coastguard Worker} 741*9e94795aSAndroid Build Coastguard Worker 742*9e94795aSAndroid Build Coastguard Worker# Configures the build to build unbundled Android modules (APEXes). 743*9e94795aSAndroid Build Coastguard Worker# Run banchan with one or more module names (from apex{} modules). 744*9e94795aSAndroid Build Coastguard Workerfunction banchan() 745*9e94795aSAndroid Build Coastguard Worker{ 746*9e94795aSAndroid Build Coastguard Worker local showHelp="$(echo $* | xargs -n 1 echo | \grep -E '^(help)$' | xargs)" 747*9e94795aSAndroid Build Coastguard Worker local product="$(echo $* | xargs -n 1 echo | \grep -E '^(.*_)?(arm|x86|arm64|riscv64|x86_64|arm64only|x86_64only)$' | xargs)" 748*9e94795aSAndroid Build Coastguard Worker # TODO: Expand banchan to take release arguments (and update hmm() usage). 749*9e94795aSAndroid Build Coastguard Worker local release="trunk_staging" 750*9e94795aSAndroid Build Coastguard Worker local variant="$(echo $* | xargs -n 1 echo | \grep -E '^(user|userdebug|eng)$' | xargs)" 751*9e94795aSAndroid Build Coastguard Worker local apps="$(echo $* | xargs -n 1 echo | \grep -E -v '^(user|userdebug|eng|(.*_)?(arm|x86|arm64|riscv64|x86_64))$' | xargs)" 752*9e94795aSAndroid Build Coastguard Worker 753*9e94795aSAndroid Build Coastguard Worker if [ "$showHelp" != "" ]; then 754*9e94795aSAndroid Build Coastguard Worker $(gettop)/build/make/banchanHelp.sh 755*9e94795aSAndroid Build Coastguard Worker return 756*9e94795aSAndroid Build Coastguard Worker fi 757*9e94795aSAndroid Build Coastguard Worker 758*9e94795aSAndroid Build Coastguard Worker if [ -z "$product" ]; then 759*9e94795aSAndroid Build Coastguard Worker product=arm64 760*9e94795aSAndroid Build Coastguard Worker elif [ $(echo $product | wc -w) -gt 1 ]; then 761*9e94795aSAndroid Build Coastguard Worker echo "banchan: Error: Multiple build archs or products supplied: $products" 762*9e94795aSAndroid Build Coastguard Worker return 763*9e94795aSAndroid Build Coastguard Worker fi 764*9e94795aSAndroid Build Coastguard Worker if [ $(echo $release | wc -w) -gt 1 ]; then 765*9e94795aSAndroid Build Coastguard Worker echo "banchan: Error: Multiple build releases supplied: $release" 766*9e94795aSAndroid Build Coastguard Worker return 767*9e94795aSAndroid Build Coastguard Worker fi 768*9e94795aSAndroid Build Coastguard Worker if [ $(echo $variant | wc -w) -gt 1 ]; then 769*9e94795aSAndroid Build Coastguard Worker echo "banchan: Error: Multiple build variants supplied: $variant" 770*9e94795aSAndroid Build Coastguard Worker return 771*9e94795aSAndroid Build Coastguard Worker fi 772*9e94795aSAndroid Build Coastguard Worker if [ -z "$apps" ]; then 773*9e94795aSAndroid Build Coastguard Worker echo "banchan: Error: No modules supplied" 774*9e94795aSAndroid Build Coastguard Worker return 775*9e94795aSAndroid Build Coastguard Worker fi 776*9e94795aSAndroid Build Coastguard Worker 777*9e94795aSAndroid Build Coastguard Worker case $product in 778*9e94795aSAndroid Build Coastguard Worker arm) product=module_arm;; 779*9e94795aSAndroid Build Coastguard Worker x86) product=module_x86;; 780*9e94795aSAndroid Build Coastguard Worker arm64) product=module_arm64;; 781*9e94795aSAndroid Build Coastguard Worker riscv64) product=module_riscv64;; 782*9e94795aSAndroid Build Coastguard Worker x86_64) product=module_x86_64;; 783*9e94795aSAndroid Build Coastguard Worker arm64only) product=module_arm64only;; 784*9e94795aSAndroid Build Coastguard Worker x86_64only) product=module_x86_64only;; 785*9e94795aSAndroid Build Coastguard Worker esac 786*9e94795aSAndroid Build Coastguard Worker if [ -z "$variant" ]; then 787*9e94795aSAndroid Build Coastguard Worker variant=eng 788*9e94795aSAndroid Build Coastguard Worker fi 789*9e94795aSAndroid Build Coastguard Worker 790*9e94795aSAndroid Build Coastguard Worker export TARGET_PRODUCT=$product 791*9e94795aSAndroid Build Coastguard Worker export TARGET_RELEASE=$release 792*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_VARIANT=$variant 793*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_DENSITY=alldpi 794*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_TYPE=release 795*9e94795aSAndroid Build Coastguard Worker 796*9e94795aSAndroid Build Coastguard Worker # This setup currently uses TARGET_BUILD_APPS just like tapas, but the use 797*9e94795aSAndroid Build Coastguard Worker # case is different and it may diverge in the future. 798*9e94795aSAndroid Build Coastguard Worker export TARGET_BUILD_APPS=$apps 799*9e94795aSAndroid Build Coastguard Worker 800*9e94795aSAndroid Build Coastguard Worker build_build_var_cache 801*9e94795aSAndroid Build Coastguard Worker set_stuff_for_environment 802*9e94795aSAndroid Build Coastguard Worker printconfig 803*9e94795aSAndroid Build Coastguard Worker destroy_build_var_cache 804*9e94795aSAndroid Build Coastguard Worker} 805*9e94795aSAndroid Build Coastguard Worker 806*9e94795aSAndroid Build Coastguard Workerfunction croot() 807*9e94795aSAndroid Build Coastguard Worker{ 808*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 809*9e94795aSAndroid Build Coastguard Worker if [ "$T" ]; then 810*9e94795aSAndroid Build Coastguard Worker if [ "$1" ]; then 811*9e94795aSAndroid Build Coastguard Worker \cd $(gettop)/$1 812*9e94795aSAndroid Build Coastguard Worker else 813*9e94795aSAndroid Build Coastguard Worker \cd $(gettop) 814*9e94795aSAndroid Build Coastguard Worker fi 815*9e94795aSAndroid Build Coastguard Worker else 816*9e94795aSAndroid Build Coastguard Worker echo "Couldn't locate the top of the tree. Try setting TOP." 817*9e94795aSAndroid Build Coastguard Worker fi 818*9e94795aSAndroid Build Coastguard Worker} 819*9e94795aSAndroid Build Coastguard Worker 820*9e94795aSAndroid Build Coastguard Workerfunction _croot() 821*9e94795aSAndroid Build Coastguard Worker{ 822*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 823*9e94795aSAndroid Build Coastguard Worker if [ "$T" ]; then 824*9e94795aSAndroid Build Coastguard Worker local cur="${COMP_WORDS[COMP_CWORD]}" 825*9e94795aSAndroid Build Coastguard Worker k=0 826*9e94795aSAndroid Build Coastguard Worker for c in $(compgen -d ${T}/${cur}); do 827*9e94795aSAndroid Build Coastguard Worker COMPREPLY[k++]=${c#${T}/}/ 828*9e94795aSAndroid Build Coastguard Worker done 829*9e94795aSAndroid Build Coastguard Worker fi 830*9e94795aSAndroid Build Coastguard Worker} 831*9e94795aSAndroid Build Coastguard Worker 832*9e94795aSAndroid Build Coastguard Workerfunction cproj() 833*9e94795aSAndroid Build Coastguard Worker{ 834*9e94795aSAndroid Build Coastguard Worker local TOPFILE=build/make/core/envsetup.mk 835*9e94795aSAndroid Build Coastguard Worker local HERE=$PWD 836*9e94795aSAndroid Build Coastguard Worker local T= 837*9e94795aSAndroid Build Coastguard Worker while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do 838*9e94795aSAndroid Build Coastguard Worker T=$PWD 839*9e94795aSAndroid Build Coastguard Worker if [ -f "$T/Android.mk" ]; then 840*9e94795aSAndroid Build Coastguard Worker \cd $T 841*9e94795aSAndroid Build Coastguard Worker return 842*9e94795aSAndroid Build Coastguard Worker fi 843*9e94795aSAndroid Build Coastguard Worker \cd .. 844*9e94795aSAndroid Build Coastguard Worker done 845*9e94795aSAndroid Build Coastguard Worker \cd $HERE 846*9e94795aSAndroid Build Coastguard Worker echo "can't find Android.mk" 847*9e94795aSAndroid Build Coastguard Worker} 848*9e94795aSAndroid Build Coastguard Worker 849*9e94795aSAndroid Build Coastguard Worker# Ensure that we're always using the adb in the tree. This works around the fact 850*9e94795aSAndroid Build Coastguard Worker# that bash caches $PATH lookups, so if you use adb before lunching/building the 851*9e94795aSAndroid Build Coastguard Worker# one in your tree, you'll continue to get /usr/bin/adb or whatever even after 852*9e94795aSAndroid Build Coastguard Worker# you have the one from your current tree on your path. Historically this would 853*9e94795aSAndroid Build Coastguard Worker# cause confusion because glinux had adb in /usr/bin/ by default, though that 854*9e94795aSAndroid Build Coastguard Worker# doesn't appear to be the case on my rodete hosts; it is however still the case 855*9e94795aSAndroid Build Coastguard Worker# that my Mac has /usr/local/bin/adb installed by default and on the default 856*9e94795aSAndroid Build Coastguard Worker# path. 857*9e94795aSAndroid Build Coastguard Workerfunction adb() { 858*9e94795aSAndroid Build Coastguard Worker # We need `command which` because zsh has a built-in `which` that's more 859*9e94795aSAndroid Build Coastguard Worker # like `type`. 860*9e94795aSAndroid Build Coastguard Worker local ADB=$(command which adb) 861*9e94795aSAndroid Build Coastguard Worker if [ -z "$ADB" ]; then 862*9e94795aSAndroid Build Coastguard Worker echo "Command adb not found; try lunch (and building) first?" 863*9e94795aSAndroid Build Coastguard Worker return 1 864*9e94795aSAndroid Build Coastguard Worker fi 865*9e94795aSAndroid Build Coastguard Worker run_tool_with_logging "ADB" $ADB "${@}" 866*9e94795aSAndroid Build Coastguard Worker} 867*9e94795aSAndroid Build Coastguard Worker 868*9e94795aSAndroid Build Coastguard Workerfunction fastboot() { 869*9e94795aSAndroid Build Coastguard Worker local FASTBOOT=$(command which fastboot) 870*9e94795aSAndroid Build Coastguard Worker if [ -z "$FASTBOOT" ]; then 871*9e94795aSAndroid Build Coastguard Worker echo "Command fastboot not found; try lunch (and building) first?" 872*9e94795aSAndroid Build Coastguard Worker return 1 873*9e94795aSAndroid Build Coastguard Worker fi 874*9e94795aSAndroid Build Coastguard Worker # Support tool event logging for fastboot command. 875*9e94795aSAndroid Build Coastguard Worker run_tool_with_logging "FASTBOOT" $FASTBOOT "${@}" 876*9e94795aSAndroid Build Coastguard Worker} 877*9e94795aSAndroid Build Coastguard Worker 878*9e94795aSAndroid Build Coastguard Worker# communicate with a running device or emulator, set up necessary state, 879*9e94795aSAndroid Build Coastguard Worker# and run the hat command. 880*9e94795aSAndroid Build Coastguard Workerfunction runhat() 881*9e94795aSAndroid Build Coastguard Worker{ 882*9e94795aSAndroid Build Coastguard Worker # process standard adb options 883*9e94795aSAndroid Build Coastguard Worker local adbTarget="" 884*9e94795aSAndroid Build Coastguard Worker if [ "$1" = "-d" -o "$1" = "-e" ]; then 885*9e94795aSAndroid Build Coastguard Worker adbTarget=$1 886*9e94795aSAndroid Build Coastguard Worker shift 1 887*9e94795aSAndroid Build Coastguard Worker elif [ "$1" = "-s" ]; then 888*9e94795aSAndroid Build Coastguard Worker adbTarget="$1 $2" 889*9e94795aSAndroid Build Coastguard Worker shift 2 890*9e94795aSAndroid Build Coastguard Worker fi 891*9e94795aSAndroid Build Coastguard Worker local adbOptions=${adbTarget} 892*9e94795aSAndroid Build Coastguard Worker #echo adbOptions = ${adbOptions} 893*9e94795aSAndroid Build Coastguard Worker 894*9e94795aSAndroid Build Coastguard Worker # runhat options 895*9e94795aSAndroid Build Coastguard Worker local targetPid=$1 896*9e94795aSAndroid Build Coastguard Worker 897*9e94795aSAndroid Build Coastguard Worker if [ "$targetPid" = "" ]; then 898*9e94795aSAndroid Build Coastguard Worker echo "Usage: runhat [ -d | -e | -s serial ] target-pid" 899*9e94795aSAndroid Build Coastguard Worker return 900*9e94795aSAndroid Build Coastguard Worker fi 901*9e94795aSAndroid Build Coastguard Worker 902*9e94795aSAndroid Build Coastguard Worker # confirm hat is available 903*9e94795aSAndroid Build Coastguard Worker if [ -z $(which hat) ]; then 904*9e94795aSAndroid Build Coastguard Worker echo "hat is not available in this configuration." 905*9e94795aSAndroid Build Coastguard Worker return 906*9e94795aSAndroid Build Coastguard Worker fi 907*9e94795aSAndroid Build Coastguard Worker 908*9e94795aSAndroid Build Coastguard Worker # issue "am" command to cause the hprof dump 909*9e94795aSAndroid Build Coastguard Worker local devFile=/data/local/tmp/hprof-$targetPid 910*9e94795aSAndroid Build Coastguard Worker echo "Poking $targetPid and waiting for data..." 911*9e94795aSAndroid Build Coastguard Worker echo "Storing data at $devFile" 912*9e94795aSAndroid Build Coastguard Worker adb ${adbOptions} shell am dumpheap $targetPid $devFile 913*9e94795aSAndroid Build Coastguard Worker echo "Press enter when logcat shows \"hprof: heap dump completed\"" 914*9e94795aSAndroid Build Coastguard Worker echo -n "> " 915*9e94795aSAndroid Build Coastguard Worker read 916*9e94795aSAndroid Build Coastguard Worker 917*9e94795aSAndroid Build Coastguard Worker local localFile=/tmp/$$-hprof 918*9e94795aSAndroid Build Coastguard Worker 919*9e94795aSAndroid Build Coastguard Worker echo "Retrieving file $devFile..." 920*9e94795aSAndroid Build Coastguard Worker adb ${adbOptions} pull $devFile $localFile 921*9e94795aSAndroid Build Coastguard Worker 922*9e94795aSAndroid Build Coastguard Worker adb ${adbOptions} shell rm $devFile 923*9e94795aSAndroid Build Coastguard Worker 924*9e94795aSAndroid Build Coastguard Worker echo "Running hat on $localFile" 925*9e94795aSAndroid Build Coastguard Worker echo "View the output by pointing your browser at http://localhost:7000/" 926*9e94795aSAndroid Build Coastguard Worker echo "" 927*9e94795aSAndroid Build Coastguard Worker hat -JXmx512m $localFile 928*9e94795aSAndroid Build Coastguard Worker} 929*9e94795aSAndroid Build Coastguard Worker 930*9e94795aSAndroid Build Coastguard Workerfunction godir () { 931*9e94795aSAndroid Build Coastguard Worker if [[ -z "$1" ]]; then 932*9e94795aSAndroid Build Coastguard Worker echo "Usage: godir <regex>" 933*9e94795aSAndroid Build Coastguard Worker return 934*9e94795aSAndroid Build Coastguard Worker fi 935*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 936*9e94795aSAndroid Build Coastguard Worker local FILELIST 937*9e94795aSAndroid Build Coastguard Worker if [ ! "$OUT_DIR" = "" ]; then 938*9e94795aSAndroid Build Coastguard Worker mkdir -p $OUT_DIR 939*9e94795aSAndroid Build Coastguard Worker FILELIST=$OUT_DIR/filelist 940*9e94795aSAndroid Build Coastguard Worker else 941*9e94795aSAndroid Build Coastguard Worker FILELIST=$T/filelist 942*9e94795aSAndroid Build Coastguard Worker fi 943*9e94795aSAndroid Build Coastguard Worker if [[ ! -f $FILELIST ]]; then 944*9e94795aSAndroid Build Coastguard Worker echo -n "Creating index..." 945*9e94795aSAndroid Build Coastguard Worker (\cd $T; find . -wholename ./out -prune -o -wholename ./.repo -prune -o -type f > $FILELIST) 946*9e94795aSAndroid Build Coastguard Worker echo " Done" 947*9e94795aSAndroid Build Coastguard Worker echo "" 948*9e94795aSAndroid Build Coastguard Worker fi 949*9e94795aSAndroid Build Coastguard Worker local lines 950*9e94795aSAndroid Build Coastguard Worker lines=($(\grep "$1" $FILELIST | sed -e 's/\/[^/]*$//' | sort | uniq)) 951*9e94795aSAndroid Build Coastguard Worker if [[ ${#lines[@]} = 0 ]]; then 952*9e94795aSAndroid Build Coastguard Worker echo "Not found" 953*9e94795aSAndroid Build Coastguard Worker return 954*9e94795aSAndroid Build Coastguard Worker fi 955*9e94795aSAndroid Build Coastguard Worker local pathname 956*9e94795aSAndroid Build Coastguard Worker local choice 957*9e94795aSAndroid Build Coastguard Worker if [[ ${#lines[@]} > 1 ]]; then 958*9e94795aSAndroid Build Coastguard Worker while [[ -z "$pathname" ]]; do 959*9e94795aSAndroid Build Coastguard Worker local index=1 960*9e94795aSAndroid Build Coastguard Worker local line 961*9e94795aSAndroid Build Coastguard Worker for line in ${lines[@]}; do 962*9e94795aSAndroid Build Coastguard Worker printf "%6s %s\n" "[$index]" $line 963*9e94795aSAndroid Build Coastguard Worker index=$(($index + 1)) 964*9e94795aSAndroid Build Coastguard Worker done 965*9e94795aSAndroid Build Coastguard Worker echo 966*9e94795aSAndroid Build Coastguard Worker echo -n "Select one: " 967*9e94795aSAndroid Build Coastguard Worker unset choice 968*9e94795aSAndroid Build Coastguard Worker read choice 969*9e94795aSAndroid Build Coastguard Worker if [[ $choice -gt ${#lines[@]} || $choice -lt 1 ]]; then 970*9e94795aSAndroid Build Coastguard Worker echo "Invalid choice" 971*9e94795aSAndroid Build Coastguard Worker continue 972*9e94795aSAndroid Build Coastguard Worker fi 973*9e94795aSAndroid Build Coastguard Worker pathname=${lines[@]:$(($choice-1)):1} 974*9e94795aSAndroid Build Coastguard Worker done 975*9e94795aSAndroid Build Coastguard Worker else 976*9e94795aSAndroid Build Coastguard Worker pathname=${lines[@]:0:1} 977*9e94795aSAndroid Build Coastguard Worker fi 978*9e94795aSAndroid Build Coastguard Worker \cd $T/$pathname 979*9e94795aSAndroid Build Coastguard Worker} 980*9e94795aSAndroid Build Coastguard Worker 981*9e94795aSAndroid Build Coastguard Worker# Go to a specific module in the android tree, as cached in module-info.json. If any build change 982*9e94795aSAndroid Build Coastguard Worker# is made, and it should be reflected in the output, you should run 'refreshmod' first. 983*9e94795aSAndroid Build Coastguard Worker# Note: This function is in envsetup because changing the directory needs to happen in the current 984*9e94795aSAndroid Build Coastguard Worker# shell. All other functions that use module-info.json should be in build/soong/bin. 985*9e94795aSAndroid Build Coastguard Workerfunction gomod() { 986*9e94795aSAndroid Build Coastguard Worker if [[ $# -ne 1 ]]; then 987*9e94795aSAndroid Build Coastguard Worker echo "usage: gomod <module>" >&2 988*9e94795aSAndroid Build Coastguard Worker return 1 989*9e94795aSAndroid Build Coastguard Worker fi 990*9e94795aSAndroid Build Coastguard Worker 991*9e94795aSAndroid Build Coastguard Worker local path="$(pathmod $@)" 992*9e94795aSAndroid Build Coastguard Worker if [ -z "$path" ]; then 993*9e94795aSAndroid Build Coastguard Worker return 1 994*9e94795aSAndroid Build Coastguard Worker fi 995*9e94795aSAndroid Build Coastguard Worker cd $path 996*9e94795aSAndroid Build Coastguard Worker} 997*9e94795aSAndroid Build Coastguard Worker 998*9e94795aSAndroid Build Coastguard Workerfunction _complete_android_module_names() { 999*9e94795aSAndroid Build Coastguard Worker local word=${COMP_WORDS[COMP_CWORD]} 1000*9e94795aSAndroid Build Coastguard Worker COMPREPLY=( $(allmod | grep -E "^$word") ) 1001*9e94795aSAndroid Build Coastguard Worker} 1002*9e94795aSAndroid Build Coastguard Worker 1003*9e94795aSAndroid Build Coastguard Workerfunction get_make_command() 1004*9e94795aSAndroid Build Coastguard Worker{ 1005*9e94795aSAndroid Build Coastguard Worker # If we're in the top of an Android tree, use soong_ui.bash instead of make 1006*9e94795aSAndroid Build Coastguard Worker if [ -f build/soong/soong_ui.bash ]; then 1007*9e94795aSAndroid Build Coastguard Worker # Always use the real make if -C is passed in 1008*9e94795aSAndroid Build Coastguard Worker for arg in "$@"; do 1009*9e94795aSAndroid Build Coastguard Worker if [[ $arg == -C* ]]; then 1010*9e94795aSAndroid Build Coastguard Worker echo command make 1011*9e94795aSAndroid Build Coastguard Worker return 1012*9e94795aSAndroid Build Coastguard Worker fi 1013*9e94795aSAndroid Build Coastguard Worker done 1014*9e94795aSAndroid Build Coastguard Worker echo build/soong/soong_ui.bash --make-mode 1015*9e94795aSAndroid Build Coastguard Worker else 1016*9e94795aSAndroid Build Coastguard Worker echo command make 1017*9e94795aSAndroid Build Coastguard Worker fi 1018*9e94795aSAndroid Build Coastguard Worker} 1019*9e94795aSAndroid Build Coastguard Worker 1020*9e94795aSAndroid Build Coastguard Workerfunction make() 1021*9e94795aSAndroid Build Coastguard Worker{ 1022*9e94795aSAndroid Build Coastguard Worker _wrap_build $(get_make_command "$@") "$@" 1023*9e94795aSAndroid Build Coastguard Worker} 1024*9e94795aSAndroid Build Coastguard Worker 1025*9e94795aSAndroid Build Coastguard Worker# Zsh needs bashcompinit called to support bash-style completion. 1026*9e94795aSAndroid Build Coastguard Workerfunction enable_zsh_completion() { 1027*9e94795aSAndroid Build Coastguard Worker # Don't override user's options if bash-style completion is already enabled. 1028*9e94795aSAndroid Build Coastguard Worker if ! declare -f complete >/dev/null; then 1029*9e94795aSAndroid Build Coastguard Worker autoload -U compinit && compinit 1030*9e94795aSAndroid Build Coastguard Worker autoload -U bashcompinit && bashcompinit 1031*9e94795aSAndroid Build Coastguard Worker fi 1032*9e94795aSAndroid Build Coastguard Worker} 1033*9e94795aSAndroid Build Coastguard Worker 1034*9e94795aSAndroid Build Coastguard Workerfunction validate_current_shell() { 1035*9e94795aSAndroid Build Coastguard Worker local current_sh="$(ps -o command -p $$)" 1036*9e94795aSAndroid Build Coastguard Worker case "$current_sh" in 1037*9e94795aSAndroid Build Coastguard Worker *bash*) 1038*9e94795aSAndroid Build Coastguard Worker function check_type() { type -t "$1"; } 1039*9e94795aSAndroid Build Coastguard Worker ;; 1040*9e94795aSAndroid Build Coastguard Worker *zsh*) 1041*9e94795aSAndroid Build Coastguard Worker function check_type() { type "$1"; } 1042*9e94795aSAndroid Build Coastguard Worker enable_zsh_completion ;; 1043*9e94795aSAndroid Build Coastguard Worker *) 1044*9e94795aSAndroid Build Coastguard Worker echo -e "WARNING: Only bash and zsh are supported.\nUse of other shell would lead to erroneous results." 1045*9e94795aSAndroid Build Coastguard Worker ;; 1046*9e94795aSAndroid Build Coastguard Worker esac 1047*9e94795aSAndroid Build Coastguard Worker} 1048*9e94795aSAndroid Build Coastguard Worker 1049*9e94795aSAndroid Build Coastguard Worker# Execute the contents of any vendorsetup.sh files we can find. 1050*9e94795aSAndroid Build Coastguard Worker# Unless we find an allowed-vendorsetup_sh-files file, in which case we'll only 1051*9e94795aSAndroid Build Coastguard Worker# load those. 1052*9e94795aSAndroid Build Coastguard Worker# 1053*9e94795aSAndroid Build Coastguard Worker# This allows loading only approved vendorsetup.sh files 1054*9e94795aSAndroid Build Coastguard Workerfunction source_vendorsetup() { 1055*9e94795aSAndroid Build Coastguard Worker unset VENDOR_PYTHONPATH 1056*9e94795aSAndroid Build Coastguard Worker local T="$(gettop)" 1057*9e94795aSAndroid Build Coastguard Worker allowed= 1058*9e94795aSAndroid Build Coastguard Worker for f in $(cd "$T" && find -L device vendor product -maxdepth 4 -name 'allowed-vendorsetup_sh-files' 2>/dev/null | sort); do 1059*9e94795aSAndroid Build Coastguard Worker if [ -n "$allowed" ]; then 1060*9e94795aSAndroid Build Coastguard Worker echo "More than one 'allowed_vendorsetup_sh-files' file found, not including any vendorsetup.sh files:" 1061*9e94795aSAndroid Build Coastguard Worker echo " $allowed" 1062*9e94795aSAndroid Build Coastguard Worker echo " $f" 1063*9e94795aSAndroid Build Coastguard Worker return 1064*9e94795aSAndroid Build Coastguard Worker fi 1065*9e94795aSAndroid Build Coastguard Worker allowed="$T/$f" 1066*9e94795aSAndroid Build Coastguard Worker done 1067*9e94795aSAndroid Build Coastguard Worker 1068*9e94795aSAndroid Build Coastguard Worker allowed_files= 1069*9e94795aSAndroid Build Coastguard Worker [ -n "$allowed" ] && allowed_files=$(cat "$allowed") 1070*9e94795aSAndroid Build Coastguard Worker for dir in device vendor product; do 1071*9e94795aSAndroid Build Coastguard Worker for f in $(cd "$T" && test -d $dir && \ 1072*9e94795aSAndroid Build Coastguard Worker find -L $dir -maxdepth 4 -name 'vendorsetup.sh' 2>/dev/null | sort); do 1073*9e94795aSAndroid Build Coastguard Worker 1074*9e94795aSAndroid Build Coastguard Worker if [[ -z "$allowed" || "$allowed_files" =~ $f ]]; then 1075*9e94795aSAndroid Build Coastguard Worker echo "including $f"; . "$T/$f" 1076*9e94795aSAndroid Build Coastguard Worker else 1077*9e94795aSAndroid Build Coastguard Worker echo "ignoring $f, not in $allowed" 1078*9e94795aSAndroid Build Coastguard Worker fi 1079*9e94795aSAndroid Build Coastguard Worker done 1080*9e94795aSAndroid Build Coastguard Worker done 1081*9e94795aSAndroid Build Coastguard Worker 1082*9e94795aSAndroid Build Coastguard Worker setup_cog_env_if_needed 1083*9e94795aSAndroid Build Coastguard Worker} 1084*9e94795aSAndroid Build Coastguard Worker 1085*9e94795aSAndroid Build Coastguard Workerfunction showcommands() { 1086*9e94795aSAndroid Build Coastguard Worker local T=$(gettop) 1087*9e94795aSAndroid Build Coastguard Worker if [[ -z "$TARGET_PRODUCT" ]]; then 1088*9e94795aSAndroid Build Coastguard Worker >&2 echo "TARGET_PRODUCT not set. Run lunch." 1089*9e94795aSAndroid Build Coastguard Worker return 1090*9e94795aSAndroid Build Coastguard Worker fi 1091*9e94795aSAndroid Build Coastguard Worker case $(uname -s) in 1092*9e94795aSAndroid Build Coastguard Worker Darwin) 1093*9e94795aSAndroid Build Coastguard Worker PREBUILT_NAME=darwin-x86 1094*9e94795aSAndroid Build Coastguard Worker ;; 1095*9e94795aSAndroid Build Coastguard Worker Linux) 1096*9e94795aSAndroid Build Coastguard Worker PREBUILT_NAME=linux-x86 1097*9e94795aSAndroid Build Coastguard Worker ;; 1098*9e94795aSAndroid Build Coastguard Worker *) 1099*9e94795aSAndroid Build Coastguard Worker >&2 echo Unknown host $(uname -s) 1100*9e94795aSAndroid Build Coastguard Worker return 1101*9e94795aSAndroid Build Coastguard Worker ;; 1102*9e94795aSAndroid Build Coastguard Worker esac 1103*9e94795aSAndroid Build Coastguard Worker OUT_DIR="$(_get_abs_build_var_cached OUT_DIR)" 1104*9e94795aSAndroid Build Coastguard Worker if [[ "$1" == "--regenerate" ]]; then 1105*9e94795aSAndroid Build Coastguard Worker shift 1 1106*9e94795aSAndroid Build Coastguard Worker NINJA_ARGS="-t commands $@" m 1107*9e94795aSAndroid Build Coastguard Worker else 1108*9e94795aSAndroid Build Coastguard Worker (cd $T && prebuilts/build-tools/$PREBUILT_NAME/bin/ninja \ 1109*9e94795aSAndroid Build Coastguard Worker -f $OUT_DIR/combined-${TARGET_PRODUCT}.ninja \ 1110*9e94795aSAndroid Build Coastguard Worker -t commands "$@") 1111*9e94795aSAndroid Build Coastguard Worker fi 1112*9e94795aSAndroid Build Coastguard Worker} 1113*9e94795aSAndroid Build Coastguard Worker 1114*9e94795aSAndroid Build Coastguard Worker# These functions used to be here but are now standalone scripts 1115*9e94795aSAndroid Build Coastguard Worker# in build/soong/bin. Unset these for the time being so the real 1116*9e94795aSAndroid Build Coastguard Worker# script is picked up. 1117*9e94795aSAndroid Build Coastguard Worker# TODO: Remove this some time after a suitable delay (maybe 2025?) 1118*9e94795aSAndroid Build Coastguard Workerunset allmod 1119*9e94795aSAndroid Build Coastguard Workerunset aninja 1120*9e94795aSAndroid Build Coastguard Workerunset cgrep 1121*9e94795aSAndroid Build Coastguard Workerunset core 1122*9e94795aSAndroid Build Coastguard Workerunset coredump_enable 1123*9e94795aSAndroid Build Coastguard Workerunset coredump_setup 1124*9e94795aSAndroid Build Coastguard Workerunset dirmods 1125*9e94795aSAndroid Build Coastguard Workerunset get_build_var 1126*9e94795aSAndroid Build Coastguard Workerunset get_abs_build_var 1127*9e94795aSAndroid Build Coastguard Workerunset getlastscreenshot 1128*9e94795aSAndroid Build Coastguard Workerunset getprebuilt 1129*9e94795aSAndroid Build Coastguard Workerunset getscreenshotpath 1130*9e94795aSAndroid Build Coastguard Workerunset getsdcardpath 1131*9e94795aSAndroid Build Coastguard Workerunset gettargetarch 1132*9e94795aSAndroid Build Coastguard Workerunset ggrep 1133*9e94795aSAndroid Build Coastguard Workerunset gogrep 1134*9e94795aSAndroid Build Coastguard Workerunset hmm 1135*9e94795aSAndroid Build Coastguard Workerunset installmod 1136*9e94795aSAndroid Build Coastguard Workerunset is64bit 1137*9e94795aSAndroid Build Coastguard Workerunset isviewserverstarted 1138*9e94795aSAndroid Build Coastguard Workerunset jgrep 1139*9e94795aSAndroid Build Coastguard Workerunset jsongrep 1140*9e94795aSAndroid Build Coastguard Workerunset key_back 1141*9e94795aSAndroid Build Coastguard Workerunset key_home 1142*9e94795aSAndroid Build Coastguard Workerunset key_menu 1143*9e94795aSAndroid Build Coastguard Workerunset ktgrep 1144*9e94795aSAndroid Build Coastguard Workerunset m 1145*9e94795aSAndroid Build Coastguard Workerunset mangrep 1146*9e94795aSAndroid Build Coastguard Workerunset mgrep 1147*9e94795aSAndroid Build Coastguard Workerunset mm 1148*9e94795aSAndroid Build Coastguard Workerunset mma 1149*9e94795aSAndroid Build Coastguard Workerunset mmm 1150*9e94795aSAndroid Build Coastguard Workerunset mmma 1151*9e94795aSAndroid Build Coastguard Workerunset outmod 1152*9e94795aSAndroid Build Coastguard Workerunset overrideflags 1153*9e94795aSAndroid Build Coastguard Workerunset owngrep 1154*9e94795aSAndroid Build Coastguard Workerunset pathmod 1155*9e94795aSAndroid Build Coastguard Workerunset pez 1156*9e94795aSAndroid Build Coastguard Workerunset pygrep 1157*9e94795aSAndroid Build Coastguard Workerunset qpid 1158*9e94795aSAndroid Build Coastguard Workerunset rcgrep 1159*9e94795aSAndroid Build Coastguard Workerunset refreshmod 1160*9e94795aSAndroid Build Coastguard Workerunset resgrep 1161*9e94795aSAndroid Build Coastguard Workerunset rsgrep 1162*9e94795aSAndroid Build Coastguard Workerunset run_tool_with_logging 1163*9e94795aSAndroid Build Coastguard Workerunset sepgrep 1164*9e94795aSAndroid Build Coastguard Workerunset sgrep 1165*9e94795aSAndroid Build Coastguard Workerunset startviewserver 1166*9e94795aSAndroid Build Coastguard Workerunset stopviewserver 1167*9e94795aSAndroid Build Coastguard Workerunset systemstack 1168*9e94795aSAndroid Build Coastguard Workerunset syswrite 1169*9e94795aSAndroid Build Coastguard Workerunset tomlgrep 1170*9e94795aSAndroid Build Coastguard Workerunset treegrep 1171*9e94795aSAndroid Build Coastguard Worker 1172*9e94795aSAndroid Build Coastguard Worker 1173*9e94795aSAndroid Build Coastguard Workervalidate_current_shell 1174*9e94795aSAndroid Build Coastguard Workerset_global_paths 1175*9e94795aSAndroid Build Coastguard Workersource_vendorsetup 1176*9e94795aSAndroid Build Coastguard Workeraddcompletions 1177*9e94795aSAndroid Build Coastguard Worker 1178*9e94795aSAndroid Build Coastguard Worker 1179