android_setup.sh revision 21a6d13a2bf1045607eb9fb6bf1da580f5d0ec4b
1#!/bin/bash
2#
3# android_setup.sh: Sets environment variables used by other Android scripts.
4
5# Fail-fast if anything in the script fails.
6set -e
7
8BUILDTYPE=${BUILDTYPE-Debug}
9
10while (( "$#" )); do
11  if [[ "$1" == "-d" ]]; then
12    DEVICE_ID=$2
13    shift
14  elif [[ "$1" == "-s" ]]; then
15    DEVICE_SERIAL="-s $2"
16    shift
17  elif [[ "$1" == "-t" ]]; then
18    BUILDTYPE=$2
19    shift
20  elif [[ "$1" == "--release" ]]; then
21    BUILDTYPE=Release
22  else
23    APP_ARGS=("${APP_ARGS[@]}" "${1}")
24  fi
25  shift
26done
27
28function verbose {
29  if [[ -n $VERBOSE ]]; then
30    echo $@
31  fi
32}
33
34function exportVar {
35  NAME=$1
36  VALUE=$2
37  verbose export $NAME=\"$VALUE\"
38  export $NAME="$VALUE"
39}
40
41function absPath {
42  (cd $1; pwd)
43}
44
45SCRIPT_DIR=$(absPath "$(dirname "$BASH_SOURCE[0]}")")
46
47if [ -z "$ANDROID_SDK_ROOT" ]; then
48  if ANDROID_SDK_ROOT="$(dirname $(which android))/.."; then
49    exportVar ANDROID_SDK_ROOT $ANDROID_SDK_ROOT
50  else
51     echo "No ANDROID_SDK_ROOT set and can't auto detect it from location of android binary."
52     exit 1
53  fi
54fi
55
56# check to see that gclient sync ran successfully
57THIRD_PARTY_EXTERNAL_DIR=${SCRIPT_DIR}/../third_party/externals
58if [ ! -d "$THIRD_PARTY_EXTERNAL_DIR" ]; then
59	echo ""
60	echo "ERROR: Unable to find the required third_party dependencies needed to build."
61	echo "       To fix this add the following line to your .gclient file and run 'gclient sync'"
62	echo "        target_os = ['android']"
63	echo ""
64	exit 1;
65fi
66
67# Helper function to configure the GYP defines to the appropriate values
68# based on the target device.
69setup_device() {
70  DEFINES="OS=android"
71  DEFINES="${DEFINES} host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')"
72  DEFINES="${DEFINES} skia_os=android"
73  DEFINES="${DEFINES} android_base=$(absPath ${SCRIPT_DIR}/..)"
74  if [[ "$GYP_DEFINES" != *skia_shared_lib=* ]]; then
75      DEFINES="${DEFINES} skia_shared_lib=1"
76  fi
77
78  # Setup the build variation depending on the target device
79  TARGET_DEVICE="$1"
80
81  if [ -z "$TARGET_DEVICE" ]; then
82    if [ -f .android_config ]; then
83      TARGET_DEVICE=$(cat .android_config)
84      verbose "no target device (-d), using ${TARGET_DEVICE} from most recent build"
85    else
86      TARGET_DEVICE="arm_v7_thumb"
87      verbose "no target device (-d), using ${TARGET_DEVICE}"
88    fi
89  fi
90
91  case $TARGET_DEVICE in
92    nexus_s)
93      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 arm_version=7 arm_thumb=1"
94      DEFINES="${DEFINES} skia_resource_cache_mb_limit=24"
95      ANDROID_ARCH="arm"
96      ;;
97    nexus_4 | nexus_7 | nexus_10)
98      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 arm_version=7 arm_thumb=1"
99      ANDROID_ARCH="arm"
100      ;;
101    xoom)
102      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 arm_version=7 arm_thumb=1"
103      ANDROID_ARCH="arm"
104      ;;
105    galaxy_nexus)
106      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 arm_version=7 arm_thumb=1"
107      DEFINES="${DEFINES} skia_resource_cache_mb_limit=32"
108      ANDROID_ARCH="arm"
109      ;;
110    intel_rhb | razr_i | x86)
111      DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=32"
112      DEFINES="${DEFINES} skia_resource_cache_mb_limit=32"
113      ANDROID_ARCH="x86"
114      ;;
115    arm_v7)
116      DEFINES="${DEFINES} skia_arch_type=arm arm_neon_optional=1 arm_version=7 arm_thumb=0"
117      ANDROID_ARCH="arm"
118      ;;
119    arm_v7_thumb | nvidia_logan)
120      DEFINES="${DEFINES} skia_arch_type=arm arm_neon_optional=1 arm_version=7 arm_thumb=1"
121      ANDROID_ARCH="arm"
122      ;;
123    arm)
124      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 arm_thumb=0"
125      ANDROID_ARCH="arm"
126      ;;
127    arm_thumb)
128      DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 arm_thumb=1"
129      ANDROID_ARCH="arm"
130      ;;
131    mips)
132      DEFINES="${DEFINES} skia_arch_type=mips skia_arch_width=32"
133      DEFINES="${DEFINES} skia_resource_cache_mb_limit=32"
134      ANDROID_ARCH="mips"
135      ;;
136    *)
137      echo "ERROR: unknown device $TARGET_DEVICE"
138      exit 1
139      ;;
140  esac
141
142  verbose "The build is targeting the device: $TARGET_DEVICE"
143  exportVar DEVICE_ID $TARGET_DEVICE
144
145  # setup the appropriate cross compiling toolchains
146  source $SCRIPT_DIR/utils/setup_toolchain.sh
147
148  DEFINES="${DEFINES} android_toolchain=${TOOLCHAIN_TYPE}"
149  exportVar GYP_DEFINES "$DEFINES $GYP_DEFINES"
150
151  SKIA_SRC_DIR=$(cd "${SCRIPT_DIR}/../../.."; pwd)
152  DEFAULT_SKIA_OUT="${SKIA_SRC_DIR}/out/config/android-${TARGET_DEVICE}"
153  exportVar SKIA_OUT "${SKIA_OUT:-${DEFAULT_SKIA_OUT}}"
154}
155
156# adb_pull_if_needed(android_src, host_dst)
157adb_pull_if_needed() {
158
159  # get adb location
160  source $SCRIPT_DIR/utils/setup_adb.sh
161
162  # read input params
163  ANDROID_SRC="$1"
164  HOST_DST="$2"
165
166  if [ -d $HOST_DST ];
167  then
168    HOST_DST="${HOST_DST}/$(basename ${ANDROID_SRC})"
169  fi
170
171
172  if [ -f $HOST_DST ];
173  then
174    #get the MD5 for dst and src
175    ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_SRC`
176    if [ $(uname) == "Darwin" ]; then
177      HOST_MD5=`md5 -q $HOST_DST`
178    else
179      HOST_MD5=`md5sum $HOST_DST`
180    fi
181
182    if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
183      echo -n "$HOST_DST "
184      $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
185    fi
186  else
187    echo -n "$HOST_DST "
188    $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
189  fi
190}
191
192# adb_push_if_needed(host_src, android_dst)
193adb_push_if_needed() {
194
195  # get adb location
196  source $SCRIPT_DIR/utils/setup_adb.sh
197
198  # read input params
199  HOST_SRC="$1"
200  ANDROID_DST="$2"
201
202  ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
203  if [ "${ANDROID_LS:0:1}" == "d" ];
204  then
205    ANDROID_DST="${ANDROID_DST}/$(basename ${HOST_SRC})"
206  fi
207
208
209  ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
210  if [ "${ANDROID_LS:0:1}" == "-" ]; then
211    #get the MD5 for dst and src
212    ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_DST`
213    if [ $(uname) == "Darwin" ]; then
214      HOST_MD5=`md5 -q $HOST_SRC`
215    else
216      HOST_MD5=`md5sum $HOST_SRC`
217    fi
218
219    if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
220      echo -n "$ANDROID_DST "
221      $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
222    fi
223  else
224    echo -n "$ANDROID_DST "
225    $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
226  fi
227}
228
229setup_device "${DEVICE_ID}"
230