aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool/android/setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'binary_search_tool/android/setup.sh')
-rwxr-xr-xbinary_search_tool/android/setup.sh147
1 files changed, 147 insertions, 0 deletions
diff --git a/binary_search_tool/android/setup.sh b/binary_search_tool/android/setup.sh
new file mode 100755
index 00000000..7f8ba0e9
--- /dev/null
+++ b/binary_search_tool/android/setup.sh
@@ -0,0 +1,147 @@
+#!/bin/bash -u
+#
+# Copyright 2016 Google Inc. All Rights Reserved.
+#
+# This script is part of the Android binary search triage process.
+# It should be the first script called by the user, after the user has set up
+# the two necessary build tree directories (see the prerequisites section of
+# README.android).
+#
+# WARNING:
+# Before running this script make sure you have setup the Android build
+# environment in this shell (i.e. successfully run 'lunch').
+#
+# This script takes three arguments. The first argument must be the path of
+# the android source tree being tested. The second (optional) argument is the
+# device ID for fastboot/adb so the test device can be uniquely indentified in
+# case multiple phones are plugged in. The final (optional) argument is the
+# number of jobs that various programs can use for parallelism
+# (make, xargs, etc.). There is also the argument for bisection directory, but
+# this is not strictly an argument for just this script (as it should be set
+# during the POPULATE_GOOD and POPULATE_BAD steps, see README.android for
+# details).
+#
+# Example call:
+# ANDROID_SERIAL=002ee16b1558a3d3 NUM_JOBS=10 android/setup.sh ~/android
+#
+# This will setup the bisector for Nexus5X, using 10 jobs, where the android
+# source lives at ~/android.
+#
+# NOTE: ANDROID_SERIAL is actually an option used by ADB. You can also simply
+# do 'export ANDROID_SERIAL=<device_id>' and the bisector will still work.
+# Furthermore, if your device is the only Android device plugged in you can
+# ignore ANDROID_SERIAL.
+#
+# This script sets all necessary environment variables, and ensures the
+# environment for the binary search triage process is setup properly. In
+# addition, this script generates common.sh, which generates enviroment
+# variables used by the other scripts in the package binary search triage process.
+#
+
+#
+# Positional arguments
+#
+
+ANDROID_SRC=$1
+
+#
+# Optional arguments
+#
+
+# If DEVICE_ID is not null export this as ANDROID_SERIAL for use by adb
+# If DEVICE_ID is null then leave null
+DEVICE_ID=${ANDROID_SERIAL:+"export ANDROID_SERIAL=${ANDROID_SERIAL} "}
+
+NUM_JOBS=${NUM_JOBS:-"1"}
+BISECT_ANDROID_DIR=${BISECT_DIR:-~/ANDROID_BISECT}
+
+#
+# Set up basic variables.
+#
+
+GOOD_BUILD=${BISECT_ANDROID_DIR}/good
+BAD_BUILD=${BISECT_ANDROID_DIR}/bad
+WORK_BUILD=${ANDROID_SRC}
+
+#
+# Verify that the necessary directories exist.
+#
+
+if [[ ! -d ${GOOD_BUILD} ]] ; then
+ echo "Error: ${GOOD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${BAD_BUILD} ]] ; then
+ echo "Error: ${BAD_BUILD} does not exist."
+ exit 1
+fi
+
+if [[ ! -d ${WORK_BUILD} ]] ; then
+ echo "Error: ${WORK_BUILD} does not exist."
+ exit 1
+fi
+
+#
+# Verify that good/bad object lists are the same
+#
+
+good_list=`mktemp`
+bad_list=`mktemp`
+sort ${GOOD_BUILD}/_LIST > good_list
+sort ${BAD_BUILD}/_LIST > bad_list
+
+diff good_list bad_list
+diff_result=$?
+rm good_list bad_list
+
+if [ ${diff_result} -ne 0 ]; then
+ echo "Error: good and bad object lists differ."
+ echo "diff exited with non-zero status: ${diff_result}"
+ exit 1
+fi
+
+#
+# Ensure android build environment is setup
+#
+# ANDROID_PRODUCT_OUT is only set once lunch is successfully executed. Fail if
+# ANDROID_PRODUCT_OUT is unset.
+#
+
+if [ -z ${ANDROID_PRODUCT_OUT+0} ]; then
+ echo "Error: Android build environment is not setup."
+ echo "cd to ${ANDROID_SRC} and do the following:"
+ echo " source build/envsetup.sh"
+ echo " lunch <device_lunch_combo>"
+ exit 1
+fi
+
+#
+# Create common.sh file, containing appropriate environment variables.
+#
+
+COMMON_FILE="android/common.sh"
+
+cat <<-EOF > ${COMMON_FILE}
+
+BISECT_ANDROID_DIR=${BISECT_ANDROID_DIR}
+
+BISECT_ANDROID_SRC=${ANDROID_SRC}
+BISECT_NUM_JOBS=${NUM_JOBS}
+
+BISECT_GOOD_BUILD=${GOOD_BUILD}
+BISECT_BAD_BUILD=${BAD_BUILD}
+BISECT_WORK_BUILD=${WORK_BUILD}
+
+BISECT_GOOD_SET=${GOOD_BUILD}/_LIST
+BISECT_BAD_SET=${BAD_BUILD}/_LIST
+
+${DEVICE_ID}
+
+export BISECT_STAGE="TRIAGE"
+
+EOF
+
+chmod 755 ${COMMON_FILE}
+
+exit 0