You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.8 KiB
148 lines
3.8 KiB
#!/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
|