radare2/sys/android-shell.sh

130 lines
2.5 KiB
Bash
Raw Normal View History

#!/bin/sh
# android shell
if [ -n "$1" ]; then
NDK_ARCH="$1"
shift
fi
2015-01-24 22:17:55 +00:00
export ANDROID=1
2019-08-01 02:39:40 +00:00
ARCH=${NDK_ARCH}
case "${NDK_ARCH}" in
mips64)
2015-04-12 23:16:01 +00:00
export NDK_ARCH
AR=mips64el-linux-android-ar
RANLIB=mips64el-linux-android-ranlib
;;
mips)
2015-04-12 23:16:01 +00:00
export NDK_ARCH
AR=mipsel-linux-android-ar
RANLIB=mipsel-linux-android-ranlib
;;
x64)
NDK_ARCH=x86_64
export NDK_ARCH
;;
x86|x86_64)
export NDK_ARCH
;;
aarch64|arm64)
2019-08-01 02:39:40 +00:00
NDK_ARCH=aarch64
2014-11-10 00:09:38 +00:00
export NDK_ARCH
AR=aarch64-linux-android-ar
2019-08-01 02:39:40 +00:00
ARCH=arm64
2014-11-10 00:09:38 +00:00
RANLIB=aarch64-linux-android-ranlib
;;
arm)
export NDK_ARCH
AR=arm-linux-androideabi-ar
RANLIB=arm-linux-androideabi-ranlib
;;
2015-01-24 22:17:55 +00:00
local)
export ANDROID=1
;;
*)
echo "Usage: $0 [arm64|arm|mips|mips64|x86|x64]"
exit 1
;;
esac
2012-03-30 11:33:38 +00:00
LANG=C
export LANG
ROOT=`dirname $0`
OS=`uname|tr 'A-Z' 'a-z'`
2012-03-31 01:54:44 +00:00
[ "${OS}" = macosx ] && OS=darwin
2017-03-10 00:12:23 +00:00
if [ ! -x /work ]; then
echo "Building android locally with NDK instead of dockcross..."
# TODO: autodetect or gtfo
if [ -f ~/.r2androidrc ]; then
. ~/.r2androidrc
echo "Using data from ${HOME}/.r2androidrc.."
else
#[ -z "${SDK}" ] && SDK="${HOME}/Downloads/android-sdk-${OS}"
if [ -z "${NDK}" ]; then
# Checking if Android NDK is installed with macOS's brew
D=/usr/local/Caskroom/android-ndk/
if [ -d "${D}" ]; then
for a in $(cd "$D" && ls) ; do
N="$D/$a/android-ndk-r$a"
if [ -f "$N/README.md" ]; then
NDK="$N"
break
fi
done
fi
fi
if [ -z "${NDK}" ]; then
if [ "`uname`" = "Darwin" ]; then
NDK="${HOME}/Library/Android/sdk/ndk-bundle/"
else
NDK="${HOME}/Downloads/android-ndk-r21d"
fi
fi
[ -z "${NDK}" ] && NDK="${HOME}/Downloads/android-ndk-r21d"
fi
2017-03-10 00:12:23 +00:00
fi
echo ROOT=$ROOT
echo NDK="$NDK"
echo NDK_ARCH=$NDK_ARCH
if [ -x /tmp/ndk/bin/ndk-gcc ]; then
echo "NDK toolchain already initialized."
else
echo "Building the standalone NDK toolchain..."
${NDK}/build/tools/make_standalone_toolchain.py --arch=${ARCH} --install-dir=/tmp/ndk/ --api=28 --force
(
cd /tmp/ndk/bin/ && \
ln -fs clang ndk-gcc && \
ln -fs clang++ ndk-g++
)
fi
if [ "${BUILD}" != 0 ]; then
if [ ! -d "${NDK}" ]; then
2017-01-31 21:13:32 +00:00
echo "Cannot find Android NDK ${NDK}" >&2
echo "echo NDK=/path/to/ndk > ~/.r2androidrc" >&2
exit 1
fi
PATH="/tmp/ndk/bin:$PATH"
export PATH
export CFLAGS
export NDK
export NDK_ARCH
[ -z "${SHELL}" ] && SHELL=sh
SHELL=sh
CC=ndk-gcc
2018-04-10 22:22:46 +00:00
CXX=ndk-g++
PS1="[r2-android-${NDK_ARCH}]> "
export CC
2018-04-10 22:22:46 +00:00
export CXX
export PS1
export AR
export RANLIB
A=$@
if [ -n "$A" ]; then
${SHELL} -c "$A"
else
${SHELL}
fi
fi