17627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com#!/bin/bash
27627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com#
37627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com# android_setup.sh: Sets environment variables used by other Android scripts.
47627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com
5a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org# Fail-fast if anything in the script fails.
6a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgset -e
7a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org
8a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgBUILDTYPE=${BUILDTYPE-Debug}
9a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org
107627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comwhile (( "$#" )); do
11a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  if [[ "$1" == "-d" ]]; then
127627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com    DEVICE_ID=$2
137627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com    shift
14b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao  elif [[ "$1" == "-i" || "$1" == "--resourcePath" ]]; then
15b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    RESOURCE_PATH=$2
16b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    APP_ARGS=("${APP_ARGS[@]}" "${1}" "${2}")
17b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    shift
18a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  elif [[ "$1" == "-s" ]]; then
19cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    DEVICE_SERIAL="-s $2"
20cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    shift
21a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  elif [[ "$1" == "-t" ]]; then
22a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    BUILDTYPE=$2
23a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    shift
24a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  elif [[ "$1" == "--release" ]]; then
25a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    BUILDTYPE=Release
267627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com  else
27cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    APP_ARGS=("${APP_ARGS[@]}" "${1}")
287627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com  fi
297627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com  shift
307627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comdone
317627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com
321c4015ab14f3d1ca6ec41effcbb72448817688fdmtklein@google.comfunction verbose {
33a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  if [[ -n $VERBOSE ]]; then
34a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    echo $@
35a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  fi
361c4015ab14f3d1ca6ec41effcbb72448817688fdmtklein@google.com}
371c4015ab14f3d1ca6ec41effcbb72448817688fdmtklein@google.com
38dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comfunction exportVar {
39dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  NAME=$1
40dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  VALUE=$2
411c4015ab14f3d1ca6ec41effcbb72448817688fdmtklein@google.com  verbose export $NAME=\"$VALUE\"
42dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  export $NAME="$VALUE"
43dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com}
44dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
45a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgfunction absPath {
46a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  (cd $1; pwd)
47a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org}
48a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org
49a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgSCRIPT_DIR=$(absPath "$(dirname "$BASH_SOURCE[0]}")")
50dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
51dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comif [ -z "$ANDROID_SDK_ROOT" ]; then
52a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  if ANDROID_SDK_ROOT="$(dirname $(which android))/.."; then
53a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    exportVar ANDROID_SDK_ROOT $ANDROID_SDK_ROOT
54a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  else
55a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org     echo "No ANDROID_SDK_ROOT set and can't auto detect it from location of android binary."
56a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org     exit 1
57dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  fi
58dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comfi
59dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
60d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com# check to see that gclient sync ran successfully
61d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.comTHIRD_PARTY_EXTERNAL_DIR=${SCRIPT_DIR}/../third_party/externals
62c772540b4cbf8784e0f97cfa02accbd84181347edjsollen@google.comif [ ! -d "$THIRD_PARTY_EXTERNAL_DIR" ]; then
63d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com	echo ""
64d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com	echo "ERROR: Unable to find the required third_party dependencies needed to build."
65d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com	echo "       To fix this add the following line to your .gclient file and run 'gclient sync'"
66d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com	echo "        target_os = ['android']"
67d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com	echo ""
68d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com	exit 1;
69d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.comfi
70d165de44c89f0dcc88f0a196698744e08662e33fdjsollen@google.com
71dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Helper function to configure the GYP defines to the appropriate values
72dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# based on the target device.
73dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comsetup_device() {
74dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  DEFINES="OS=android"
75dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  DEFINES="${DEFINES} host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')"
76dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  DEFINES="${DEFINES} skia_os=android"
77a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  DEFINES="${DEFINES} android_base=$(absPath ${SCRIPT_DIR}/..)"
78d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com  if [[ "$GYP_DEFINES" != *skia_shared_lib=* ]]; then
79d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com      DEFINES="${DEFINES} skia_shared_lib=1"
80d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com  fi
81dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
82dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  # Setup the build variation depending on the target device
83dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  TARGET_DEVICE="$1"
84dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
85dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  if [ -z "$TARGET_DEVICE" ]; then
86a61ba109bf1a60c6de8f9ebea043e782497b88ccdjsollen@google.com    if [ -f .android_config ]; then
87a61ba109bf1a60c6de8f9ebea043e782497b88ccdjsollen@google.com      TARGET_DEVICE=$(cat .android_config)
88a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org      verbose "no target device (-d), using ${TARGET_DEVICE} from most recent build"
89a61ba109bf1a60c6de8f9ebea043e782497b88ccdjsollen@google.com    else
9048f9e1f2c1a164128fa3e1fc5e264aab16b2b884mtklein@google.com      TARGET_DEVICE="arm_v7_thumb"
91a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org      verbose "no target device (-d), using ${TARGET_DEVICE}"
92a61ba109bf1a60c6de8f9ebea043e782497b88ccdjsollen@google.com    fi
93dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  fi
94dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
95dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  case $TARGET_DEVICE in
96dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    nexus_s)
97ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 arm_version=7 arm_thumb=1"
984e5559af8947ae7dc3df531b6d7a73323db20c3frobertphillips@google.com      DEFINES="${DEFINES} skia_resource_cache_mb_limit=24"
997627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
100ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
101dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    nexus_4 | nexus_7 | nexus_10)
102ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 arm_version=7 arm_thumb=1"
1037627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
104ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
105dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    xoom)
106ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 arm_version=7 arm_thumb=1"
1077627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
108ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
109dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    galaxy_nexus)
110ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 arm_version=7 arm_thumb=1"
1114e5559af8947ae7dc3df531b6d7a73323db20c3frobertphillips@google.com      DEFINES="${DEFINES} skia_resource_cache_mb_limit=32"
1127627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
113ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
114f5b6bf775c331784964bfcc9b9ac707dc6a7c62bmtklein    intel_rhb | razr_i)
115ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=32"
1164e5559af8947ae7dc3df531b6d7a73323db20c3frobertphillips@google.com      DEFINES="${DEFINES} skia_resource_cache_mb_limit=32"
1177627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="x86"
118ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
119f5b6bf775c331784964bfcc9b9ac707dc6a7c62bmtklein    x86)
120f5b6bf775c331784964bfcc9b9ac707dc6a7c62bmtklein      DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=32"
121f5b6bf775c331784964bfcc9b9ac707dc6a7c62bmtklein      ANDROID_ARCH="x86"
122f5b6bf775c331784964bfcc9b9ac707dc6a7c62bmtklein      ;;
123c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger    x86_64 | x64)
124c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=64"
125c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      ANDROID_ARCH="x86_64"
126c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      ;;
127dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    arm_v7)
128ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon_optional=1 arm_version=7 arm_thumb=0"
1297627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
130ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
1317deeaf9521cabb740968a46ee2513aaa5a7ed984mtklein    arm_v7_thumb | nvidia_logan | nexus_5)
132ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon_optional=1 arm_version=7 arm_thumb=1"
1337627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
134ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
135dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    arm)
136ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 arm_thumb=0"
1377627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
138ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
139dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    arm_thumb)
140ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 arm_thumb=1"
1417627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com      ANDROID_ARCH="arm"
142ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
143c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger    arm64)
144c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      DEFINES="${DEFINES} skia_arch_type=arm64 skia_arch_width=64"
145c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      ANDROID_ARCH="arm64"
146c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      ;;
147b6872c06e1b2a441895198f32356fde0f931986acommit-bot@chromium.org    mips)
148b6872c06e1b2a441895198f32356fde0f931986acommit-bot@chromium.org      DEFINES="${DEFINES} skia_arch_type=mips skia_arch_width=32"
149b6872c06e1b2a441895198f32356fde0f931986acommit-bot@chromium.org      DEFINES="${DEFINES} skia_resource_cache_mb_limit=32"
150b6872c06e1b2a441895198f32356fde0f931986acommit-bot@chromium.org      ANDROID_ARCH="mips"
151b6872c06e1b2a441895198f32356fde0f931986acommit-bot@chromium.org      ;;
152777a7dd519e029d03b366e79cdfe43a342213d2aDerek Sollenberger    mips_dsp2)
153777a7dd519e029d03b366e79cdfe43a342213d2aDerek Sollenberger      DEFINES="${DEFINES} skia_arch_type=mips skia_arch_width=32"
154777a7dd519e029d03b366e79cdfe43a342213d2aDerek Sollenberger      DEFINES="${DEFINES} mips_arch_variant=mips32r2 mips_dsp=2"
155777a7dd519e029d03b366e79cdfe43a342213d2aDerek Sollenberger      ANDROID_ARCH="mips"
156777a7dd519e029d03b366e79cdfe43a342213d2aDerek Sollenberger      ;;
157c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger    mips64)
158c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      DEFINES="${DEFINES} skia_arch_type=mips skia_arch_width=64"
159c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      ANDROID_ARCH="mips64"
160c7d29c86b244d468b81f57ca5c58de905295886aDerek Sollenberger      ;;
161dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com    *)
162e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      if [ -z "$ANDROID_IGNORE_UNKNOWN_DEVICE" ]; then
163e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org          echo "ERROR: unknown device $TARGET_DEVICE"
164e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org          exit 1
165e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      fi
166e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      # If ANDROID_IGNORE_UNKNOWN_DEVICE is set, then ANDROID_TOOLCHAIN
167e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      # or ANDROID_ARCH should be set; Otherwise, ANDROID_ARCH
168e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      # defaults to 'arm' and the default ARM toolchain is used.
169e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      DEFINES="${DEFINES} skia_arch_type=${ANDROID_ARCH-arm}"
170e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      # If ANDROID_IGNORE_UNKNOWN_DEVICE is set, extra gyp defines can be
171e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      # added via ANDROID_GYP_DEFINES
172e3916bfe0e0a030d31c181ea8c9c91cae8229d22commit-bot@chromium.org      DEFINES="${DEFINES} ${ANDROID_GYP_DEFINES}"
173ef0893191adcc343b5e27664835b11c327025fb9borenet@google.com      ;;
174dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com  esac
175dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
1761c4015ab14f3d1ca6ec41effcbb72448817688fdmtklein@google.com  verbose "The build is targeting the device: $TARGET_DEVICE"
177a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  exportVar DEVICE_ID $TARGET_DEVICE
178dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
1790257ebe4ac7907d0293371cc6a50a0ec0a55f61ccommit-bot@chromium.org  # setup the appropriate cross compiling toolchains
1800257ebe4ac7907d0293371cc6a50a0ec0a55f61ccommit-bot@chromium.org  source $SCRIPT_DIR/utils/setup_toolchain.sh
181a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org
182112215acef55eb6d7fa0ef8c9af0215a78d0e104borenet@google.com  DEFINES="${DEFINES} android_toolchain=${TOOLCHAIN_TYPE}"
183edea842b6a678f8c06d136a808def83880a4ca88commit-bot@chromium.org  exportVar GYP_DEFINES "$DEFINES $GYP_DEFINES"
184105775b82341d7c86986b3fb03698d4e471bc3abcommit-bot@chromium.org
185105775b82341d7c86986b3fb03698d4e471bc3abcommit-bot@chromium.org  SKIA_SRC_DIR=$(cd "${SCRIPT_DIR}/../../.."; pwd)
186105775b82341d7c86986b3fb03698d4e471bc3abcommit-bot@chromium.org  DEFAULT_SKIA_OUT="${SKIA_SRC_DIR}/out/config/android-${TARGET_DEVICE}"
187105775b82341d7c86986b3fb03698d4e471bc3abcommit-bot@chromium.org  exportVar SKIA_OUT "${SKIA_OUT:-${DEFAULT_SKIA_OUT}}"
188dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com}
189dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
190121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com# adb_pull_if_needed(android_src, host_dst)
191121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.comadb_pull_if_needed() {
192dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
193121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  # get adb location
194121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  source $SCRIPT_DIR/utils/setup_adb.sh
195121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com
196121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  # read input params
197121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  ANDROID_SRC="$1"
198121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  HOST_DST="$2"
199dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
200ab4098b4d3ceb952dc7bea7e28a38387830acad6commit-bot@chromium.org  if [ -f $HOST_DST ];
201121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  then
202121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com    #get the MD5 for dst and src
203cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_SRC`
2043a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com    if [ $(uname) == "Darwin" ]; then
2053a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com      HOST_MD5=`md5 -q $HOST_DST`
2063a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com    else
2073a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com      HOST_MD5=`md5sum $HOST_DST`
2083a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com    fi
209121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com
210a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
211a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org      echo -n "$HOST_DST "
212cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com      $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
213121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com    fi
214121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  else
215a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    echo -n "$HOST_DST "
216cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
217cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  fi
218cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com}
219cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
220cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com# adb_push_if_needed(host_src, android_dst)
221cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comadb_push_if_needed() {
222cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
223cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  # get adb location
224cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  source $SCRIPT_DIR/utils/setup_adb.sh
225cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
226cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  # read input params
227b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao  local HOST_SRC="$1"
228b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao  local ANDROID_DST="$2"
229cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
230cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
231b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao  HOST_LS=`ls -ld $HOST_SRC`
232b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao  if [ "${ANDROID_LS:0:1}" == "d" -a "${HOST_LS:0:1}" == "-" ];
233cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  then
234cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    ANDROID_DST="${ANDROID_DST}/$(basename ${HOST_SRC})"
235cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  fi
236cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
237cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
238cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
239a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org  if [ "${ANDROID_LS:0:1}" == "-" ]; then
240cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    #get the MD5 for dst and src
241cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_DST`
2423a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com    if [ $(uname) == "Darwin" ]; then
2433a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com      HOST_MD5=`md5 -q $HOST_SRC`
2443a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com    else
2453a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com      HOST_MD5=`md5sum $HOST_SRC`
2463a98ed7658057b8b6c5cc38275b02b63d3091527djsollen@google.com    fi
247cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
248a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
249a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org      echo -n "$ANDROID_DST "
250cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com      $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
251cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com    fi
252b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao  elif [ "${ANDROID_LS:0:1}" == "d" ]; then
253b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    for FILE_ITEM in `ls $HOST_SRC`; do
254b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao      adb_push_if_needed "${HOST_SRC}/${FILE_ITEM}" "${ANDROID_DST}/${FILE_ITEM}"
255b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    done
256cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com  else
257b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    HOST_LS=`ls -ld $HOST_SRC`
258b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    if [ "${HOST_LS:0:1}" == "d" ]; then
259b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao      $ADB $DEVICE_SERIAL shell mkdir -p $ANDROID_DST
260b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao      adb_push_if_needed $HOST_SRC $ANDROID_DST
261b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    else
262b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao      echo -n "$ANDROID_DST "
263b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao      $ADB $DEVICE_SERIAL shell mkdir -p "$(dirname "$ANDROID_DST")"
264b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao      $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
265b2e1fa5b76bc6d38b3cb7074470512f0004d58ceqiankun.miao    fi
266121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com  fi
267121b3fe6a05cff6a8354ae8b4ba4da1c8edd62c3djsollen@google.com}
2687627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.com
2697627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comsetup_device "${DEVICE_ID}"
270