summaryrefslogtreecommitdiffstats
path: root/envsetup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'envsetup.sh')
-rw-r--r--envsetup.sh324
1 files changed, 39 insertions, 285 deletions
diff --git a/envsetup.sh b/envsetup.sh
index d80e95c..bec6993 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -14,9 +14,16 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y
- ggrep: Greps on all local Gradle files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
+- mangrep: Greps on all local AndroidManifest.xml files.
+- sepgrep: Greps on all local sepolicy files.
- sgrep: Greps on all local source files.
- godir: Go to the directory containing a file.
+Environemnt options:
+- SANITIZE_HOST: Set to 'true' to use ASAN for all host modules. Note that
+ ASAN_OPTIONS=detect_leaks=0 will be set by default until the
+ build is leak-check clean.
+
Look at the source to view more functions. The complete list is:
EOF
T=$(gettop)
@@ -231,6 +238,7 @@ function set_stuff_for_environment()
export ANDROID_BUILD_TOP=$(gettop)
# With this environment variable new GCC can apply colors to warnings/errors
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+ export ASAN_OPTIONS=detect_leaks=0
}
function set_sequence_number()
@@ -664,6 +672,7 @@ function m()
$DRV make -C $T -f build/core/main.mk $@
else
echo "Couldn't locate the top of the tree. Try setting TOP."
+ return 1
fi
}
@@ -702,8 +711,10 @@ function mm()
local M=`echo $M|sed 's:'$T'/::'`
if [ ! "$T" ]; then
echo "Couldn't locate the top of the tree. Try setting TOP."
+ return 1
elif [ ! "$M" ]; then
echo "Couldn't locate a makefile from the current directory."
+ return 1
else
for ARG in $@; do
case $ARG in
@@ -766,6 +777,7 @@ function mmm()
ONE_SHOT_MAKEFILE="$MAKEFILE" $DRV make -C $T -f build/core/main.mk $DASH_ARGS $MODULES $ARGS
else
echo "Couldn't locate the top of the tree. Try setting TOP."
+ return 1
fi
}
@@ -778,6 +790,7 @@ function mma()
else
if [ ! "$T" ]; then
echo "Couldn't locate the top of the tree. Try setting TOP."
+ return 1
fi
local MY_PWD=`PWD= /bin/pwd|sed 's:'$T'/::'`
$DRV make -C $T -f build/core/main.mk $@ all_modules BUILD_MODULES_IN_PATHS="$MY_PWD"
@@ -817,6 +830,7 @@ function mmma()
$DRV make -C $T -f build/core/main.mk $DASH_ARGS $ARGS all_modules BUILD_MODULES_IN_PATHS="$MODULE_PATHS"
else
echo "Couldn't locate the top of the tree. Try setting TOP."
+ return 1
fi
}
@@ -1027,18 +1041,6 @@ function stacks()
fi
}
-function gdbwrapper()
-{
- local GDB_CMD="$1"
- shift 1
- $GDB_CMD -x "$@"
-}
-
-function get_symbols_directory()
-{
- echo $(get_abs_build_var TARGET_OUT_UNSTRIPPED)
-}
-
# Read the ELF header from /proc/$PID/exe to determine if the process is
# 64-bit.
function is64bit()
@@ -1055,251 +1057,6 @@ function is64bit()
fi
}
-function adb_get_product_device() {
- echo `adb shell getprop ro.product.device | sed s/.$//`
-}
-
-# returns 0 when process is not traced
-function adb_get_traced_by() {
- echo `adb shell cat /proc/$1/status | grep -e "^TracerPid:" | sed "s/^TracerPid:\t//" | sed s/.$//`
-}
-
-function gdbclient() {
- # TODO:
- # 1. Check for ANDROID_SERIAL/multiple devices
- local PROCESS_NAME="n/a"
- local PID=$1
- local PORT=5039
- if [ -z "$PID" ]; then
- echo "Usage: gdbclient <pid|processname> [port number]"
- return -1
- fi
- local DEVICE=$(adb_get_product_device)
-
- if [ -z "$DEVICE" ]; then
- echo "Error: Unable to get device name. Please check if device is connected and ANDROID_SERIAL is set."
- return -2
- fi
-
- if [ -n "$2" ]; then
- PORT=$2
- fi
-
- local ROOT=$(gettop)
- if [ -z "$ROOT" ]; then
- # This is for the situation with downloaded symbols (from the build server)
- # we check if they are available.
- ROOT=`realpath .`
- fi
-
- local OUT_ROOT="$ROOT/out/target/product/$DEVICE"
- local SYMBOLS_DIR="$OUT_ROOT/symbols"
-
- if [ ! -d $SYMBOLS_DIR ]; then
- echo "Error: couldn't find symbols: $SYMBOLS_DIR does not exist or is not a directory."
- return -3
- fi
-
- # let's figure out which executable we are about to debug
-
- # check if user specified a name -> resolve to pid
- if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then
- PROCESS_NAME=$PID
- PID=$(pid --exact $PROCESS_NAME)
- if [ -z "$PID" ]; then
- echo "Error: couldn't resolve pid by process name: $PROCESS_NAME"
- return -4
- fi
- fi
-
- local EXE=`adb shell readlink /proc/$PID/exe | sed s/.$//`
- # TODO: print error in case there is no such pid
- local LOCAL_EXE_PATH=$SYMBOLS_DIR$EXE
-
- if [ ! -f $LOCAL_EXE_PATH ]; then
- echo "Error: unable to find symbols for executable $EXE: file $LOCAL_EXE_PATH does not exist"
- return -5
- fi
-
- local USE64BIT=""
-
- if [[ "$(file $LOCAL_EXE_PATH)" =~ 64-bit ]]; then
- USE64BIT="64"
- fi
-
- local GDB=
- local GDB64=
- local CPU_ABI=`adb shell getprop ro.product.cpu.abilist | sed s/.$//`
- # TODO: we assume these are available via $PATH
- if [[ $CPU_ABI =~ (^|,)arm64 ]]; then
- GDB=arm-linux-androideabi-gdb
- GDB64=aarch64-linux-android-gdb
- elif [[ $CPU_ABI =~ (^|,)arm ]]; then
- GDB=arm-linux-androideabi-gdb
- elif [[ $CPU_ABI =~ (^|,)x86_64 ]]; then
- GDB=x86_64-linux-androideabi-gdb
- elif [[ $CPU_ABI =~ (^|,)x86 ]]; then
- GDB=x86_64-linux-androideabi-gdb
- elif [[ $CPU_ABI =~ (^|,)mips64 ]]; then
- GDB=mipsel-linux-android-gdb
- GDB64=mips64el-linux-android-gdb
- elif [[ $CPU_ABI =~ (^|,)mips ]]; then
- GDB=mipsel-linux-android-gdb
- else
- echo "Error: unrecognized cpu.abilist: $CPU_ABI"
- return -6
- fi
-
- # TODO: check if tracing process is gdbserver and not some random strace...
- if [ $(adb_get_traced_by $PID) -eq 0 ]; then
- # start gdbserver
- echo "Starting gdbserver..."
- # TODO: check if adb is already listening $PORT
- # to avoid unnecessary calls
- echo ". adb forward for port=$PORT..."
- adb forward tcp:$PORT tcp:$PORT
- echo ". starting gdbserver to attach to pid=$PID..."
- adb shell gdbserver$USE64BIT :$PORT --attach $PID &
- echo ". give it couple of seconds to start..."
- sleep 2
- echo ". done"
- else
- echo "It looks like gdbserver is already attached to $PID (process is traced), trying to connect to it using local port=$PORT"
- fi
-
- local OUT_SO_SYMBOLS=$SYMBOLS_DIR/system/lib$USE64BIT
- local OUT_VENDOR_SO_SYMBOLS=$SYMBOLS_DIR/vendor/lib$USE64BIT
- local ART_CMD=""
-
- echo >|"$OUT_ROOT/gdbclient.cmds" "set solib-absolute-prefix $SYMBOLS_DIR"
- echo >>"$OUT_ROOT/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines:$OUT_SO_SYMBOLS/drm:$OUT_SO_SYMBOLS/egl:$OUT_SO_SYMBOLS/soundfx:$OUT_VENDOR_SO_SYMBOLS:$OUT_VENDOR_SO_SYMBOLS/hw:$OUT_VENDOR_SO_SYMBOLS/egl"
- local DALVIK_GDB_SCRIPT=$ROOT/development/scripts/gdb/dalvik.gdb
- if [ -f $DALVIK_GDB_SCRIPT ]; then
- echo >>"$OUT_ROOT/gdbclient.cmds" "source $DALVIK_GDB_SCRIPT"
- ART_CMD="art-on"
- else
- echo "Warning: couldn't find $DALVIK_GDB_SCRIPT - ART debugging options will not be available"
- fi
- echo >>"$OUT_ROOT/gdbclient.cmds" "target remote :$PORT"
- if [[ $EXE =~ (^|/)(app_process|dalvikvm)(|32|64)$ ]]; then
- echo >> "$OUT_ROOT/gdbclient.cmds" $ART_CMD
- fi
-
- echo >>"$OUT_ROOT/gdbclient.cmds" ""
-
- local WHICH_GDB=$GDB
-
- if [ -n "$USE64BIT" -a -n "$GDB64" ]; then
- WHICH_GDB=$GDB64
- fi
-
- gdbwrapper $WHICH_GDB "$OUT_ROOT/gdbclient.cmds" "$LOCAL_EXE_PATH"
-}
-
-# gdbclient now determines whether the user wants to debug a 32-bit or 64-bit
-# executable, set up the approriate gdbserver, then invokes the proper host
-# gdb.
-function gdbclient_old()
-{
- local OUT_ROOT=$(get_abs_build_var PRODUCT_OUT)
- local OUT_SYMBOLS=$(get_abs_build_var TARGET_OUT_UNSTRIPPED)
- local OUT_SO_SYMBOLS=$(get_abs_build_var TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED)
- local OUT_VENDOR_SO_SYMBOLS=$(get_abs_build_var TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED)
- local OUT_EXE_SYMBOLS=$(get_symbols_directory)
- local PREBUILTS=$(get_abs_build_var ANDROID_PREBUILTS)
- local ARCH=$(get_build_var TARGET_ARCH)
- local GDB
- case "$ARCH" in
- arm) GDB=arm-linux-androideabi-gdb;;
- arm64) GDB=arm-linux-androideabi-gdb; GDB64=aarch64-linux-android-gdb;;
- mips|mips64) GDB=mips64el-linux-android-gdb;;
- x86) GDB=x86_64-linux-android-gdb;;
- x86_64) GDB=x86_64-linux-android-gdb;;
- *) echo "Unknown arch $ARCH"; return 1;;
- esac
-
- if [ "$OUT_ROOT" -a "$PREBUILTS" ]; then
- local EXE="$1"
- if [ "$EXE" ] ; then
- EXE=$1
- if [[ $EXE =~ ^[^/].* ]] ; then
- EXE="system/bin/"$EXE
- fi
- else
- EXE="app_process"
- fi
-
- local PORT="$2"
- if [ "$PORT" ] ; then
- PORT=$2
- else
- PORT=":5039"
- fi
-
- local PID="$3"
- if [ "$PID" ] ; then
- if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then
- PID=`pid $3`
- if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then
- # that likely didn't work because of returning multiple processes
- # try again, filtering by root processes (don't contain colon)
- PID=`adb shell ps | \grep $3 | \grep -v ":" | awk '{print $2}'`
- if [[ ! "$PID" =~ ^[0-9]+$ ]]
- then
- echo "Couldn't resolve '$3' to single PID"
- return 1
- else
- echo ""
- echo "WARNING: multiple processes matching '$3' observed, using root process"
- echo ""
- fi
- fi
- fi
- adb forward "tcp$PORT" "tcp$PORT"
- local USE64BIT="$(is64bit $PID)"
- adb shell gdbserver$USE64BIT $PORT --attach $PID &
- sleep 2
- else
- echo ""
- echo "If you haven't done so already, do this first on the device:"
- echo " gdbserver $PORT /system/bin/$EXE"
- echo " or"
- echo " gdbserver $PORT --attach <PID>"
- echo ""
- fi
-
- OUT_SO_SYMBOLS=$OUT_SO_SYMBOLS$USE64BIT
- OUT_VENDOR_SO_SYMBOLS=$OUT_VENDOR_SO_SYMBOLS$USE64BIT
-
- echo >|"$OUT_ROOT/gdbclient.cmds" "set solib-absolute-prefix $OUT_SYMBOLS"
- echo >>"$OUT_ROOT/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines:$OUT_SO_SYMBOLS/drm:$OUT_SO_SYMBOLS/egl:$OUT_SO_SYMBOLS/soundfx:$OUT_VENDOR_SO_SYMBOLS:$OUT_VENDOR_SO_SYMBOLS/hw:$OUT_VENDOR_SO_SYMBOLS/egl"
- echo >>"$OUT_ROOT/gdbclient.cmds" "source $ANDROID_BUILD_TOP/development/scripts/gdb/dalvik.gdb"
- echo >>"$OUT_ROOT/gdbclient.cmds" "target remote $PORT"
- # Enable special debugging for ART processes.
- if [[ $EXE =~ (^|/)(app_process|dalvikvm)(|32|64)$ ]]; then
- echo >> "$OUT_ROOT/gdbclient.cmds" "art-on"
- fi
- echo >>"$OUT_ROOT/gdbclient.cmds" ""
-
- local WHICH_GDB=
- # 64-bit exe found
- if [ "$USE64BIT" != "" ] ; then
- WHICH_GDB=$ANDROID_TOOLCHAIN/$GDB64
- # 32-bit exe / 32-bit platform
- elif [ "$(get_build_var TARGET_2ND_ARCH)" = "" ]; then
- WHICH_GDB=$ANDROID_TOOLCHAIN/$GDB
- # 32-bit exe / 64-bit platform
- else
- WHICH_GDB=$ANDROID_TOOLCHAIN_2ND_ARCH/$GDB
- fi
-
- gdbwrapper $WHICH_GDB "$OUT_ROOT/gdbclient.cmds" "$OUT_EXE_SYMBOLS/$EXE"
- else
- echo "Unable to determine build system output dir."
- fi
-
-}
-
case `uname -s` in
Darwin)
function sgrep()
@@ -1333,7 +1090,7 @@ function jgrep()
function cgrep()
{
- find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' -o -name '*.h' \) -print0 | xargs -0 grep --color -n "$@"
+ find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f \( -name '*.c' -o -name '*.cc' -o -name '*.cpp' -o -name '*.h' -o -name '*.hpp' \) -print0 | xargs -0 grep --color -n "$@"
}
function resgrep()
@@ -1631,7 +1388,7 @@ function godir () {
\cd $T/$pathname
}
-# Force JAVA_HOME to point to java 1.7 or java 1.6 if it isn't already set.
+# Force JAVA_HOME to point to java 1.7 if it isn't already set.
#
# Note that the MacOS path for java 1.7 includes a minor revision number (sigh).
# For some reason, installing the JDK doesn't make it show up in the
@@ -1648,25 +1405,14 @@ function set_java_home() {
fi
if [ ! "$JAVA_HOME" ]; then
- if [ -n "$LEGACY_USE_JAVA6" ]; then
- case `uname -s` in
- Darwin)
- export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
- ;;
- *)
- export JAVA_HOME=/usr/lib/jvm/java-6-sun
- ;;
- esac
- else
- case `uname -s` in
- Darwin)
- export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
- ;;
- *)
- export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
- ;;
- esac
- fi
+ case `uname -s` in
+ Darwin)
+ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
+ ;;
+ *)
+ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
+ ;;
+ esac
# Keep track of the fact that we set JAVA_HOME ourselves, so that
# we can change it on the next envsetup.sh, if required.
@@ -1702,11 +1448,21 @@ function make()
local hours=$(($tdiff / 3600 ))
local mins=$((($tdiff % 3600) / 60))
local secs=$(($tdiff % 60))
+ local ncolors=$(tput colors 2>/dev/null)
+ if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then
+ color_failed="\e[0;31m"
+ color_success="\e[0;32m"
+ color_reset="\e[00m"
+ else
+ color_failed=""
+ color_success=""
+ color_reset=""
+ fi
echo
if [ $ret -eq 0 ] ; then
- echo -n -e "#### make completed successfully "
+ echo -n -e "${color_success}#### make completed successfully "
else
- echo -n -e "#### make failed to build some targets "
+ echo -n -e "${color_failed}#### make failed to build some targets "
fi
if [ $hours -gt 0 ] ; then
printf "(%02g:%02g:%02g (hh:mm:ss))" $hours $mins $secs
@@ -1715,13 +1471,11 @@ function make()
elif [ $secs -gt 0 ] ; then
printf "(%s seconds)" $secs
fi
- echo -e " ####"
+ echo -e " ####${color_reset}"
echo
return $ret
}
-
-
if [ "x$SHELL" != "x/bin/bash" ]; then
case `ps -o command -p $$` in
*bash*)
@@ -1733,8 +1487,8 @@ if [ "x$SHELL" != "x/bin/bash" ]; then
fi
# Execute the contents of any vendorsetup.sh files we can find.
-for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null` \
- `test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null`
+for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
+ `test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort`
do
echo "including $f"
. $f