Home | History | Annotate | Download | only in bin
      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