xref: /aosp_15_r20/build/make/envsetup.sh (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
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