Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorforfun414 <forfun414@gmail.com>2020-01-26 15:29:10 +0300
committerAnna Henningsen <anna@addaleax.net>2020-03-11 18:50:52 +0300
commit50317c38a4511914e5eb69d6f05f290087887cf7 (patch)
treedcdf4a8a39d1dacf3d1eccf57619eac6f2ca885c /android-configure
parentb6da55f0fda60433f8d05539ee8665f66a35ee86 (diff)
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 59f0a40c1ac..a7cb2b9c8b4 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