blob: 352d66442f323cc594403c3de04b6520209e68a4 [file] [log] [blame]
Joe Onorato344e4042022-12-05 15:15:36 -08001# Copyright (C) 2022 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15# gettop is duplicated here and in shell_utils.mk, because it's difficult
16# to find shell_utils.make without it for all the novel ways this file can be
17# sourced. Other common functions should only be in one place or the other.
18function _gettop_once
19{
20 local TOPFILE=build/make/core/envsetup.mk
21 if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then
22 # The following circumlocution ensures we remove symlinks from TOP.
23 (cd "$TOP"; PWD= /bin/pwd)
24 else
25 if [ -f $TOPFILE ] ; then
26 # The following circumlocution (repeated below as well) ensures
27 # that we record the true directory name and not one that is
28 # faked up with symlink names.
29 PWD= /bin/pwd
30 else
31 local HERE=$PWD
32 local T=
33 while [ \( ! \( -f $TOPFILE \) \) -a \( "$PWD" != "/" \) ]; do
34 \cd ..
35 T=`PWD= /bin/pwd -P`
36 done
37 \cd "$HERE"
38 if [ -f "$T/$TOPFILE" ]; then
39 echo "$T"
40 fi
41 fi
42 fi
43}
44T=$(_gettop_once)
45if [ ! "$T" ]; then
46 echo "Couldn't locate the top of the tree. Always source build/envsetup.sh from the root of the tree." >&2
47 return 1
48fi
49IMPORTING_ENVSETUP=true source $T/build/make/shell_utils.sh
50
Ying Wang08800fd2016-03-03 20:57:21 -080051# Get all the build variables needed by this script in a single call to the build system.
Matt Alexanderd9c56562020-05-21 10:49:17 +000052function build_build_var_cache()
53{
Christopher Ferris55257d22017-03-23 11:08:58 -070054 local T=$(gettop)
Ying Wang08800fd2016-03-03 20:57:21 -080055 # Grep out the variable names from the script.
Joe Onorato0e68f702024-05-24 14:19:21 -070056 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 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' ' '`)
Ying Wang08800fd2016-03-03 20:57:21 -080058 # Call the build system to dump the "<val>=<value>" pairs as a shell script.
Steven Moreland05402962018-01-05 12:13:11 -080059 build_dicts_script=`\builtin cd $T; build/soong/soong_ui.bash --dumpvars-mode \
Jim Tanga881a252018-06-19 16:34:41 +080060 --vars="${cached_vars[*]}" \
61 --abs-vars="${cached_abs_vars[*]}" \
Dan Willemsenaf88c412017-07-14 11:29:44 -070062 --var-prefix=var_cache_ \
63 --abs-var-prefix=abs_var_cache_`
Ying Wang08800fd2016-03-03 20:57:21 -080064 local ret=$?
Matt Alexanderd9c56562020-05-21 10:49:17 +000065 if [ $ret -ne 0 ]
66 then
Ying Wang08800fd2016-03-03 20:57:21 -080067 unset build_dicts_script
68 return $ret
69 fi
Dan Willemsenaf88c412017-07-14 11:29:44 -070070 # Execute the script to store the "<val>=<value>" pairs as shell variables.
Ying Wang08800fd2016-03-03 20:57:21 -080071 eval "$build_dicts_script"
Ying Wang08800fd2016-03-03 20:57:21 -080072 ret=$?
Ying Wangf0cb3972016-03-04 13:56:23 -080073 unset build_dicts_script
Matt Alexanderd9c56562020-05-21 10:49:17 +000074 if [ $ret -ne 0 ]
75 then
Ying Wang08800fd2016-03-03 20:57:21 -080076 return $ret
77 fi
78 BUILD_VAR_CACHE_READY="true"
79}
80
Ying Wangf0cb3972016-03-04 13:56:23 -080081# Delete the build var cache, so that we can still call into the build system
Ying Wang08800fd2016-03-03 20:57:21 -080082# to get build variables not listed in this script.
Matt Alexanderd9c56562020-05-21 10:49:17 +000083function destroy_build_var_cache()
84{
Ying Wang08800fd2016-03-03 20:57:21 -080085 unset BUILD_VAR_CACHE_READY
Christopher Ferris55257d22017-03-23 11:08:58 -070086 local v
Ying Wang08800fd2016-03-03 20:57:21 -080087 for v in $cached_vars; do
88 unset var_cache_$v
89 done
90 unset cached_vars
91 for v in $cached_abs_vars; do
92 unset abs_var_cache_$v
93 done
94 unset cached_abs_vars
95}
96
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -070097# Get the value of a build variable as an absolute path.
Joe Onorato0e68f702024-05-24 14:19:21 -070098function _get_abs_build_var_cached()
Matt Alexanderd9c56562020-05-21 10:49:17 +000099{
100 if [ "$BUILD_VAR_CACHE_READY" = "true" ]
101 then
Vishwath Mohan7d35f002016-03-11 10:00:40 -0800102 eval "echo \"\${abs_var_cache_$1}\""
Timi0469c3f2021-04-15 16:41:18 +0200103 return
Ying Wang08800fd2016-03-03 20:57:21 -0800104 fi
105
Christopher Ferris55257d22017-03-23 11:08:58 -0700106 local T=$(gettop)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700107 if [ ! "$T" ]; then
108 echo "Couldn't locate the top of the tree. Try setting TOP." >&2
109 return
110 fi
Dan Willemsenaf88c412017-07-14 11:29:44 -0700111 (\cd $T; build/soong/soong_ui.bash --dumpvar-mode --abs $1)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700112}
113
114# Get the exact value of a build variable.
Joe Onorato0e68f702024-05-24 14:19:21 -0700115function _get_build_var_cached()
Matt Alexanderd9c56562020-05-21 10:49:17 +0000116{
117 if [ "$BUILD_VAR_CACHE_READY" = "true" ]
118 then
Vishwath Mohan7d35f002016-03-11 10:00:40 -0800119 eval "echo \"\${var_cache_$1}\""
Roland Levillain23c46cf2020-03-31 16:11:05 +0100120 return 0
Ying Wang08800fd2016-03-03 20:57:21 -0800121 fi
122
Christopher Ferris55257d22017-03-23 11:08:58 -0700123 local T=$(gettop)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700124 if [ ! "$T" ]; then
125 echo "Couldn't locate the top of the tree. Try setting TOP." >&2
Roland Levillain23c46cf2020-03-31 16:11:05 +0100126 return 1
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700127 fi
Dan Willemsenaf88c412017-07-14 11:29:44 -0700128 (\cd $T; build/soong/soong_ui.bash --dumpvar-mode $1)
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800129}
130
Joe Onorato32b2aa32024-05-14 13:54:13 -0700131# This logic matches envsetup.mk
132function get_host_prebuilt_prefix
133{
134 local un=$(uname)
135 if [[ $un == "Linux" ]] ; then
136 echo linux-x86
137 elif [[ $un == "Darwin" ]] ; then
138 echo darwin-x86
139 else
140 echo "Error: Invalid host operating system: $un" 1>&2
141 fi
142}
143
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800144# Add directories to PATH that are dependent on the lunch target.
145# For directories that are not lunch-specific, add them in set_global_paths
146function set_lunch_paths()
Matt Alexanderd9c56562020-05-21 10:49:17 +0000147{
Christopher Ferris55257d22017-03-23 11:08:58 -0700148 local T=$(gettop)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700149 if [ ! "$T" ]; then
150 echo "Couldn't locate the top of the tree. Try setting TOP."
151 return
152 fi
153
154 ##################################################################
155 # #
156 # Read me before you modify this code #
157 # #
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800158 # This function sets ANDROID_LUNCH_BUILD_PATHS to what it is #
159 # adding to PATH, and the next time it is run, it removes that #
160 # from PATH. This is required so lunch can be run more than #
161 # once and still have working paths. #
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700162 # #
163 ##################################################################
164
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800165 # Note: on windows/cygwin, ANDROID_LUNCH_BUILD_PATHS will contain spaces
Raphael Mollc639c782011-06-20 17:25:01 -0700166 # due to "C:\Program Files" being in the path.
167
Kevin Dagostino185109b2024-01-11 17:39:02 +0000168 # Handle compat with the old ANDROID_BUILD_PATHS variable.
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800169 # TODO: Remove this after we think everyone has lunched again.
170 if [ -z "$ANDROID_LUNCH_BUILD_PATHS" -a -n "$ANDROID_BUILD_PATHS" ] ; then
171 ANDROID_LUNCH_BUILD_PATHS="$ANDROID_BUILD_PATHS"
172 ANDROID_BUILD_PATHS=
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700173 fi
Matt Alexanderd9c56562020-05-21 10:49:17 +0000174 if [ -n "$ANDROID_PRE_BUILD_PATHS" ] ; then
Doug Zongker29034982011-04-22 08:16:56 -0700175 export PATH=${PATH/$ANDROID_PRE_BUILD_PATHS/}
Ying Wangaa1c9b52012-11-26 20:51:59 -0800176 # strip leading ':', if any
177 export PATH=${PATH/:%/}
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800178 ANDROID_PRE_BUILD_PATHS=
Jeff Hamilton4a1c70e2010-06-21 18:26:38 -0500179 fi
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700180
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800181 # Out with the old...
182 if [ -n "$ANDROID_LUNCH_BUILD_PATHS" ] ; then
183 export PATH=${PATH/$ANDROID_LUNCH_BUILD_PATHS/}
184 fi
Ben Chengfba67bf2014-02-25 10:27:07 -0800185
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800186 # And in with the new...
Joe Onorato0e68f702024-05-24 14:19:21 -0700187 ANDROID_LUNCH_BUILD_PATHS=$(_get_abs_build_var_cached SOONG_HOST_OUT_EXECUTABLES)
188 ANDROID_LUNCH_BUILD_PATHS+=:$(_get_abs_build_var_cached HOST_OUT_EXECUTABLES)
Yueyao Zhuefc786a2017-04-07 14:11:54 -0700189
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800190 # Append llvm binutils prebuilts path to ANDROID_LUNCH_BUILD_PATHS.
Joe Onorato0e68f702024-05-24 14:19:21 -0700191 local ANDROID_LLVM_BINUTILS=$(_get_abs_build_var_cached ANDROID_CLANG_PREBUILTS)/llvm-binutils-stable
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800192 ANDROID_LUNCH_BUILD_PATHS+=:$ANDROID_LLVM_BINUTILS
David 'Digit' Turner94d16e52014-05-05 16:13:50 +0200193
Stephen Hinesaa8d72c2020-02-04 09:15:18 -0800194 # Set up ASAN_SYMBOLIZER_PATH for SANITIZE_HOST=address builds.
195 export ASAN_SYMBOLIZER_PATH=$ANDROID_LLVM_BINUTILS/llvm-symbolizer
196
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800197 # Append asuite prebuilts path to ANDROID_LUNCH_BUILD_PATHS.
Joe Onorato0e68f702024-05-24 14:19:21 -0700198 local os_arch=$(_get_build_var_cached HOST_PREBUILT_TAG)
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800199 ANDROID_LUNCH_BUILD_PATHS+=:$T/prebuilts/asuite/acloud/$os_arch
200 ANDROID_LUNCH_BUILD_PATHS+=:$T/prebuilts/asuite/aidegen/$os_arch
201 ANDROID_LUNCH_BUILD_PATHS+=:$T/prebuilts/asuite/atest/$os_arch
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800202
Joe Onorato0e68f702024-05-24 14:19:21 -0700203 export ANDROID_JAVA_HOME=$(_get_abs_build_var_cached ANDROID_JAVA_HOME)
Colin Crosse97e6932017-06-30 16:01:45 -0700204 export JAVA_HOME=$ANDROID_JAVA_HOME
Joe Onorato0e68f702024-05-24 14:19:21 -0700205 export ANDROID_JAVA_TOOLCHAIN=$(_get_abs_build_var_cached ANDROID_JAVA_TOOLCHAIN)
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800206 ANDROID_LUNCH_BUILD_PATHS+=:$ANDROID_JAVA_TOOLCHAIN
207
208 # Fix up PYTHONPATH
209 if [ -n $ANDROID_PYTHONPATH ]; then
210 export PYTHONPATH=${PYTHONPATH//$ANDROID_PYTHONPATH/}
211 fi
Dan Albert0d6d3592023-01-26 00:07:03 +0000212 # //development/python-packages contains both a pseudo-PYTHONPATH which
213 # mimics an already assembled venv, but also contains real Python packages
214 # that are not in that layout until they are installed. We can fake it for
215 # the latter type by adding the package source directories to the PYTHONPATH
216 # directly. For the former group, we only need to add the python-packages
217 # directory itself.
218 #
219 # This could be cleaned up by converting the remaining packages that are in
220 # the first category into a typical python source layout (that is, another
221 # layer of directory nesting) and automatically adding all subdirectories of
222 # python-packages to the PYTHONPATH instead of manually curating this. We
223 # can't convert the packages like adb to the other style because doing so
224 # would prevent exporting type info from those packages.
225 #
226 # http://b/266688086
Dan Albert426ac692023-05-16 22:59:55 +0000227 export ANDROID_PYTHONPATH=$T/development/python-packages/adb:$T/development/python-packages/gdbrunner:$T/development/python-packages:
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800228 if [ -n $VENDOR_PYTHONPATH ]; then
229 ANDROID_PYTHONPATH=$ANDROID_PYTHONPATH$VENDOR_PYTHONPATH
230 fi
231 export PYTHONPATH=$ANDROID_PYTHONPATH$PYTHONPATH
Jeff Hamilton4a1c70e2010-06-21 18:26:38 -0500232
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800233 unset ANDROID_PRODUCT_OUT
Joe Onorato0e68f702024-05-24 14:19:21 -0700234 export ANDROID_PRODUCT_OUT=$(_get_abs_build_var_cached PRODUCT_OUT)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700235 export OUT=$ANDROID_PRODUCT_OUT
236
Jeff Brown8fd5cce2011-03-24 17:03:06 -0700237 unset ANDROID_HOST_OUT
Joe Onorato0e68f702024-05-24 14:19:21 -0700238 export ANDROID_HOST_OUT=$(_get_abs_build_var_cached HOST_OUT)
Jeff Brown8fd5cce2011-03-24 17:03:06 -0700239
Jiyong Parkc02b1c42020-11-03 11:06:39 +0900240 unset ANDROID_SOONG_HOST_OUT
Joe Onorato0e68f702024-05-24 14:19:21 -0700241 export ANDROID_SOONG_HOST_OUT=$(_get_abs_build_var_cached SOONG_HOST_OUT)
Jiyong Parkc02b1c42020-11-03 11:06:39 +0900242
Simran Basidd050ed2017-02-13 13:46:48 -0800243 unset ANDROID_HOST_OUT_TESTCASES
Joe Onorato0e68f702024-05-24 14:19:21 -0700244 export ANDROID_HOST_OUT_TESTCASES=$(_get_abs_build_var_cached HOST_OUT_TESTCASES)
Simran Basidd050ed2017-02-13 13:46:48 -0800245
246 unset ANDROID_TARGET_OUT_TESTCASES
Joe Onorato0e68f702024-05-24 14:19:21 -0700247 export ANDROID_TARGET_OUT_TESTCASES=$(_get_abs_build_var_cached TARGET_OUT_TESTCASES)
Simran Basidd050ed2017-02-13 13:46:48 -0800248
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800249 # Finally, set PATH
Joe Onorato1cb9e152022-12-05 16:56:15 -0800250 export PATH=$ANDROID_LUNCH_BUILD_PATHS:$PATH
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800251}
252
253# Add directories to PATH that are NOT dependent on the lunch target.
254# For directories that are lunch-specific, add them in set_lunch_paths
255function set_global_paths()
256{
257 local T=$(gettop)
258 if [ ! "$T" ]; then
259 echo "Couldn't locate the top of the tree. Try setting TOP."
260 return
261 fi
262
263 ##################################################################
264 # #
265 # Read me before you modify this code #
266 # #
267 # This function sets ANDROID_GLOBAL_BUILD_PATHS to what it is #
268 # adding to PATH, and the next time it is run, it removes that #
269 # from PATH. This is required so envsetup.sh can be sourced #
270 # more than once and still have working paths. #
271 # #
272 ##################################################################
273
274 # Out with the old...
275 if [ -n "$ANDROID_GLOBAL_BUILD_PATHS" ] ; then
276 export PATH=${PATH/$ANDROID_GLOBAL_BUILD_PATHS/}
277 fi
278
279 # And in with the new...
Joe Onorato84e61d02024-02-02 22:53:39 -0800280 ANDROID_GLOBAL_BUILD_PATHS=$T/build/soong/bin
LaMont Jonese8a3be22024-02-12 09:55:41 -0800281 ANDROID_GLOBAL_BUILD_PATHS+=:$T/build/bazel/bin
Joe Onorato1cb9e152022-12-05 16:56:15 -0800282 ANDROID_GLOBAL_BUILD_PATHS+=:$T/development/scripts
283 ANDROID_GLOBAL_BUILD_PATHS+=:$T/prebuilts/devtools/tools
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800284
285 # add kernel specific binaries
286 if [ $(uname -s) = Linux ] ; then
287 ANDROID_GLOBAL_BUILD_PATHS+=:$T/prebuilts/misc/linux-x86/dtc
288 ANDROID_GLOBAL_BUILD_PATHS+=:$T/prebuilts/misc/linux-x86/libufdt
289 fi
290
291 # If prebuilts/android-emulator/<system>/ exists, prepend it to our PATH
292 # to ensure that the corresponding 'emulator' binaries are used.
293 case $(uname -s) in
294 Darwin)
295 ANDROID_EMULATOR_PREBUILTS=$T/prebuilts/android-emulator/darwin-x86_64
296 ;;
297 Linux)
298 ANDROID_EMULATOR_PREBUILTS=$T/prebuilts/android-emulator/linux-x86_64
299 ;;
300 *)
301 ANDROID_EMULATOR_PREBUILTS=
302 ;;
303 esac
304 if [ -n "$ANDROID_EMULATOR_PREBUILTS" -a -d "$ANDROID_EMULATOR_PREBUILTS" ]; then
305 ANDROID_GLOBAL_BUILD_PATHS+=:$ANDROID_EMULATOR_PREBUILTS
306 export ANDROID_EMULATOR_PREBUILTS
307 fi
308
309 # Finally, set PATH
Joe Onorato1cb9e152022-12-05 16:56:15 -0800310 export PATH=$ANDROID_GLOBAL_BUILD_PATHS:$PATH
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700311}
312
Matt Alexanderd9c56562020-05-21 10:49:17 +0000313function printconfig()
314{
Christopher Ferris55257d22017-03-23 11:08:58 -0700315 local T=$(gettop)
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800316 if [ ! "$T" ]; then
317 echo "Couldn't locate the top of the tree. Try setting TOP." >&2
318 return
319 fi
Joe Onorato0e68f702024-05-24 14:19:21 -0700320 _get_build_var_cached report_config
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700321}
322
Matt Alexanderd9c56562020-05-21 10:49:17 +0000323function set_stuff_for_environment()
324{
Joe Onorato7c3a77f2022-12-05 13:05:14 -0800325 set_lunch_paths
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800326 set_sequence_number
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700327
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800328 export ANDROID_BUILD_TOP=$(gettop)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700329}
330
Matt Alexanderd9c56562020-05-21 10:49:17 +0000331function set_sequence_number()
332{
Colin Cross88737132017-03-21 17:41:03 -0700333 export BUILD_ENV_SEQUENCE_NUMBER=13
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700334}
335
Makoto Onukida971062018-06-18 10:15:19 -0700336# Takes a command name, and check if it's in ENVSETUP_NO_COMPLETION or not.
337function should_add_completion() {
Jim Tanga881a252018-06-19 16:34:41 +0800338 local cmd="$(basename $1| sed 's/_completion//' |sed 's/\.\(.*\)*sh$//')"
Makoto Onukida971062018-06-18 10:15:19 -0700339 case :"$ENVSETUP_NO_COMPLETION": in
Jim Tanga881a252018-06-19 16:34:41 +0800340 *:"$cmd":*)
341 return 1
342 ;;
Makoto Onukida971062018-06-18 10:15:19 -0700343 esac
344 return 0
345}
346
Matt Alexanderd9c56562020-05-21 10:49:17 +0000347function addcompletions()
348{
Ben Taitelbaum8c2c9cf2020-09-22 16:45:05 -0700349 local f=
Kenny Root52aa81c2011-07-15 11:07:06 -0700350
Jim Tanga881a252018-06-19 16:34:41 +0800351 # Keep us from trying to run in something that's neither bash nor zsh.
352 if [ -z "$BASH_VERSION" -a -z "$ZSH_VERSION" ]; then
Kenny Root52aa81c2011-07-15 11:07:06 -0700353 return
354 fi
355
356 # Keep us from trying to run in bash that's too old.
Jim Tanga881a252018-06-19 16:34:41 +0800357 if [ -n "$BASH_VERSION" -a ${BASH_VERSINFO[0]} -lt 3 ]; then
Kenny Root52aa81c2011-07-15 11:07:06 -0700358 return
359 fi
360
Jim Tanga881a252018-06-19 16:34:41 +0800361 local completion_files=(
MÃ¥rten Kongstadcb5c73f2022-05-04 14:08:12 +0000362 packages/modules/adb/adb.bash
Jim Tanga881a252018-06-19 16:34:41 +0800363 system/core/fastboot/fastboot.bash
Jim Tangb3fda302018-12-22 10:24:55 +0800364 tools/asuite/asuite.sh
Chris Parsonsa2972972022-08-31 15:04:38 -0400365 prebuilts/bazel/common/bazel-complete.bash
Jim Tanga881a252018-06-19 16:34:41 +0800366 )
Makoto Onukida971062018-06-18 10:15:19 -0700367 # Completion can be disabled selectively to allow users to use non-standard completion.
368 # e.g.
369 # ENVSETUP_NO_COMPLETION=adb # -> disable adb completion
370 # ENVSETUP_NO_COMPLETION=adb:bit # -> disable adb and bit completion
Usta Shrestha1433fb32022-05-13 14:49:40 -0400371 local T=$(gettop)
Jim Tanga881a252018-06-19 16:34:41 +0800372 for f in ${completion_files[*]}; do
Usta Shrestha1433fb32022-05-13 14:49:40 -0400373 f="$T/$f"
MÃ¥rten Kongstadcb5c73f2022-05-04 14:08:12 +0000374 if [ ! -f "$f" ]; then
375 echo "Warning: completion file $f not found"
376 elif should_add_completion "$f"; then
Kenny Root52aa81c2011-07-15 11:07:06 -0700377 . $f
Elliott Hughesce18dd42018-04-03 13:49:48 -0700378 fi
379 done
Joe Onorato002a6c72016-10-20 16:39:49 -0700380
Anton Hanssonece9c482019-02-04 18:15:39 +0000381 if [ -z "$ZSH_VERSION" ]; then
382 # Doesn't work in zsh.
383 complete -o nospace -F _croot croot
Chris Parsonsa2972972022-08-31 15:04:38 -0400384 # TODO(b/244559459): Support b autocompletion for zsh
385 complete -F _bazel__complete -o nospace b
Anton Hanssonece9c482019-02-04 18:15:39 +0000386 fi
Jim Tanga881a252018-06-19 16:34:41 +0800387 complete -F _lunch lunch
Joe Onorato590ae9f2024-05-24 15:38:58 -0700388 complete -F _lunch_completion lunch2
Steven Moreland62054a42018-12-06 10:11:40 -0800389
Cole Faust24c36db2021-01-23 02:39:37 +0000390 complete -F _complete_android_module_names pathmod
dimitry73b84812018-12-11 18:06:00 +0100391 complete -F _complete_android_module_names gomod
Cole Faust24c36db2021-01-23 02:39:37 +0000392 complete -F _complete_android_module_names outmod
393 complete -F _complete_android_module_names installmod
dimitry73b84812018-12-11 18:06:00 +0100394 complete -F _complete_android_module_names m
Kenny Root52aa81c2011-07-15 11:07:06 -0700395}
396
Matt Alexanderd9c56562020-05-21 10:49:17 +0000397function add_lunch_combo()
398{
Dan Willemsen5436c7e2019-02-11 21:31:47 -0800399 if [ -n "$ZSH_VERSION" ]; then
400 echo -n "${funcfiletrace[1]}: "
401 else
402 echo -n "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: "
403 fi
404 echo "add_lunch_combo is obsolete. Use COMMON_LUNCH_CHOICES in your AndroidProducts.mk instead."
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800405}
406
Matt Alexanderd9c56562020-05-21 10:49:17 +0000407function print_lunch_menu()
408{
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700409 local uname=$(uname)
Roland Levillain23c46cf2020-03-31 16:11:05 +0100410 local choices
Joe Onorato0e68f702024-05-24 14:19:21 -0700411 choices=$(TARGET_BUILD_APPS= TARGET_PRODUCT= TARGET_RELEASE= TARGET_BUILD_VARIANT= _get_build_var_cached COMMON_LUNCH_CHOICES 2>/dev/null)
Roland Levillain23c46cf2020-03-31 16:11:05 +0100412 local ret=$?
413
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700414 echo
415 echo "You're building on" $uname
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700416 echo
Roland Levillain23c46cf2020-03-31 16:11:05 +0100417
Matt Alexanderd9c56562020-05-21 10:49:17 +0000418 if [ $ret -ne 0 ]
419 then
Roland Levillain23c46cf2020-03-31 16:11:05 +0100420 echo "Warning: Cannot display lunch menu."
421 echo
422 echo "Note: You can invoke lunch with an explicit target:"
423 echo
424 echo " usage: lunch [target]" >&2
425 echo
426 return
427 fi
428
Will Burr40401202022-02-07 12:12:01 +0000429 echo "Lunch menu .. Here are the common combinations:"
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800430
431 local i=1
432 local choice
Dan Willemsen91763e92019-10-03 15:13:12 -0700433 for choice in $(echo $choices)
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800434 do
435 echo " $i. $choice"
436 i=$(($i+1))
437 done
438
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700439 echo
440}
441
Matt Alexanderd9c56562020-05-21 10:49:17 +0000442function lunch()
443{
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800444 local answer
445
Steven Moreland92793dc2020-02-25 18:30:18 -0800446 if [[ $# -gt 1 ]]; then
447 echo "usage: lunch [target]" >&2
448 return 1
449 fi
450
Will Burr40401202022-02-07 12:12:01 +0000451 local used_lunch_menu=0
452
Steven Moreland92793dc2020-02-25 18:30:18 -0800453 if [ "$1" ]; then
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800454 answer=$1
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700455 else
456 print_lunch_menu
Greg Kaiserbae4c572024-01-04 15:57:54 -0700457 echo "Which would you like? [aosp_cf_x86_64_phone-trunk_staging-eng]"
Greg Kaiser9a5a5262023-11-02 16:54:27 +0000458 echo -n "Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-trunk_staging-eng): "
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800459 read answer
Will Burr40401202022-02-07 12:12:01 +0000460 used_lunch_menu=1
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700461 fi
462
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800463 local selection=
464
Matt Alexanderd9c56562020-05-21 10:49:17 +0000465 if [ -z "$answer" ]
466 then
Greg Kaiserbae4c572024-01-04 15:57:54 -0700467 selection=aosp_cf_x86_64_phone-trunk_staging-eng
Matt Alexanderd9c56562020-05-21 10:49:17 +0000468 elif (echo -n $answer | grep -q -e "^[0-9][0-9]*$")
469 then
Joe Onorato0e68f702024-05-24 14:19:21 -0700470 local choices=($(TARGET_BUILD_APPS= TARGET_PRODUCT= TARGET_RELEASE= TARGET_BUILD_VARIANT= _get_build_var_cached COMMON_LUNCH_CHOICES 2>/dev/null))
Matt Alexanderd9c56562020-05-21 10:49:17 +0000471 if [ $answer -le ${#choices[@]} ]
472 then
Jim Tang0e3397b2018-10-03 18:25:50 +0800473 # array in zsh starts from 1 instead of 0.
Matt Alexanderd9c56562020-05-21 10:49:17 +0000474 if [ -n "$ZSH_VERSION" ]
475 then
Jim Tang0e3397b2018-10-03 18:25:50 +0800476 selection=${choices[$(($answer))]}
477 else
478 selection=${choices[$(($answer-1))]}
479 fi
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800480 fi
Colin Cross88737132017-03-21 17:41:03 -0700481 else
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800482 selection=$answer
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700483 fi
484
Joe Onoratoda12daf2010-06-09 18:18:31 -0700485 export TARGET_BUILD_APPS=
486
Greg Kaiser5e2d3392023-10-27 14:15:48 -0600487 # This must be <product>-<release>-<variant>
488 local product release variant
489 # Split string on the '-' character.
490 IFS="-" read -r product release variant <<< "$selection"
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800491
Greg Kaiser5e2d3392023-10-27 14:15:48 -0600492 if [[ -z "$product" ]] || [[ -z "$release" ]] || [[ -z "$variant" ]]
Matt Alexanderd9c56562020-05-21 10:49:17 +0000493 then
Ying Wang08800fd2016-03-03 20:57:21 -0800494 echo
Colin Cross88737132017-03-21 17:41:03 -0700495 echo "Invalid lunch combo: $selection"
Greg Kaiser5e2d3392023-10-27 14:15:48 -0600496 echo "Valid combos must be of the form <product>-<release>-<variant>"
Jeff Browne33ba4c2011-07-11 22:11:46 -0700497 return 1
498 fi
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800499
Joe Onorato590ae9f2024-05-24 15:38:58 -0700500 _lunch_meat $product $release $variant
501}
502
503function _lunch_meat()
504{
505 local product=$1
506 local release=$2
507 local variant=$3
508
Colin Cross88737132017-03-21 17:41:03 -0700509 TARGET_PRODUCT=$product \
Jeff Hamiltona02c7472023-05-08 03:13:29 +0000510 TARGET_RELEASE=$release \
Joe Onorato590ae9f2024-05-24 15:38:58 -0700511 TARGET_BUILD_VARIANT=$variant \
Colin Cross88737132017-03-21 17:41:03 -0700512 build_build_var_cache
Matt Alexanderd9c56562020-05-21 10:49:17 +0000513 if [ $? -ne 0 ]
514 then
Anton Hansson32fa7ee2021-06-14 17:09:58 +0100515 if [[ "$product" =~ .*_(eng|user|userdebug) ]]
516 then
517 echo "Did you mean -${product/*_/}? (dash instead of underscore)"
518 fi
Colin Cross88737132017-03-21 17:41:03 -0700519 return 1
520 fi
Joe Onorato0e68f702024-05-24 14:19:21 -0700521 export TARGET_PRODUCT=$(_get_build_var_cached TARGET_PRODUCT)
522 export TARGET_BUILD_VARIANT=$(_get_build_var_cached TARGET_BUILD_VARIANT)
Greg Kaiser5e2d3392023-10-27 14:15:48 -0600523 export TARGET_RELEASE=$release
524 # Note this is the string "release", not the value of the variable.
Jeff Browne33ba4c2011-07-11 22:11:46 -0700525 export TARGET_BUILD_TYPE=release
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700526
Mark White2c807512023-10-25 17:27:07 +0000527 [[ -n "${ANDROID_QUIET_BUILD:-}" ]] || echo
528
529 set_stuff_for_environment
530 [[ -n "${ANDROID_QUIET_BUILD:-}" ]] || printconfig
531
Joe Onorato590ae9f2024-05-24 15:38:58 -0700532 if [[ -z "${ANDROID_QUIET_BUILD}" ]]; then
533 local spam_for_lunch=$(gettop)/build/make/tools/envsetup/spam_for_lunch
534 if [[ -x $spam_for_lunch ]]; then
535 $spam_for_lunch
536 fi
Will Burr40401202022-02-07 12:12:01 +0000537 fi
538
Ying Wang08800fd2016-03-03 20:57:21 -0800539 destroy_build_var_cache
Kousik Kumar41dacd12021-05-11 18:38:38 -0400540
541 if [[ -n "${CHECK_MU_CONFIG:-}" ]]; then
542 check_mu_config
543 fi
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700544}
545
Dan Willemsenaf2e1f82018-04-04 15:41:41 -0700546unset COMMON_LUNCH_CHOICES_CACHE
Jeff Davidson513d7a42010-08-02 10:00:44 -0700547# Tab completion for lunch.
Matt Alexanderd9c56562020-05-21 10:49:17 +0000548function _lunch()
549{
Jeff Davidson513d7a42010-08-02 10:00:44 -0700550 local cur prev opts
551 COMPREPLY=()
552 cur="${COMP_WORDS[COMP_CWORD]}"
553 prev="${COMP_WORDS[COMP_CWORD-1]}"
554
Dan Willemsenaf2e1f82018-04-04 15:41:41 -0700555 if [ -z "$COMMON_LUNCH_CHOICES_CACHE" ]; then
Joe Onorato0e68f702024-05-24 14:19:21 -0700556 COMMON_LUNCH_CHOICES_CACHE=$(TARGET_BUILD_APPS= _get_build_var_cached COMMON_LUNCH_CHOICES)
Dan Willemsenaf2e1f82018-04-04 15:41:41 -0700557 fi
558
559 COMPREPLY=( $(compgen -W "${COMMON_LUNCH_CHOICES_CACHE}" -- ${cur}) )
Jeff Davidson513d7a42010-08-02 10:00:44 -0700560 return 0
561}
Jeff Davidson513d7a42010-08-02 10:00:44 -0700562
Joe Onorato590ae9f2024-05-24 15:38:58 -0700563function _lunch_usage()
564{
565 (
566 echo "The lunch command selects the configuration to use for subsequent"
567 echo "Android builds."
568 echo
569 echo "Usage: lunch TARGET_PRODUCT [TARGET_RELEASE [TARGET_BUILD_VARIANT]]"
570 echo
571 echo " Choose the product, release and variant to use. If not"
572 echo " supplied, TARGET_RELEASE will be 'trunk_staging' and"
573 echo " TARGET_BUILD_VARIANT will be 'eng'"
574 echo
575 echo
576 echo "Usage: lunch TARGET_PRODUCT-TARGET_RELEASE-TARGET_BUILD_VARIANT"
577 echo
578 echo " Chose the product, release and variant to use. This"
579 echo " legacy format is maintained for compatibility."
580 echo
581 echo
582 echo "Note that the previous interactive menu and list of hard-coded"
583 echo "list of curated targets has been removed. If you would like the"
584 echo "list of products, release configs for a particular product, or"
585 echo "variants, run list_products, list_release_configs, list_variants"
586 echo "respectively."
587 echo
588 ) 1>&2
589}
590
591function lunch2()
592{
593 if [[ $# -eq 1 && $1 = "--help" ]]; then
594 _lunch_usage
595 return 0
596 fi
597 if [[ $# -eq 0 ]]; then
598 echo "No target specified. See lunch --help" 1>&2
599 return 1
600 fi
601 if [[ $# -gt 3 ]]; then
602 echo "Too many parameters given. See lunch --help" 1>&2
603 return 1
604 fi
605
606 local product release variant
607
608 # Handle the legacy format
609 local legacy=$(echo $1 | grep "-")
610 if [[ $# -eq 1 && -n $legacy ]]; then
611 IFS="-" read -r product release variant <<< "$1"
612 if [[ -z "$product" ]] || [[ -z "$release" ]] || [[ -z "$variant" ]]; then
613 echo "Invalid lunch combo: $1" 1>&2
614 echo "Valid combos must be of the form <product>-<release>-<variant> when using" 1>&2
615 echo "the legacy format. Run 'lunch --help' for usage." 1>&2
616 return 1
617 fi
618 fi
619
620 # Handle the new format.
621 if [[ -z $legacy ]]; then
622 product=$1
623 release=$2
624 if [[ -z $release ]]; then
625 release=trunk_staging
626 fi
627 variant=$3
628 if [[ -z $variant ]]; then
629 variant=eng
630 fi
631 fi
632
633 # Validate the selection and set all the environment stuff
634 _lunch_meat $product $release $variant
635}
636
637unset ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE
638unset ANDROID_LUNCH_COMPLETION_CHOSEN_PRODUCT
639unset ANDROID_LUNCH_COMPLETION_RELEASE_CACHE
640# Tab completion for lunch.
641function _lunch_completion()
642{
643 # Available products
644 if [[ $COMP_CWORD -eq 1 ]] ; then
645 if [[ -z $ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE ]]; then
646 ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE=$(list_products)
647 fi
648 COMPREPLY=( $(compgen -W "${ANDROID_LUNCH_COMPLETION_PRODUCT_CACHE}" -- "${COMP_WORDS[COMP_CWORD]}") )
649 fi
650
651 # Available release configs
652 if [[ $COMP_CWORD -eq 2 ]] ; then
653 if [[ -z $ANDROID_LUNCH_COMPLETION_RELEASE_CACHE || $ANDROID_LUNCH_COMPLETION_CHOSEN_PRODUCT != ${COMP_WORDS[1]} ]] ; then
654 ANDROID_LUNCH_COMPLETION_RELEASE_CACHE=$(list_releases ${COMP_WORDS[1]})
655 ANDROID_LUNCH_COMPLETION_CHOSEN_PRODUCT=${COMP_WORDS[1]}
656 fi
657 COMPREPLY=( $(compgen -W "${ANDROID_LUNCH_COMPLETION_RELEASE_CACHE}" -- "${COMP_WORDS[COMP_CWORD]}") )
658 fi
659
660 # Available variants
661 if [[ $COMP_CWORD -eq 3 ]] ; then
662 COMPREPLY=(user userdebug eng)
663 fi
664
665 return 0
666}
667
668
Joe Onoratoda12daf2010-06-09 18:18:31 -0700669# Configures the build to build unbundled apps.
Doug Zongker0d8179e2014-04-16 11:34:34 -0700670# Run tapas with one or more app names (from LOCAL_PACKAGE_NAME)
Matt Alexanderd9c56562020-05-21 10:49:17 +0000671function tapas()
672{
Jeff Gaston9fb05d82017-08-21 18:27:00 -0700673 local showHelp="$(echo $* | xargs -n 1 echo | \grep -E '^(help)$' | xargs)"
Elliott Hughesf71c05a2020-03-06 16:46:59 -0800674 local arch="$(echo $* | xargs -n 1 echo | \grep -E '^(arm|x86|arm64|x86_64)$' | xargs)"
Greg Kaiser83ed1592023-10-26 18:37:40 +0000675 # TODO(b/307975293): Expand tapas to take release arguments (and update hmm() usage).
676 local release="trunk_staging"
Doug Zongker0d8179e2014-04-16 11:34:34 -0700677 local variant="$(echo $* | xargs -n 1 echo | \grep -E '^(user|userdebug|eng)$' | xargs)"
Jeff Hamilton5069bd62014-09-04 21:28:00 -0700678 local density="$(echo $* | xargs -n 1 echo | \grep -E '^(ldpi|mdpi|tvdpi|hdpi|xhdpi|xxhdpi|xxxhdpi|alldpi)$' | xargs)"
Colin Cross7f49a672022-01-27 18:15:53 -0800679 local keys="$(echo $* | xargs -n 1 echo | \grep -E '^(devkeys)$' | xargs)"
680 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
Joe Onoratoda12daf2010-06-09 18:18:31 -0700682
Jeff Gaston9fb05d82017-08-21 18:27:00 -0700683 if [ "$showHelp" != "" ]; then
684 $(gettop)/build/make/tapasHelp.sh
685 return
686 fi
687
Ying Wang67f02922012-08-22 10:25:20 -0700688 if [ $(echo $arch | wc -w) -gt 1 ]; then
689 echo "tapas: Error: Multiple build archs supplied: $arch"
690 return
691 fi
Greg Kaiser83ed1592023-10-26 18:37:40 +0000692 if [ $(echo $release | wc -w) -gt 1 ]; then
693 echo "tapas: Error: Multiple build releases supplied: $release"
694 return
695 fi
Joe Onoratoda12daf2010-06-09 18:18:31 -0700696 if [ $(echo $variant | wc -w) -gt 1 ]; then
697 echo "tapas: Error: Multiple build variants supplied: $variant"
698 return
699 fi
Jeff Hamilton5069bd62014-09-04 21:28:00 -0700700 if [ $(echo $density | wc -w) -gt 1 ]; then
701 echo "tapas: Error: Multiple densities supplied: $density"
702 return
703 fi
Colin Cross7f49a672022-01-27 18:15:53 -0800704 if [ $(echo $keys | wc -w) -gt 1 ]; then
705 echo "tapas: Error: Multiple keys supplied: $keys"
706 return
707 fi
Ying Wang67f02922012-08-22 10:25:20 -0700708
Ying Wang0a76df52015-06-08 11:57:26 -0700709 local product=aosp_arm
Ying Wang67f02922012-08-22 10:25:20 -0700710 case $arch in
Matt Alexanderd9c56562020-05-21 10:49:17 +0000711 x86) product=aosp_x86;;
712 arm64) product=aosp_arm64;;
713 x86_64) product=aosp_x86_64;;
Ying Wang67f02922012-08-22 10:25:20 -0700714 esac
Colin Cross7f49a672022-01-27 18:15:53 -0800715 if [ -n "$keys" ]; then
716 product=${product/aosp_/aosp_${keys}_}
717 fi;
718
Joe Onoratoda12daf2010-06-09 18:18:31 -0700719 if [ -z "$variant" ]; then
720 variant=eng
721 fi
Ying Wangc048c9b2010-06-24 15:08:33 -0700722 if [ -z "$apps" ]; then
723 apps=all
724 fi
Justin Morey29d225c2014-11-04 13:35:51 -0600725 if [ -z "$density" ]; then
726 density=alldpi
727 fi
Joe Onoratoda12daf2010-06-09 18:18:31 -0700728
Ying Wang67f02922012-08-22 10:25:20 -0700729 export TARGET_PRODUCT=$product
Greg Kaiser83ed1592023-10-26 18:37:40 +0000730 export TARGET_RELEASE=$release
Joe Onoratoda12daf2010-06-09 18:18:31 -0700731 export TARGET_BUILD_VARIANT=$variant
Jeff Hamilton5069bd62014-09-04 21:28:00 -0700732 export TARGET_BUILD_DENSITY=$density
Joe Onoratoda12daf2010-06-09 18:18:31 -0700733 export TARGET_BUILD_TYPE=release
734 export TARGET_BUILD_APPS=$apps
735
Ying Wang08800fd2016-03-03 20:57:21 -0800736 build_build_var_cache
Joe Onoratoda12daf2010-06-09 18:18:31 -0700737 set_stuff_for_environment
738 printconfig
Ying Wang08800fd2016-03-03 20:57:21 -0800739 destroy_build_var_cache
Joe Onoratoda12daf2010-06-09 18:18:31 -0700740}
741
Martin Stjernholmf692c752021-04-12 00:01:10 +0100742# Configures the build to build unbundled Android modules (APEXes).
743# Run banchan with one or more module names (from apex{} modules).
744function banchan()
745{
746 local showHelp="$(echo $* | xargs -n 1 echo | \grep -E '^(help)$' | xargs)"
Ulya Trafimovich08c381b2023-06-12 15:33:09 +0100747 local product="$(echo $* | xargs -n 1 echo | \grep -E '^(.*_)?(arm|x86|arm64|riscv64|x86_64|arm64only|x86_64only)$' | xargs)"
Greg Kaiserd35095e2023-10-27 16:04:30 -0600748 # TODO: Expand banchan to take release arguments (and update hmm() usage).
749 local release="trunk_staging"
Martin Stjernholmf692c752021-04-12 00:01:10 +0100750 local variant="$(echo $* | xargs -n 1 echo | \grep -E '^(user|userdebug|eng)$' | xargs)"
Ulya Trafimovich08c381b2023-06-12 15:33:09 +0100751 local apps="$(echo $* | xargs -n 1 echo | \grep -E -v '^(user|userdebug|eng|(.*_)?(arm|x86|arm64|riscv64|x86_64))$' | xargs)"
Martin Stjernholmf692c752021-04-12 00:01:10 +0100752
753 if [ "$showHelp" != "" ]; then
754 $(gettop)/build/make/banchanHelp.sh
755 return
756 fi
757
Martin Stjernholm2b8d9232021-04-16 20:45:03 +0100758 if [ -z "$product" ]; then
Anton Hansson0328e322022-05-24 15:47:40 +0000759 product=arm64
Martin Stjernholm2b8d9232021-04-16 20:45:03 +0100760 elif [ $(echo $product | wc -w) -gt 1 ]; then
761 echo "banchan: Error: Multiple build archs or products supplied: $products"
Martin Stjernholmf692c752021-04-12 00:01:10 +0100762 return
763 fi
Greg Kaiserd35095e2023-10-27 16:04:30 -0600764 if [ $(echo $release | wc -w) -gt 1 ]; then
765 echo "banchan: Error: Multiple build releases supplied: $release"
766 return
767 fi
Martin Stjernholmf692c752021-04-12 00:01:10 +0100768 if [ $(echo $variant | wc -w) -gt 1 ]; then
769 echo "banchan: Error: Multiple build variants supplied: $variant"
770 return
771 fi
772 if [ -z "$apps" ]; then
773 echo "banchan: Error: No modules supplied"
774 return
775 fi
776
Martin Stjernholm2b8d9232021-04-16 20:45:03 +0100777 case $product in
778 arm) product=module_arm;;
Martin Stjernholmf692c752021-04-12 00:01:10 +0100779 x86) product=module_x86;;
780 arm64) product=module_arm64;;
Ulya Trafimovich08c381b2023-06-12 15:33:09 +0100781 riscv64) product=module_riscv64;;
Martin Stjernholmf692c752021-04-12 00:01:10 +0100782 x86_64) product=module_x86_64;;
Anton Hansson90ac61c2022-09-06 14:36:00 +0000783 arm64only) product=module_arm64only;;
784 x86_64only) product=module_x86_64only;;
Martin Stjernholmf692c752021-04-12 00:01:10 +0100785 esac
786 if [ -z "$variant" ]; then
787 variant=eng
788 fi
789
790 export TARGET_PRODUCT=$product
Greg Kaiserd35095e2023-10-27 16:04:30 -0600791 export TARGET_RELEASE=$release
Martin Stjernholmf692c752021-04-12 00:01:10 +0100792 export TARGET_BUILD_VARIANT=$variant
793 export TARGET_BUILD_DENSITY=alldpi
794 export TARGET_BUILD_TYPE=release
795
796 # This setup currently uses TARGET_BUILD_APPS just like tapas, but the use
797 # case is different and it may diverge in the future.
798 export TARGET_BUILD_APPS=$apps
799
800 build_build_var_cache
801 set_stuff_for_environment
802 printconfig
803 destroy_build_var_cache
804}
805
Matt Alexanderd9c56562020-05-21 10:49:17 +0000806function croot()
807{
Christopher Ferris55257d22017-03-23 11:08:58 -0700808 local T=$(gettop)
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700809 if [ "$T" ]; then
Marie Janssen32ec50a2016-04-21 16:53:39 -0700810 if [ "$1" ]; then
811 \cd $(gettop)/$1
812 else
813 \cd $(gettop)
814 fi
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700815 else
816 echo "Couldn't locate the top of the tree. Try setting TOP."
817 fi
818}
819
Matt Alexanderd9c56562020-05-21 10:49:17 +0000820function _croot()
821{
Anton Hanssonece9c482019-02-04 18:15:39 +0000822 local T=$(gettop)
823 if [ "$T" ]; then
824 local cur="${COMP_WORDS[COMP_CWORD]}"
825 k=0
826 for c in $(compgen -d ${T}/${cur}); do
827 COMPREPLY[k++]=${c#${T}/}/
828 done
829 fi
830}
831
Matt Alexanderd9c56562020-05-21 10:49:17 +0000832function cproj()
833{
Colin Cross6cdc5d22017-10-20 11:37:33 -0700834 local TOPFILE=build/make/core/envsetup.mk
Joe Onorato2a5d4d82009-07-30 10:23:21 -0700835 local HERE=$PWD
Christopher Ferris55257d22017-03-23 11:08:58 -0700836 local T=
Joe Onorato2a5d4d82009-07-30 10:23:21 -0700837 while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
838 T=$PWD
839 if [ -f "$T/Android.mk" ]; then
Ying Wang9cd17642012-12-13 10:52:07 -0800840 \cd $T
Joe Onorato2a5d4d82009-07-30 10:23:21 -0700841 return
842 fi
Ying Wang9cd17642012-12-13 10:52:07 -0800843 \cd ..
Joe Onorato2a5d4d82009-07-30 10:23:21 -0700844 done
Ying Wang9cd17642012-12-13 10:52:07 -0800845 \cd $HERE
Joe Onorato2a5d4d82009-07-30 10:23:21 -0700846 echo "can't find Android.mk"
847}
848
Elliott Hughes86e99172024-03-21 16:55:08 +0000849# Ensure that we're always using the adb in the tree. This works around the fact
850# that bash caches $PATH lookups, so if you use adb before lunching/building the
851# one in your tree, you'll continue to get /usr/bin/adb or whatever even after
852# you have the one from your current tree on your path. Historically this would
853# cause confusion because glinux had adb in /usr/bin/ by default, though that
854# doesn't appear to be the case on my rodete hosts; it is however still the case
855# that my Mac has /usr/local/bin/adb installed by default and on the default
856# path.
Shaju Mathew21439002023-07-10 00:53:22 +0000857function adb() {
Elliott Hughes57c47b72024-03-22 15:46:59 +0000858 # We need `command which` because zsh has a built-in `which` that's more
859 # like `type`.
860 local ADB=$(command which adb)
Elliott Hughes7e7ff752024-03-20 17:23:40 -0700861 if [ -z "$ADB" ]; then
862 echo "Command adb not found; try lunch (and building) first?"
863 return 1
864 fi
Zhuoyao Zhang60dd9dd2024-04-19 00:07:59 +0000865 run_tool_with_logging "ADB" $ADB "${@}"
Shaju Mathew21439002023-07-10 00:53:22 +0000866}
867
Zhuoyao Zhangcc44d2e2024-03-26 22:50:12 +0000868function run_tool_with_logging() {
869 # Run commands in a subshell for us to handle forced terminations with a trap
870 # handler.
871 (
872 local tool_tag="$1"
873 shift
874 local tool_binary="$1"
875 shift
876
Zhuoyao Zhangef1c03f2024-05-07 22:18:37 +0000877 # If the logger is not configured, run the original command and return.
878 if [[ -z "${ANDROID_TOOL_LOGGER}" ]]; then
Zhuoyao Zhangcc44d2e2024-03-26 22:50:12 +0000879 "${tool_binary}" "${@}"
880 return $?
881 fi
882
883 # Otherwise, run the original command and call the logger when done.
884 local start_time
885 start_time=$(date +%s.%N)
886 local logger=${ANDROID_TOOL_LOGGER}
887
888 # Install a trap to call the logger even when the process terminates abnormally.
889 # The logger is run in the background and its output suppressed to avoid
890 # interference with the user flow.
891 trap '
892 exit_code=$?;
893 # Remove the trap to prevent duplicate log.
894 trap - EXIT;
895 "${logger}" \
Zhuoyao Zhangdfdf19f2024-05-20 18:31:12 +0000896 --tool_tag="${tool_tag}" \
897 --start_timestamp="${start_time}" \
898 --end_timestamp="$(date +%s.%N)" \
899 --tool_args="$*" \
900 --exit_code="${exit_code}" \
Zhuoyao Zhangdb666bc2024-04-30 00:28:34 +0000901 ${ANDROID_TOOL_LOGGER_EXTRA_ARGS} \
Zhuoyao Zhangcc44d2e2024-03-26 22:50:12 +0000902 > /dev/null 2>&1 &
903 exit ${exit_code}
904 ' SIGINT SIGTERM SIGQUIT EXIT
905
906 # Run the original command.
907 "${tool_binary}" "${@}"
908 )
909}
910
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800911# communicate with a running device or emulator, set up necessary state,
912# and run the hat command.
Matt Alexanderd9c56562020-05-21 10:49:17 +0000913function runhat()
914{
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800915 # process standard adb options
916 local adbTarget=""
Matt Alexanderd9c56562020-05-21 10:49:17 +0000917 if [ "$1" = "-d" -o "$1" = "-e" ]; then
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800918 adbTarget=$1
919 shift 1
Matt Alexanderd9c56562020-05-21 10:49:17 +0000920 elif [ "$1" = "-s" ]; then
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800921 adbTarget="$1 $2"
922 shift 2
923 fi
924 local adbOptions=${adbTarget}
Matt Alexanderd9c56562020-05-21 10:49:17 +0000925 #echo adbOptions = ${adbOptions}
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800926
927 # runhat options
928 local targetPid=$1
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700929
Matt Alexanderd9c56562020-05-21 10:49:17 +0000930 if [ "$targetPid" = "" ]; then
Andy McFaddenb6289852010-07-12 08:00:19 -0700931 echo "Usage: runhat [ -d | -e | -s serial ] target-pid"
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700932 return
933 fi
934
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -0800935 # confirm hat is available
936 if [ -z $(which hat) ]; then
937 echo "hat is not available in this configuration."
938 return
939 fi
940
Andy McFaddenb6289852010-07-12 08:00:19 -0700941 # issue "am" command to cause the hprof dump
Nick Kralevich9948b1e2014-07-18 15:45:38 -0700942 local devFile=/data/local/tmp/hprof-$targetPid
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700943 echo "Poking $targetPid and waiting for data..."
Dianne Hackborn6b9549f2012-09-26 15:00:59 -0700944 echo "Storing data at $devFile"
Andy McFaddenb6289852010-07-12 08:00:19 -0700945 adb ${adbOptions} shell am dumpheap $targetPid $devFile
The Android Open Source Project88b60792009-03-03 19:28:42 -0800946 echo "Press enter when logcat shows \"hprof: heap dump completed\""
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700947 echo -n "> "
948 read
949
The Android Open Source Project88b60792009-03-03 19:28:42 -0800950 local localFile=/tmp/$$-hprof
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700951
The Android Open Source Project88b60792009-03-03 19:28:42 -0800952 echo "Retrieving file $devFile..."
953 adb ${adbOptions} pull $devFile $localFile
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700954
The Android Open Source Project88b60792009-03-03 19:28:42 -0800955 adb ${adbOptions} shell rm $devFile
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700956
The Android Open Source Project88b60792009-03-03 19:28:42 -0800957 echo "Running hat on $localFile"
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700958 echo "View the output by pointing your browser at http://localhost:7000/"
959 echo ""
Dianne Hackborn6e4e1bb2011-11-10 15:19:51 -0800960 hat -JXmx512m $localFile
The Android Open Source Projectb6c1cf62008-10-21 07:00:00 -0700961}
962
The Android Open Source Project88b60792009-03-03 19:28:42 -0800963function godir () {
964 if [[ -z "$1" ]]; then
965 echo "Usage: godir <regex>"
966 return
967 fi
Christopher Ferris55257d22017-03-23 11:08:58 -0700968 local T=$(gettop)
969 local FILELIST
Matt Alexanderd9c56562020-05-21 10:49:17 +0000970 if [ ! "$OUT_DIR" = "" ]; then
Brian Carlstromf2257422015-09-30 20:28:54 -0700971 mkdir -p $OUT_DIR
972 FILELIST=$OUT_DIR/filelist
973 else
974 FILELIST=$T/filelist
975 fi
976 if [[ ! -f $FILELIST ]]; then
The Android Open Source Project88b60792009-03-03 19:28:42 -0800977 echo -n "Creating index..."
Brian Carlstromf2257422015-09-30 20:28:54 -0700978 (\cd $T; find . -wholename ./out -prune -o -wholename ./.repo -prune -o -type f > $FILELIST)
The Android Open Source Project88b60792009-03-03 19:28:42 -0800979 echo " Done"
980 echo ""
981 fi
982 local lines
Brian Carlstromf2257422015-09-30 20:28:54 -0700983 lines=($(\grep "$1" $FILELIST | sed -e 's/\/[^/]*$//' | sort | uniq))
Matt Alexanderd9c56562020-05-21 10:49:17 +0000984 if [[ ${#lines[@]} = 0 ]]; then
The Android Open Source Project88b60792009-03-03 19:28:42 -0800985 echo "Not found"
986 return
987 fi
988 local pathname
989 local choice
990 if [[ ${#lines[@]} > 1 ]]; then
991 while [[ -z "$pathname" ]]; do
992 local index=1
993 local line
994 for line in ${lines[@]}; do
995 printf "%6s %s\n" "[$index]" $line
Doug Zongker29034982011-04-22 08:16:56 -0700996 index=$(($index + 1))
The Android Open Source Project88b60792009-03-03 19:28:42 -0800997 done
998 echo
999 echo -n "Select one: "
1000 unset choice
1001 read choice
1002 if [[ $choice -gt ${#lines[@]} || $choice -lt 1 ]]; then
1003 echo "Invalid choice"
1004 continue
1005 fi
Guillaume Chelfice000fd2019-10-03 12:02:46 +02001006 pathname=${lines[@]:$(($choice-1)):1}
The Android Open Source Project88b60792009-03-03 19:28:42 -08001007 done
1008 else
Guillaume Chelfice000fd2019-10-03 12:02:46 +02001009 pathname=${lines[@]:0:1}
The Android Open Source Project88b60792009-03-03 19:28:42 -08001010 fi
Ying Wang9cd17642012-12-13 10:52:07 -08001011 \cd $T/$pathname
The Android Open Source Project88b60792009-03-03 19:28:42 -08001012}
1013
Rett Berg78d1c932019-01-24 14:34:23 -08001014# Go to a specific module in the android tree, as cached in module-info.json. If any build change
1015# is made, and it should be reflected in the output, you should run 'refreshmod' first.
Joe Onorato6b543832024-05-23 12:26:50 -07001016# Note: This function is in envsetup because changing the directory needs to happen in the current
1017# shell. All other functions that use module-info.json should be in build/soong/bin.
Rett Berg78d1c932019-01-24 14:34:23 -08001018function gomod() {
1019 if [[ $# -ne 1 ]]; then
1020 echo "usage: gomod <module>" >&2
1021 return 1
1022 fi
1023
1024 local path="$(pathmod $@)"
1025 if [ -z "$path" ]; then
1026 return 1
1027 fi
1028 cd $path
1029}
1030
dimitry73b84812018-12-11 18:06:00 +01001031function _complete_android_module_names() {
Steven Moreland62054a42018-12-06 10:11:40 -08001032 local word=${COMP_WORDS[COMP_CWORD]}
Cole Faust5d825b72022-10-26 18:16:44 -07001033 COMPREPLY=( $(allmod | grep -E "^$word") )
Steven Moreland62054a42018-12-06 10:11:40 -08001034}
1035
Matt Alexanderd9c56562020-05-21 10:49:17 +00001036function get_make_command()
1037{
Dan Willemsend41ec5a2017-07-12 16:14:50 -07001038 # If we're in the top of an Android tree, use soong_ui.bash instead of make
1039 if [ -f build/soong/soong_ui.bash ]; then
Dan Willemsene9842242017-07-28 13:00:13 -07001040 # Always use the real make if -C is passed in
1041 for arg in "$@"; do
1042 if [[ $arg == -C* ]]; then
1043 echo command make
1044 return
1045 fi
1046 done
Dan Willemsend41ec5a2017-07-12 16:14:50 -07001047 echo build/soong/soong_ui.bash --make-mode
1048 else
1049 echo command make
1050 fi
Ying Wanged21d4c2014-08-24 22:14:19 -07001051}
1052
Matt Alexanderd9c56562020-05-21 10:49:17 +00001053function make()
1054{
Dan Willemsene9842242017-07-28 13:00:13 -07001055 _wrap_build $(get_make_command "$@") "$@"
Dan Willemsend41ec5a2017-07-12 16:14:50 -07001056}
1057
Jim Tanga881a252018-06-19 16:34:41 +08001058# Zsh needs bashcompinit called to support bash-style completion.
Patrik Fimmldf248e62018-10-15 18:15:12 +02001059function enable_zsh_completion() {
1060 # Don't override user's options if bash-style completion is already enabled.
1061 if ! declare -f complete >/dev/null; then
1062 autoload -U compinit && compinit
1063 autoload -U bashcompinit && bashcompinit
1064 fi
Jim Tanga881a252018-06-19 16:34:41 +08001065}
1066
1067function validate_current_shell() {
1068 local current_sh="$(ps -o command -p $$)"
1069 case "$current_sh" in
Raphael Moll70a86b02011-06-20 16:03:14 -07001070 *bash*)
Jim Tanga881a252018-06-19 16:34:41 +08001071 function check_type() { type -t "$1"; }
Raphael Moll70a86b02011-06-20 16:03:14 -07001072 ;;
Jim Tanga881a252018-06-19 16:34:41 +08001073 *zsh*)
1074 function check_type() { type "$1"; }
Matt Alexanderd9c56562020-05-21 10:49:17 +00001075 enable_zsh_completion ;;
Raphael Moll70a86b02011-06-20 16:03:14 -07001076 *)
Jim Tanga881a252018-06-19 16:34:41 +08001077 echo -e "WARNING: Only bash and zsh are supported.\nUse of other shell would lead to erroneous results."
Raphael Moll70a86b02011-06-20 16:03:14 -07001078 ;;
1079 esac
Jim Tanga881a252018-06-19 16:34:41 +08001080}
The Android Open Source Projectdcc08f02008-12-17 18:03:49 -08001081
1082# Execute the contents of any vendorsetup.sh files we can find.
Dan Willemsend855a722019-02-12 15:52:36 -08001083# Unless we find an allowed-vendorsetup_sh-files file, in which case we'll only
1084# load those.
1085#
1086# This allows loading only approved vendorsetup.sh files
Jim Tanga881a252018-06-19 16:34:41 +08001087function source_vendorsetup() {
Jim Tangc4dba1d2019-07-25 16:54:27 +08001088 unset VENDOR_PYTHONPATH
Patrice Arrudaaa4b8242020-10-12 21:29:14 +00001089 local T="$(gettop)"
Dan Willemsend855a722019-02-12 15:52:36 -08001090 allowed=
Patrice Arrudaaa4b8242020-10-12 21:29:14 +00001091 for f in $(cd "$T" && find -L device vendor product -maxdepth 4 -name 'allowed-vendorsetup_sh-files' 2>/dev/null | sort); do
Dan Willemsend855a722019-02-12 15:52:36 -08001092 if [ -n "$allowed" ]; then
1093 echo "More than one 'allowed_vendorsetup_sh-files' file found, not including any vendorsetup.sh files:"
1094 echo " $allowed"
1095 echo " $f"
1096 return
1097 fi
Patrice Arrudaaa4b8242020-10-12 21:29:14 +00001098 allowed="$T/$f"
Dan Willemsend855a722019-02-12 15:52:36 -08001099 done
1100
1101 allowed_files=
1102 [ -n "$allowed" ] && allowed_files=$(cat "$allowed")
Jim Tanga881a252018-06-19 16:34:41 +08001103 for dir in device vendor product; do
Patrice Arrudaaa4b8242020-10-12 21:29:14 +00001104 for f in $(cd "$T" && test -d $dir && \
Jim Tanga881a252018-06-19 16:34:41 +08001105 find -L $dir -maxdepth 4 -name 'vendorsetup.sh' 2>/dev/null | sort); do
Dan Willemsend855a722019-02-12 15:52:36 -08001106
1107 if [[ -z "$allowed" || "$allowed_files" =~ $f ]]; then
Patrice Arrudaaa4b8242020-10-12 21:29:14 +00001108 echo "including $f"; . "$T/$f"
Dan Willemsend855a722019-02-12 15:52:36 -08001109 else
1110 echo "ignoring $f, not in $allowed"
1111 fi
Jim Tanga881a252018-06-19 16:34:41 +08001112 done
1113 done
Kousik Kumarec5416c2023-09-14 17:11:45 +00001114
1115 if [[ "${PWD}" == /google/cog/* ]]; then
1116 f="build/make/cogsetup.sh"
1117 echo "including $f"; . "$T/$f"
1118 fi
Jim Tanga881a252018-06-19 16:34:41 +08001119}
Kenny Root52aa81c2011-07-15 11:07:06 -07001120
Dan Albertbab814f2020-08-26 15:34:53 -07001121function showcommands() {
1122 local T=$(gettop)
1123 if [[ -z "$TARGET_PRODUCT" ]]; then
1124 >&2 echo "TARGET_PRODUCT not set. Run lunch."
1125 return
1126 fi
1127 case $(uname -s) in
1128 Darwin)
1129 PREBUILT_NAME=darwin-x86
1130 ;;
1131 Linux)
1132 PREBUILT_NAME=linux-x86
1133 ;;
1134 *)
1135 >&2 echo Unknown host $(uname -s)
1136 return
1137 ;;
1138 esac
Joe Onorato0e68f702024-05-24 14:19:21 -07001139 OUT_DIR="$(_get_abs_build_var_cached OUT_DIR)"
Dan Albertbab814f2020-08-26 15:34:53 -07001140 if [[ "$1" == "--regenerate" ]]; then
1141 shift 1
1142 NINJA_ARGS="-t commands $@" m
1143 else
1144 (cd $T && prebuilts/build-tools/$PREBUILT_NAME/bin/ninja \
1145 -f $OUT_DIR/combined-${TARGET_PRODUCT}.ninja \
1146 -t commands "$@")
1147 fi
1148}
1149
Joe Onorato1b9ab292024-05-17 12:16:43 -07001150# These functions used to be here but are now standalone scripts
1151# in build/soong/bin. Unset these for the time being so the real
1152# script is picked up.
Joe Onorato23124752024-05-14 15:06:48 -07001153# TODO: Remove this some time after a suitable delay (maybe 2025?)
Joe Onorato6b543832024-05-23 12:26:50 -07001154unset allmod
Joe Onorato23124752024-05-14 15:06:48 -07001155unset aninja
Joe Onorato1b9ab292024-05-17 12:16:43 -07001156unset cgrep
Joe Onorato3acb3082024-05-24 14:14:46 -07001157unset core
1158unset coredump_enable
1159unset coredump_setup
Joe Onorato6b543832024-05-23 12:26:50 -07001160unset dirmods
Joe Onorato0e68f702024-05-24 14:19:21 -07001161unset get_build_var
1162unset get_abs_build_var
Joe Onorato3acb3082024-05-24 14:14:46 -07001163unset getlastscreenshot
1164unset getprebuilt
1165unset getscreenshotpath
1166unset getsdcardpath
1167unset gettargetarch
Joe Onorato1b9ab292024-05-17 12:16:43 -07001168unset ggrep
1169unset gogrep
Joe Onorato3acb3082024-05-24 14:14:46 -07001170unset hmm
Joe Onorato6b543832024-05-23 12:26:50 -07001171unset installmod
Joe Onorato3acb3082024-05-24 14:14:46 -07001172unset is64bit
1173unset isviewserverstarted
Joe Onorato1b9ab292024-05-17 12:16:43 -07001174unset jgrep
1175unset jsongrep
Joe Onorato3acb3082024-05-24 14:14:46 -07001176unset key_back
1177unset key_home
1178unset key_menu
Joe Onorato1b9ab292024-05-17 12:16:43 -07001179unset ktgrep
Joe Onorato6b543832024-05-23 12:26:50 -07001180unset m
Joe Onorato1b9ab292024-05-17 12:16:43 -07001181unset mangrep
1182unset mgrep
Joe Onorato6b543832024-05-23 12:26:50 -07001183unset mm
1184unset mma
1185unset mmm
1186unset mmma
1187unset outmod
1188unset overrideflags
Joe Onorato1b9ab292024-05-17 12:16:43 -07001189unset owngrep
Joe Onorato6b543832024-05-23 12:26:50 -07001190unset pathmod
Joe Onoratoff277c52024-05-23 12:52:07 -07001191unset pez
Joe Onorato1b9ab292024-05-17 12:16:43 -07001192unset pygrep
Joe Onorato6b543832024-05-23 12:26:50 -07001193unset qpid
Joe Onorato1b9ab292024-05-17 12:16:43 -07001194unset rcgrep
Joe Onorato6b543832024-05-23 12:26:50 -07001195unset refreshmod
Joe Onorato1b9ab292024-05-17 12:16:43 -07001196unset resgrep
1197unset rsgrep
1198unset sepgrep
1199unset sgrep
Joe Onorato3acb3082024-05-24 14:14:46 -07001200unset startviewserver
1201unset stopviewserver
1202unset systemstack
Joe Onorato6b543832024-05-23 12:26:50 -07001203unset syswrite
Joe Onorato1b9ab292024-05-17 12:16:43 -07001204unset tomlgrep
1205unset treegrep
Cole Faust45844ab2022-08-30 13:59:07 -07001206
Colin Cross71319722023-10-24 10:58:46 -07001207
Jim Tanga881a252018-06-19 16:34:41 +08001208validate_current_shell
Joe Onorato7c3a77f2022-12-05 13:05:14 -08001209set_global_paths
Jim Tanga881a252018-06-19 16:34:41 +08001210source_vendorsetup
Kenny Root52aa81c2011-07-15 11:07:06 -07001211addcompletions
Joe Onorato7c3a77f2022-12-05 13:05:14 -08001212
Joe Onorato23124752024-05-14 15:06:48 -07001213