summaryrefslogtreecommitdiff
path: root/android-configure
diff options
context:
space:
mode:
authorBuShe Pie <bushe.cn@icloud.com>2022-09-12 16:10:29 +0800
committerGitHub <noreply@github.com>2022-09-12 08:10:29 +0000
commitee9aac1f1c4d96ec0c373f3755d9aa1a48788153 (patch)
treeaa66ef2567cd394383f5bb1a13157830bbd3265d /android-configure
parent7dd2f41c7385538a1d7de531490afe2acbb0daf6 (diff)
downloadnode-new-ee9aac1f1c4d96ec0c373f3755d9aa1a48788153.tar.gz
build: rewritten the Android build system
Completely rewritten the Android build system using Python Co-Authored-By: 东灯 <43312495+Lampese@users.noreply.github.com> Co-Authored-By: Feng Yu <F3n67u@outlook.com> PR-URL: https://github.com/nodejs/node/pull/44207 Refs: https://github.com/nodejs/node/issues/36287 Reviewed-By: Feng Yu <F3n67u@outlook.com> Reviewed-By: Christian Clauss <cclauss@me.com>
Diffstat (limited to 'android-configure')
-rwxr-xr-xandroid-configure118
1 files changed, 35 insertions, 83 deletions
diff --git a/android-configure b/android-configure
index 6200f35200..8bab2e0b90 100755
--- a/android-configure
+++ b/android-configure
@@ -1,83 +1,35 @@
-#!/bin/bash
-
-# In order to cross-compile node for Android using NDK, run:
-# source android-configure <path_to_ndk> [arch]
-#
-# By running android-configure with source, will allow environment variables to
-# be persistent in current session. This is useful for installing native node
-# 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"
- return 1
-fi
-
-NDK_PATH=$1
-ARCH="$2"
-ANDROID_SDK_VERSION=$3
-
-if [ $ANDROID_SDK_VERSION -lt 24 ]; then
- echo "$ANDROID_SDK_VERSION should equal or later than 24 (Android 7.0)"
-fi
-
-case $ARCH in
- arm)
- DEST_CPU="arm"
- TOOLCHAIN_NAME="armv7a-linux-androideabi"
- ;;
- x86)
- DEST_CPU="ia32"
- TOOLCHAIN_NAME="i686-linux-android"
- ;;
- x86_64)
- 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"
- return 1
- ;;
-esac
-
-HOST_OS="linux"
-HOST_ARCH="x86_64"
-export CC_host=$(command -v gcc)
-export CXX_host=$(command -v g++)
-
-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 ] && [ $minor -lt 3 ] ); then
- echo "host gcc $host_gcc_version is too old, need gcc 6.3.0"
- return 1
-fi
-
-SUFFIX="$TOOLCHAIN_NAME$ANDROID_SDK_VERSION"
-TOOLCHAIN=$NDK_PATH/toolchains/llvm/prebuilt/$HOST_OS-$HOST_ARCH
-
-export PATH=$TOOLCHAIN/bin:$PATH
-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=$HOST_OS OS=android"
-export GYP_DEFINES
-
-if [ -f "configure" ]; then
- ./configure \
- --dest-cpu=$DEST_CPU \
- --dest-os=android \
- --without-snapshot \
- --openssl-no-asm \
- --cross-compiling
-fi
+#!/bin/sh
+
+# Locate an acceptable Python interpreter and then re-execute the script.
+# Note that the mix of single and double quotes is intentional,
+# as is the fact that the ] goes on a new line.
+_=[ 'exec' '/bin/sh' '-c' '''
+command -v python3.10 >/dev/null && exec python3.10 "$0" "$@"
+command -v python3.9 >/dev/null && exec python3.9 "$0" "$@"
+command -v python3.8 >/dev/null && exec python3.8 "$0" "$@"
+command -v python3.7 >/dev/null && exec python3.7 "$0" "$@"
+command -v python3.6 >/dev/null && exec python3.6 "$0" "$@"
+command -v python3 >/dev/null && exec python3 "$0" "$@"
+exec python "$0" "$@"
+''' "$0" "$@"
+]
+del _
+
+import sys
+try:
+ from shutil import which
+except ImportError:
+ from distutils.spawn import find_executable as which
+
+print('Node.js android configure: Found Python {}.{}.{}...'.format(*sys.version_info))
+acceptable_pythons = ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6))
+if sys.version_info[:2] in acceptable_pythons:
+ import android_configure
+else:
+ python_cmds = ['python{}.{}'.format(*vers) for vers in acceptable_pythons]
+ sys.stderr.write('Please use {}.\n'.format(' or '.join(python_cmds)))
+ for python_cmd in python_cmds:
+ python_cmd_path = which(python_cmd)
+ if python_cmd_path and 'pyenv/shims' not in python_cmd_path:
+ sys.stderr.write('\t{} {}\n'.format(python_cmd_path, ' '.join(sys.argv[:1])))
+ sys.exit(1)