summaryrefslogtreecommitdiff
path: root/android-configure
diff options
context:
space:
mode:
authorforfun414 <forfun414@gmail.com>2020-01-26 20:29:10 +0800
committerAnna Henningsen <anna@addaleax.net>2020-03-11 16:50:52 +0100
commit50317c38a4511914e5eb69d6f05f290087887cf7 (patch)
treedcdf4a8a39d1dacf3d1eccf57619eac6f2ca885c /android-configure
parentb6da55f0fda60433f8d05539ee8665f66a35ee86 (diff)
downloadios-node-v8-50317c38a4511914e5eb69d6f05f290087887cf7.tar.gz
ios-node-v8-50317c38a4511914e5eb69d6f05f290087887cf7.tar.bz2
ios-node-v8-50317c38a4511914e5eb69d6f05f290087887cf7.zip
build: support android build on ndk version equal or above 23
change scripts and sources for android build, don't need standalone toolchain after ndk 19, and use clang as default android target compiler. PR-URL: https://github.com/nodejs/node/pull/31521 Reviewed-By: Christian Clauss <cclauss@me.com>
Diffstat (limited to 'android-configure')
-rwxr-xr-xandroid-configure78
1 files changed, 42 insertions, 36 deletions
diff --git a/android-configure b/android-configure
index 59f0a40c1a..a7cb2b9c8b 100755
--- a/android-configure
+++ b/android-configure
@@ -8,29 +8,39 @@
# modules with npm. Also, don't forget to set the arch in npm config using
# 'npm config set arch=<arch>'
+if [ $# -ne 3 ]; then
+ echo "$0 should have 3 parameters: ndk_path, target_arch and sdk_version"
+ exit 1
+fi
+
+NDK_PATH=$1
+ARCH="$2"
+ANDROID_SDK_VERSION=$3
-if [ -z "$2" ]; then
- ARCH=arm
-else
- ARCH="$2"
+if [ $ANDROID_SDK_VERSION -lt 23 ]; then
+ echo "$ANDROID_SDK_VERSION should equal or later than 23(Android 6.0)"
fi
CC_VER="4.9"
+
case $ARCH in
arm)
- DEST_CPU="$ARCH"
- SUFFIX="$ARCH-linux-androideabi"
- TOOLCHAIN_NAME="$SUFFIX"
+ DEST_CPU="arm"
+ TOOLCHAIN_NAME="armv7-linux-androideabi"
;;
x86)
DEST_CPU="ia32"
- SUFFIX="i686-linux-android"
- TOOLCHAIN_NAME="$ARCH"
+ TOOLCHAIN_NAME="i686-linux-android"
;;
x86_64)
- DEST_CPU="ia32"
- SUFFIX="$ARCH-linux-android"
- TOOLCHAIN_NAME="$ARCH"
+ DEST_CPU="x64"
+ TOOLCHAIN_NAME="x86_64-linux-android"
+ ARCH="x64"
+ ;;
+ arm64|aarch64)
+ DEST_CPU="arm64"
+ TOOLCHAIN_NAME="aarch64-linux-android"
+ ARCH="arm64"
;;
*)
echo "Unsupported architecture provided: $ARCH"
@@ -38,36 +48,31 @@ case $ARCH in
;;
esac
-NDK_PATH=$1
-function make_toolchain {
- $NDK_PATH/build/tools/make-standalone-toolchain.sh \
- --toolchain=$TOOLCHAIN_NAME-$CC_VER \
- --arch=$ARCH \
- --install-dir=$TOOLCHAIN \
- --platform=android-21
-}
+HOST_OS="linux"
+HOST_ARCH="x86_64"
+export CC_host=$(which gcc)
+export CXX_host=$(which g++)
-export TOOLCHAIN=$PWD/android-toolchain
-if [ -d "$TOOLCHAIN" ]; then
- read -r -p "NDK toolchain already exists. Replace it? [y/N]" response
- case "$response" in
- [Yy])
- rm -rf "$TOOLCHAIN"
- make_toolchain
- esac
-else
- make_toolchain
+host_gcc_version=$($CC_host --version | grep gcc | awk '{print $NF}')
+major=$(echo $host_gcc_version | awk -F . '{print $1}')
+minor=$(echo $host_gcc_version | awk -F . '{print $2}')
+if [ -z $major ] || [ -z $minor ] || [ $major -lt 6 ] || [ $major -eq 6 -a $minor -lt 3 ]; then
+ echo "host gcc $host_gcc_version is too old, need gcc 6.3.0"
+ exit 1
fi
+
+SUFFIX="$TOOLCHAIN_NAME$ANDROID_SDK_VERSION"
+TOOLCHAIN=$NDK_PATH/toolchains/llvm/prebuilt/$HOST_OS-$HOST_ARCH
+
export PATH=$TOOLCHAIN/bin:$PATH
-export AR=$TOOLCHAIN/bin/$SUFFIX-ar
-export CC=$TOOLCHAIN/bin/$SUFFIX-gcc
-export CXX=$TOOLCHAIN/bin/$SUFFIX-g++
-export LINK=$TOOLCHAIN/bin/$SUFFIX-g++
+export CC=$TOOLCHAIN/bin/$SUFFIX-clang
+export CXX=$TOOLCHAIN/bin/$SUFFIX-clang++
+
GYP_DEFINES="target_arch=$ARCH"
GYP_DEFINES+=" v8_target_arch=$ARCH"
GYP_DEFINES+=" android_target_arch=$ARCH"
-GYP_DEFINES+=" host_os=linux OS=android"
+GYP_DEFINES+=" host_os=$HOST_OS OS=android"
export GYP_DEFINES
if [ -f "configure" ]; then
@@ -75,5 +80,6 @@ if [ -f "configure" ]; then
--dest-cpu=$DEST_CPU \
--dest-os=android \
--without-snapshot \
- --openssl-no-asm
+ --openssl-no-asm \
+ --cross-compiling
fi