Index: platform_tools/android/bin/utils/setup_toolchain.sh |
diff --git a/platform_tools/android/bin/utils/setup_toolchain.sh b/platform_tools/android/bin/utils/setup_toolchain.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..1e9061698aa5db6f8e6318e399bade4c5eff950c |
--- /dev/null |
+++ b/platform_tools/android/bin/utils/setup_toolchain.sh |
@@ -0,0 +1,96 @@ |
+#!/bin/bash |
+# |
+# setup_toolchain.sh: Sets toolchain environment variables used by other scripts. |
+ |
+# Fail-fast if anything in the script fails. |
+set -e |
+ |
+# check that the preconditions for this script are met |
+if [ $(type -t verbose) != 'function' ]; then |
+ echo "ERROR: The verbose function is expected to be defined" |
+ return 1 |
+fi |
+ |
+if [ $(type -t exportVar) != 'function' ]; then |
+ echo "ERROR: The exportVar function is expected to be defined" |
+ return 1 |
+fi |
+ |
+if [ $(type -t absPath) != 'function' ]; then |
+ echo "ERROR: The absPath function is expected to be defined" |
+ return 1 |
+fi |
+ |
+if [ -z "$SCRIPT_DIR" ]; then |
+ echo "ERROR: The SCRIPT_DIR variable is expected to be defined" |
+ return 1 |
+fi |
+ |
+function default_toolchain() { |
+ API_LEVEL=14 |
+ NDK_REV=${NDK_REV-8e} |
+ ANDROID_ARCH=${ANDROID_ARCH-arm} |
+ |
+ TOOLCHAIN_DIR=${SCRIPT_DIR}/../toolchains |
+ if [ $(uname) == "Darwin" ]; then |
+ verbose "Using Mac toolchain." |
+ TOOLCHAIN_TYPE=ndk-r$NDK_REV-$ANDROID_ARCH-mac_v$API_LEVEL |
+ else |
+ verbose "Using Linux toolchain." |
+ TOOLCHAIN_TYPE=ndk-r$NDK_REV-$ANDROID_ARCH-linux_v$API_LEVEL |
+ fi |
+ exportVar ANDROID_TOOLCHAIN "${TOOLCHAIN_DIR}/${TOOLCHAIN_TYPE}/bin" |
+ |
+ # if the toolchain doesn't exist on your machine then we need to fetch it |
+ if [ ! -d "$ANDROID_TOOLCHAIN" ]; then |
+ mkdir -p $TOOLCHAIN_DIR |
+ # enter the toolchain directory then download, unpack, and remove the tarball |
+ pushd $TOOLCHAIN_DIR |
+ TARBALL=ndk-r$NDK_REV-v$API_LEVEL.tgz |
+ |
+ ${SCRIPT_DIR}/download_toolchains.py \ |
+ http://chromium-skia-gm.commondatastorage.googleapis.com/android-toolchains/$TARBALL \ |
+ $TOOLCHAIN_DIR/$TARBALL |
+ tar -xzf $TARBALL $TOOLCHAIN_TYPE |
+ rm $TARBALL |
+ popd |
+ fi |
+ |
+ verbose "Targeting NDK API $API_LEVEL for use on Android 4.0 (NDK Revision $NDK_REV) and above" |
+} |
+ |
+#check to see if the toolchain has been defined and if not setup the default toolchain |
+if [ -z "$ANDROID_TOOLCHAIN" ]; then |
+ default_toolchain |
+ if [ ! -d "$ANDROID_TOOLCHAIN" ]; then |
+ echo "ERROR: unable to download/setup the required toolchain (${ANDROID_TOOLCHAIN})" |
+ return 1; |
+ fi |
+fi |
+ |
+GCC=$(command ls $ANDROID_TOOLCHAIN/*-gcc | head -n1) |
+if [ -z "$GCC" ]; then |
+ echo "ERROR: Could not find Android cross-compiler in: $ANDROID_TOOLCHAIN" |
+ return 1 |
+fi |
+ |
+# Remove the '-gcc' at the end to get the full toolchain prefix |
+ANDROID_TOOLCHAIN_PREFIX=${GCC%%-gcc} |
+ |
+CCACHE=${ANDROID_MAKE_CCACHE-$(which ccache || true)} |
+ |
+exportVar CC "$CCACHE $ANDROID_TOOLCHAIN_PREFIX-gcc" |
+exportVar CXX "$CCACHE $ANDROID_TOOLCHAIN_PREFIX-g++" |
+exportVar LINK "$CCACHE $ANDROID_TOOLCHAIN_PREFIX-gcc" |
+ |
+exportVar AR "$ANDROID_TOOLCHAIN_PREFIX-ar" |
+exportVar RANLIB "$ANDROID_TOOLCHAIN_PREFIX-ranlib" |
+exportVar OBJCOPY "$ANDROID_TOOLCHAIN_PREFIX-objcopy" |
+exportVar STRIP "$ANDROID_TOOLCHAIN_PREFIX-strip" |
+ |
+# Create symlinks for nm & readelf and add them to the path so that the ninja |
+# build uses them instead of attempting to use the one on the system. |
+# This is required to build using ninja on a Mac. |
+ln -sf $ANDROID_TOOLCHAIN_PREFIX-nm $ANDROID_TOOLCHAIN/nm |
+ln -sf $ANDROID_TOOLCHAIN_PREFIX-readelf $ANDROID_TOOLCHAIN/readelf |
+exportVar PATH $ANDROID_TOOLCHAIN:$PATH |