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. 6 set -e 7 8 BUILDTYPE=${BUILDTYPE-Debug} 9 10 while (( "$#" )); 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 26 done 27 28 function verbose { 29 if [[ -n $VERBOSE ]]; then 30 echo $@ 31 fi 32 } 33 34 function exportVar { 35 NAME=$1 36 VALUE=$2 37 verbose export $NAME=\"$VALUE\" 38 export $NAME="$VALUE" 39 } 40 41 function absPath { 42 (cd $1; pwd) 43 } 44 45 SCRIPT_DIR=$(absPath "$(dirname "$BASH_SOURCE[0]}")") 46 47 if [ -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 54 fi 55 56 # check to see that gclient sync ran successfully 57 THIRD_PARTY_EXTERNAL_DIR=${SCRIPT_DIR}/../third_party/externals 58 if [ ! -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; 65 fi 66 67 # Helper function to configure the GYP defines to the appropriate values 68 # based on the target device. 69 setup_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) 166 adb_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) 202 adb_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 239 setup_device "${DEVICE_ID}" 240