android_setup.sh revision 105775b82341d7c86986b3fb03698d4e471bc3ab
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      if [ -z "$ANDROID_IGNORE_UNKNOWN_DEVICE" ]; then
138          echo "ERROR: unknown device $TARGET_DEVICE"
139          exit 1
140      fi
141      # If ANDROID_IGNORE_UNKNOWN_DEVICE is set, then ANDROID_TOOLCHAIN
142      # or ANDROID_ARCH should be set; Otherwise, ANDROID_ARCH
143      # defaults to 'arm' and the default ARM toolchain is used.
144      DEFINES="${DEFINES} skia_arch_type=${ANDROID_ARCH-arm}"
145      # If ANDROID_IGNORE_UNKNOWN_DEVICE is set, extra gyp defines can be
146      # added via ANDROID_GYP_DEFINES
147      DEFINES="${DEFINES} ${ANDROID_GYP_DEFINES}"
148      ;;
149  esac
150
151  verbose "The build is targeting the device: $TARGET_DEVICE"
152  exportVar DEVICE_ID $TARGET_DEVICE
153
154  # setup the appropriate cross compiling toolchains
155  source $SCRIPT_DIR/utils/setup_toolchain.sh
156
157  DEFINES="${DEFINES} android_toolchain=${TOOLCHAIN_TYPE}"
158  exportVar GYP_DEFINES "$DEFINES $GYP_DEFINES"
159
160  SKIA_SRC_DIR=$(cd "${SCRIPT_DIR}/../../.."; pwd)
161  DEFAULT_SKIA_OUT="${SKIA_SRC_DIR}/out/config/android-${TARGET_DEVICE}"
162  exportVar SKIA_OUT "${SKIA_OUT:-${DEFAULT_SKIA_OUT}}"
163}
164
165# adb_pull_if_needed(android_src, host_dst)
166adb_pull_if_needed() {
167
168  # get adb location
169  source $SCRIPT_DIR/utils/setup_adb.sh
170
171  # read input params
172  ANDROID_SRC="$1"
173  HOST_DST="$2"
174
175  if [ -d $HOST_DST ];
176  then
177    HOST_DST="${HOST_DST}/$(basename ${ANDROID_SRC})"
178  fi
179
180
181  if [ -f $HOST_DST ];
182  then
183    #get the MD5 for dst and src
184    ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_SRC`
185    if [ $(uname) == "Darwin" ]; then
186      HOST_MD5=`md5 -q $HOST_DST`
187    else
188      HOST_MD5=`md5sum $HOST_DST`
189    fi
190
191    if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
192      echo -n "$HOST_DST "
193      $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
194    fi
195  else
196    echo -n "$HOST_DST "
197    $ADB $DEVICE_SERIAL pull $ANDROID_SRC $HOST_DST
198  fi
199}
200
201# adb_push_if_needed(host_src, android_dst)
202adb_push_if_needed() {
203
204  # get adb location
205  source $SCRIPT_DIR/utils/setup_adb.sh
206
207  # read input params
208  HOST_SRC="$1"
209  ANDROID_DST="$2"
210
211  ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
212  if [ "${ANDROID_LS:0:1}" == "d" ];
213  then
214    ANDROID_DST="${ANDROID_DST}/$(basename ${HOST_SRC})"
215  fi
216
217
218  ANDROID_LS=`$ADB $DEVICE_SERIAL shell ls -ld $ANDROID_DST`
219  if [ "${ANDROID_LS:0:1}" == "-" ]; then
220    #get the MD5 for dst and src
221    ANDROID_MD5=`$ADB $DEVICE_SERIAL shell md5 $ANDROID_DST`
222    if [ $(uname) == "Darwin" ]; then
223      HOST_MD5=`md5 -q $HOST_SRC`
224    else
225      HOST_MD5=`md5sum $HOST_SRC`
226    fi
227
228    if [ "${ANDROID_MD5:0:32}" != "${HOST_MD5:0:32}" ]; then
229      echo -n "$ANDROID_DST "
230      $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
231    fi
232  else
233    echo -n "$ANDROID_DST "
234    $ADB $DEVICE_SERIAL shell mkdir -p "$(dirname "$ANDROID_DST")"
235    $ADB $DEVICE_SERIAL push $HOST_SRC $ANDROID_DST
236  fi
237}
238
239setup_device "${DEVICE_ID}"
240