| Index: build/android/adb_gdb
|
| diff --git a/build/android/adb_gdb b/build/android/adb_gdb
|
| index 0a536c1d3383708399be1afb28e339649f7209c3..2e9e3168273de92427b522e8063e057090d1e61b 100755
|
| --- a/build/android/adb_gdb
|
| +++ b/build/android/adb_gdb
|
| @@ -358,6 +358,46 @@ else
|
| fi
|
| fi
|
|
|
| +# Detect the NDK system name, i.e. the name used to identify the host.
|
| +# out: NDK system name (e.g. 'linux' or 'darwin')
|
| +get_ndk_host_system () {
|
| + local HOST_OS
|
| + if [ -z "$NDK_HOST_SYSTEM" ]; then
|
| + HOST_OS=$(uname -s)
|
| + case $HOST_OS in
|
| + Linux) NDK_HOST_SYSTEM=linux;;
|
| + Darwin) NDK_HOST_SYSTEM=darwin;;
|
| + *) panic "You can't run this script on this system: $HOST_OS";;
|
| + esac
|
| + fi
|
| + echo "$NDK_HOST_SYSTEM"
|
| +}
|
| +
|
| +# Detect the NDK host architecture name.
|
| +# out: NDK arch name (e.g. 'x86' or 'x86_64')
|
| +get_ndk_host_arch () {
|
| + local HOST_ARCH HOST_OS
|
| + if [ -z "$NDK_HOST_ARCH" ]; then
|
| + HOST_OS=$(get_ndk_host_system)
|
| + HOST_ARCH=$(uname -p)
|
| + case $HOST_ARCH in
|
| + i?86) NDK_HOST_ARCH=x86;;
|
| + x86_64|amd64) NDK_HOST_ARCH=x86_64;;
|
| + *) panic "You can't run this script on this host architecture: $HOST_ARCH";;
|
| + esac
|
| + # Darwin trick: "uname -p" always returns i386 on 64-bit installations.
|
| + if [ "$HOST_OS" = darwin -a "$NDK_HOST_ARCH" = "x86" ]; then
|
| + # Use '/usr/bin/file', not just 'file' to avoid buggy MacPorts
|
| + # implementations of the tool. See http://b.android.com/53769
|
| + HOST_64BITS=$(/usr/bin/file -L "$SHELL" | grep -e "x86[_-]64")
|
| + if [ "$HOST_64BITS" ]; then
|
| + NDK_HOST_ARCH=x86_64
|
| + fi
|
| + fi
|
| + fi
|
| + echo "$NDK_HOST_ARCH"
|
| +}
|
| +
|
| # Convert an NDK architecture name into a GNU configure triplet.
|
| # $1: NDK architecture name (e.g. 'arm')
|
| # Out: Android GNU configure triplet (e.g. 'arm-linux-androideabi')
|
| @@ -413,6 +453,42 @@ get_ndk_toolchain_prebuilt () {
|
| echo "$FILE"
|
| }
|
|
|
| +# Find the path to an NDK's toolchain full prefix for a given architecture
|
| +# $1: NDK install path
|
| +# $2: NDK target architecture name
|
| +# Out: install path + binary prefix (e.g.
|
| +# ".../path/to/bin/arm-linux-androideabi-")
|
| +get_ndk_toolchain_fullprefix () {
|
| + local NDK_DIR="$1"
|
| + local ARCH="$2"
|
| + local TARGET NAME HOST_OS HOST_ARCH GCC CONFIG
|
| +
|
| + # NOTE: This will need to be updated if the NDK changes the names or moves
|
| + # the location of its prebuilt toolchains.
|
| + #
|
| + GCC=
|
| + HOST_OS=$(get_ndk_host_system)
|
| + HOST_ARCH=$(get_ndk_host_arch)
|
| + CONFIG=$(get_arch_gnu_config $ARCH)
|
| + GCC=$(get_ndk_toolchain_prebuilt \
|
| + "$NDK_DIR" "$ARCH" "$HOST_OS-$HOST_ARCH/bin/$CONFIG-gcc")
|
| + if [ -z "$GCC" -a "$HOST_ARCH" = "x86_64" ]; then
|
| + GCC=$(get_ndk_toolchain_prebuilt \
|
| + "$NDK_DIR" "$ARCH" "$HOST_OS-x86/bin/$CONFIG-gcc")
|
| + fi
|
| + if [ ! -f "$GCC" -a "$ARCH" = "x86" ]; then
|
| + # Special case, the x86 toolchain used to be incorrectly
|
| + # named i686-android-linux-gcc!
|
| + GCC=$(get_ndk_toolchain_prebuilt \
|
| + "$NDK_DIR" "$ARCH" "$HOST_OS-x86/bin/i686-android-linux-gcc")
|
| + fi
|
| + if [ -z "$GCC" ]; then
|
| + panic "Cannot find Android NDK toolchain for '$ARCH' architecture. \
|
| +Please verify your NDK installation!"
|
| + fi
|
| + echo "${GCC%%gcc}"
|
| +}
|
| +
|
| # $1: NDK install path
|
| # $2: target architecture.
|
| get_ndk_gdbserver () {
|
| @@ -433,6 +509,9 @@ get_ndk_gdbserver () {
|
| # issues when both binaries do not speak the same wire protocol.
|
| #
|
| if [ -z "$TOOLCHAIN" ]; then
|
| + ANDROID_TOOLCHAIN=$(get_ndk_toolchain_fullprefix \
|
| + "$ANDROID_NDK_ROOT" "$TARGET_ARCH")
|
| + ANDROID_TOOLCHAIN=$(dirname "$ANDROID_TOOLCHAIN")
|
| log "Auto-config: --toolchain=$ANDROID_TOOLCHAIN"
|
| else
|
| # Be flexible, allow one to specify either the install path or the bin
|
|
|