diff options
author | Ying Wang <wangying@google.com> | 2016-03-03 20:57:21 -0800 |
---|---|---|
committer | Ying Wang <wangying@google.com> | 2016-03-04 11:01:57 -0800 |
commit | 08800fd905e70faf01d9392d00ff3f49d99097b7 (patch) | |
tree | c3660b73589784889be77327f4a0e6dfdefc86cf /envsetup.sh | |
parent | 58b8c86f84ad0bf8fb3bb7dfc259fd1e3ce0dae1 (diff) | |
download | platform_build-08800fd905e70faf01d9392d00ff3f49d99097b7.tar.gz platform_build-08800fd905e70faf01d9392d00ff3f49d99097b7.tar.bz2 platform_build-08800fd905e70faf01d9392d00ff3f49d99097b7.zip |
Speed up lunch/tapas/etc. shell utility functions.
1. Combined ~10 calls to the make build system to only one.
We added a phony target "dump-many-vars" to the build system to dump
"<var>=<value>" pairs. We then store the pairs as shell variables.
With this cache get_build_var/get_abs_build_var can just return
the shell variables instead of querying the build system.
2. Prune .git when we search for AndroidProduct.mks.
In internal source tree lunch time was reduced from ~15s to ~1.5s.
Bug: 27429759
Change-Id: I24e88598f6fab598ef26518885fd5e86e71a772d
Diffstat (limited to 'envsetup.sh')
-rw-r--r-- | envsetup.sh | 189 |
1 files changed, 130 insertions, 59 deletions
diff --git a/envsetup.sh b/envsetup.sh index 9489d21e0a..2aac383b54 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -37,9 +37,62 @@ EOF echo $A } +# Get all the build variables needed by this script in a single call to the build system. +function build_build_var_cache() +{ + T=$(gettop) + # Grep out the variable names from the script. + cached_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '` + cached_abs_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '` + # Call the build system to dump the "<val>=<value>" pairs as a shell script. + build_dicts_script=`\cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ + command make --no-print-directory -f build/core/config.mk \ + dump-many-vars \ + DUMP_MANY_VARS="$cached_vars" \ + DUMP_MANY_ABS_VARS="$cached_abs_vars" \ + DUMP_VAR_PREFIX="var_cache_" \ + DUMP_ABS_VAR_PREFIX="abs_var_cache_"` + local ret=$? + if [ $ret -ne 0 ] + then + unset build_dicts_script + return $ret + fi + # Excute the script to store the "<val>=<value>" pairs as shell variables. + eval "$build_dicts_script" + unset build_dicts_script + ret=$? + if [ $ret -ne 0 ] + then + return $ret + fi + BUILD_VAR_CACHE_READY="true" +} + +# Delete the build cache, so that we can still call into the build system +# to get build variables not listed in this script. +function destroy_build_var_cache() +{ + unset BUILD_VAR_CACHE_READY + for v in $cached_vars; do + unset var_cache_$v + done + unset cached_vars + for v in $cached_abs_vars; do + unset abs_var_cache_$v + done + unset cached_abs_vars +} + # Get the value of a build variable as an absolute path. function get_abs_build_var() { + if [ "$BUILD_VAR_CACHE_READY" = "true" ] + then + eval echo \"\${abs_var_cache_$1}\" + return + fi + T=$(gettop) if [ ! "$T" ]; then echo "Couldn't locate the top of the tree. Try setting TOP." >&2 @@ -52,6 +105,12 @@ function get_abs_build_var() # Get the exact value of a build variable. function get_build_var() { + if [ "$BUILD_VAR_CACHE_READY" = "true" ] + then + eval echo \"\${var_cache_$1}\" + return + fi + T=$(gettop) if [ ! "$T" ]; then echo "Couldn't locate the top of the tree. Try setting TOP." >&2 @@ -321,7 +380,9 @@ function choosetype() fi done + build_build_var_cache set_stuff_for_environment + destroy_build_var_cache } # @@ -338,6 +399,7 @@ function chooseproduct() default_value=aosp_arm fi + export TARGET_BUILD_APPS= export TARGET_PRODUCT= local ANSWER while [ -z "$TARGET_PRODUCT" ] @@ -365,7 +427,9 @@ function chooseproduct() fi done + build_build_var_cache set_stuff_for_environment + destroy_build_var_cache } function choosevariant() @@ -428,8 +492,10 @@ function choosecombo() choosevariant $3 echo + build_build_var_cache set_stuff_for_environment printconfig + destroy_build_var_cache } # Clear this variable. It will be built up again when the vendorsetup.sh @@ -511,16 +577,6 @@ function lunch() export TARGET_BUILD_APPS= - local product=$(echo -n $selection | sed -e "s/-.*$//") - check_product $product - if [ $? -ne 0 ] - then - echo - echo "** Don't have a product spec for: '$product'" - echo "** Do you have the right repo manifest?" - product= - fi - local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//") check_variant $variant if [ $? -ne 0 ] @@ -531,6 +587,18 @@ function lunch() variant= fi + local product=$(echo -n $selection | sed -e "s/-.*$//") + TARGET_PRODUCT=$product \ + TARGET_BUILD_VARIANT=$variant \ + build_build_var_cache + if [ $? -ne 0 ] + then + echo + echo "** Don't have a product spec for: '$product'" + echo "** Do you have the right repo manifest?" + product= + fi + if [ -z "$product" -o -z "$variant" ] then echo @@ -545,6 +613,7 @@ function lunch() set_stuff_for_environment printconfig + destroy_build_var_cache } # Tab completion for lunch. @@ -607,8 +676,10 @@ function tapas() export TARGET_BUILD_TYPE=release export TARGET_BUILD_APPS=$apps + build_build_var_cache set_stuff_for_environment printconfig + destroy_build_var_cache } function gettop @@ -878,18 +949,18 @@ function qpid() { append='$' shift elif [ "$1" = "--help" -o "$1" = "-h" ]; then - echo "usage: qpid [[--exact] <process name|pid>" - return 255 - fi + echo "usage: qpid [[--exact] <process name|pid>" + return 255 + fi local EXE="$1" if [ "$EXE" ] ; then - qpid | \grep "$prepend$EXE$append" - else - adb shell ps \ - | tr -d '\r' \ - | sed -e 1d -e 's/^[^ ]* *\([0-9]*\).* \([^ ]*\)$/\1 \2/' - fi + qpid | \grep "$prepend$EXE$append" + else + adb shell ps \ + | tr -d '\r' \ + | sed -e 1d -e 's/^[^ ]* *\([0-9]*\).* \([^ ]*\)$/\1 \2/' + fi } function pid() @@ -910,7 +981,7 @@ function pid() echo "$PID" else echo "usage: pid [--exact] <process name>" - return 255 + return 255 fi } @@ -923,25 +994,25 @@ function pid() function coredump_setup() { - echo "Getting root..."; - adb root; - adb wait-for-device; + echo "Getting root..."; + adb root; + adb wait-for-device; - echo "Remounting root partition read-write..."; - adb shell mount -w -o remount -t rootfs rootfs; - sleep 1; - adb wait-for-device; - adb shell mkdir -p /cores; - adb shell mount -t tmpfs tmpfs /cores; - adb shell chmod 0777 /cores; + echo "Remounting root partition read-write..."; + adb shell mount -w -o remount -t rootfs rootfs; + sleep 1; + adb wait-for-device; + adb shell mkdir -p /cores; + adb shell mount -t tmpfs tmpfs /cores; + adb shell chmod 0777 /cores; - echo "Granting SELinux permission to dump in /cores..."; - adb shell restorecon -R /cores; + echo "Granting SELinux permission to dump in /cores..."; + adb shell restorecon -R /cores; - echo "Set core pattern."; - adb shell 'echo /cores/core.%p > /proc/sys/kernel/core_pattern'; + echo "Set core pattern."; + adb shell 'echo /cores/core.%p > /proc/sys/kernel/core_pattern'; - echo "Done." + echo "Done." } # coredump_enable - enable core dumps for the specified process @@ -952,13 +1023,13 @@ function coredump_setup() function coredump_enable() { - local PID=$1; - if [ -z "$PID" ]; then - printf "Expecting a PID!\n"; - return; - fi; - echo "Setting core limit for $PID to infinite..."; - adb shell prlimit $PID 4 -1 -1 + local PID=$1; + if [ -z "$PID" ]; then + printf "Expecting a PID!\n"; + return; + fi; + echo "Setting core limit for $PID to infinite..."; + adb shell prlimit $PID 4 -1 -1 } # core - send SIGV and pull the core for process @@ -969,28 +1040,28 @@ function coredump_enable() function core() { - local PID=$1; + local PID=$1; - if [ -z "$PID" ]; then - printf "Expecting a PID!\n"; - return; - fi; + if [ -z "$PID" ]; then + printf "Expecting a PID!\n"; + return; + fi; - local CORENAME=core.$PID; - local COREPATH=/cores/$CORENAME; - local SIG=SEGV; + local CORENAME=core.$PID; + local COREPATH=/cores/$CORENAME; + local SIG=SEGV; - coredump_enable $1; + coredump_enable $1; - local done=0; - while [ $(adb shell "[ -d /proc/$PID ] && echo -n yes") ]; do - printf "\tSending SIG%s to %d...\n" $SIG $PID; - adb shell kill -$SIG $PID; - sleep 1; - done; + local done=0; + while [ $(adb shell "[ -d /proc/$PID ] && echo -n yes") ]; do + printf "\tSending SIG%s to %d...\n" $SIG $PID; + adb shell kill -$SIG $PID; + sleep 1; + done; - adb shell "while [ ! -f $COREPATH ] ; do echo waiting for $COREPATH to be generated; sleep 1; done" - echo "Done: core is under $COREPATH on device."; + adb shell "while [ ! -f $COREPATH ] ; do echo waiting for $COREPATH to be generated; sleep 1; done" + echo "Done: core is under $COREPATH on device."; } # systemstack - dump the current stack trace of all threads in the system process |