android_setup.sh revision dcdd57faf02fb4fd23bb8265392b9c22e068907e
1function exportVar { 2 NAME=$1 3 VALUE=$2 4 echo export $NAME=\"$VALUE\" 5 export $NAME="$VALUE" 6} 7 8SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 9 10# A valid Android SDK installation is required to build the sample app. 11if [ -z "$ANDROID_SDK_ROOT" ]; then 12 ANDROID_TOOL=$(which android 2>/dev/null) 13 if [ -z "$ANDROID_TOOL" ]; then 14 echo "ERROR: Please define ANDROID_SDK_ROOT in your environment to point" 15 echo " to a valid Android SDK installation." 16 return 1 17 fi 18 ANDROID_SDK_ROOT=$(cd $(dirname "$ANDROID_TOOL")/.. && pwd) 19 exportVar ANDROID_SDK_ROOT "$ANDROID_SDK_ROOT" 20fi 21 22# ant is required to be installed on your system and in your PATH 23ant -version &> /dev/null 24if [[ "$?" != "0" ]]; then 25 echo "ERROR: Unable to find ant. Please install it before proceeding." 26 exit 1 27fi 28 29# determine the toolchain that we will be using 30API_LEVEL=14 31 32if [[ -z "$NDK_REV" ]]; 33then 34 NDK_REV="8d" 35fi 36 37if [[ -z "$ANDROID_ARCH" ]]; 38then 39 ANDROID_ARCH="arm" 40fi 41 42TOOLCHAIN_DIR=${SCRIPT_DIR}/../toolchains 43if [ $(uname) == "Linux" ]; then 44 echo "Using Linux toolchain." 45 TOOLCHAIN_TYPE=ndk-r$NDK_REV-$ANDROID_ARCH-linux_v$API_LEVEL 46elif [ $(uname) == "Darwin" ]; then 47 echo "Using Mac toolchain." 48 TOOLCHAIN_TYPE=ndk-r$NDK_REV-$ANDROID_ARCH-mac_v$API_LEVEL 49else 50 echo "Could not automatically determine toolchain! Defaulting to Linux." 51 TOOLCHAIN_TYPE=ndk-r$NDK_REV-$ANDROID_ARCH-linux_v$API_LEVEL 52fi 53exportVar ANDROID_TOOLCHAIN ${TOOLCHAIN_DIR}/${TOOLCHAIN_TYPE}/bin 54 55# if the toolchain doesn't exist on your machine then we need to fetch it 56if [ ! -d "$ANDROID_TOOLCHAIN" ]; then 57 # gsutil must be installed on your system and in your PATH 58 gsutil version &> /dev/null 59 if [[ "$?" != "0" ]]; then 60 echo "ERROR: Unable to find gsutil. Please install it before proceeding." 61 exit 1 62 fi 63 # create the toolchain directory if needed 64 if [ ! -d "$TOOLCHAIN_DIR" ]; then 65 mkdir $TOOLCHAIN_DIR 66 fi 67 # enter the toolchain directory then download, unpack, and remove the tarball 68 pushd $TOOLCHAIN_DIR 69 TARBALL=ndk-r$NDK_REV-v$API_LEVEL.tgz 70 gsutil cp gs://chromium-skia-gm/android-toolchains/$TARBALL $TARBALL 71 echo "Untarring $TOOLCHAIN_TYPE from $TARBALL." 72 tar -xzf $TARBALL $TOOLCHAIN_TYPE 73 echo "Removing $TARBALL" 74 rm $TARBALL 75 popd 76fi 77 78if [ ! -d "$ANDROID_TOOLCHAIN" ]; then 79 echo "ERROR: unable to download/setup the required toolchain (${TOOLCHAIN_TYPE})" 80 return 1; 81fi 82 83echo "The build is targeting NDK API level $API_LEVEL for use on Android 4.0 (NDK Revision $NDK_REV) and above" 84 85LS="/bin/ls" # Use directly to avoid any 'ls' alias that might be defined. 86GCC=$($LS $ANDROID_TOOLCHAIN/*-gcc | head -n1) 87if [ -z "$GCC" ]; then 88 echo "ERROR: Could not find Android cross-compiler in: $ANDROID_TOOLCHAIN" 89 return 1 90fi 91 92# Remove the '-gcc' at the end to get the full toolchain prefix 93ANDROID_TOOLCHAIN_PREFIX=${GCC%%-gcc} 94 95exportVar AR "$ANDROID_TOOLCHAIN_PREFIX-ar" 96if [[ -z "$ANDROID_MAKE_CCACHE" ]]; then 97 exportVar CC "$ANDROID_TOOLCHAIN_PREFIX-gcc" 98 exportVar CXX "$ANDROID_TOOLCHAIN_PREFIX-g++" 99 exportVar LINK "$ANDROID_TOOLCHAIN_PREFIX-gcc" 100else 101 exportVar CC "$ANDROID_MAKE_CCACHE $ANDROID_TOOLCHAIN_PREFIX-gcc" 102 exportVar CXX "$ANDROID_MAKE_CCACHE $ANDROID_TOOLCHAIN_PREFIX-g++" 103 exportVar LINK "$ANDROID_MAKE_CCACHE $ANDROID_TOOLCHAIN_PREFIX-gcc" 104fi 105exportVar RANLIB "$ANDROID_TOOLCHAIN_PREFIX-ranlib" 106exportVar OBJCOPY "$ANDROID_TOOLCHAIN_PREFIX-objcopy" 107exportVar STRIP "$ANDROID_TOOLCHAIN_PREFIX-strip" 108 109# Helper function to configure the GYP defines to the appropriate values 110# based on the target device. 111setup_device() { 112 DEFINES="OS=android" 113 DEFINES="${DEFINES} host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')" 114 DEFINES="${DEFINES} skia_os=android" 115 DEFINES="${DEFINES} android_base=${SCRIPT_DIR}/.." 116 DEFINES="${DEFINES} android_toolchain=${TOOLCHAIN_TYPE}" 117 118 # Setup the build variation depending on the target device 119 TARGET_DEVICE="$1" 120 121 if [ -z "$TARGET_DEVICE" ]; then 122 echo "INFO: no target device type was specified so using the default 'arm_v7'" 123 TARGET_DEVICE="arm_v7" 124 fi 125 126 case $TARGET_DEVICE in 127 nexus_s) 128 DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 armv7=1 arm_thumb=0" 129 DEFINES="${DEFINES} skia_texture_cache_mb_limit=24" 130 ;; 131 nexus_4 | nexus_7 | nexus_10) 132 DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 armv7=1 arm_thumb=0" 133 ;; 134 xoom) 135 DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 armv7=1 arm_thumb=0" 136 ;; 137 galaxy_nexus) 138 DEFINES="${DEFINES} skia_arch_type=arm arm_neon=1 armv7=1 arm_thumb=0" 139 DEFINES="${DEFINES} skia_texture_cache_mb_limit=32" 140 ;; 141 razr_i) 142 DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=32" 143 DEFINES="${DEFINES} skia_texture_cache_mb_limit=32" 144 ;; 145 arm_v7) 146 DEFINES="${DEFINES} skia_arch_type=arm arm_neon_optional=1 armv7=1 arm_thumb=0" 147 ;; 148 arm_v7_thumb) 149 DEFINES="${DEFINES} skia_arch_type=arm arm_neon_optional=1 armv7=1 arm_thumb=1" 150 ;; 151 arm) 152 DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 armv7=0 arm_thumb=0" 153 ;; 154 arm_thumb) 155 DEFINES="${DEFINES} skia_arch_type=arm arm_neon=0 armv7=0 arm_thumb=1" 156 ;; 157 x86) 158 DEFINES="${DEFINES} skia_arch_type=x86 skia_arch_width=32" 159 DEFINES="${DEFINES} skia_texture_cache_mb_limit=32" 160 ;; 161 *) 162 echo -n "ERROR: unknown device specified ($TARGET_DEVICE), valid values: " 163 echo "nexus_[s,4,7,10] xoom galaxy_nexus arm arm_thumb arm_v7 arm_v7_thumb x86" 164 return 1; 165 ;; 166 esac 167 168 echo "The build is targeting the device: $TARGET_DEVICE" 169 170 exportVar GYP_DEFINES "$DEFINES" 171 exportVar SKIA_OUT "out/config/android-${TARGET_DEVICE}" 172} 173 174# Run the setup device command initially as a convenience for the user 175#setup_device 176#echo "** The device has been setup for you by default. If you would like to **" 177#echo "** use a different device then run the setup_device function with the **" 178#echo "** appropriate input. **" 179 180# Use the "android" flavor of the Makefile generator for both Linux and OS X. 181exportVar GYP_GENERATORS "make-android" 182 183# Helper function so that when we run "make" to build for clank it exports 184# the toolchain variables to make. 185#make_android() { 186# CC="$CROSS_CC" CXX="$CROSS_CXX" LINK="$CROSS_LINK" \ 187# AR="$CROSS_AR" RANLIB="$CROSS_RANLIB" \ 188# command make $* 189#} 190