diff options
Diffstat (limited to 'binary_search_tool/android/setup.sh')
-rwxr-xr-x | binary_search_tool/android/setup.sh | 147 |
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 |