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.
147 lines
3.8 KiB
147 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
|
|
|