mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
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>
This commit is contained in:
3 files changed
+134
-80
No files matched your search
+32
-80
@@ -1,83 +1,35 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
# 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>'
|
||||
# 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 _
|
||||
|
||||
if [ $# -ne 3 ]; then
|
||||
echo "$0 should have 3 parameters: ndk_path, target_arch and sdk_version"
|
||||
return 1
|
||||
fi
|
||||
import sys
|
||||
try:
|
||||
from shutil import which
|
||||
except ImportError:
|
||||
from distutils.spawn import find_executable as which
|
||||
|
||||
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
|
||||
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)
|
||||
Reference in new issue
Block a user