|
8 | 8 | # modules with npm. Also, don't forget to set the arch in npm config using
|
9 | 9 | # 'npm config set arch=<arch>'
|
10 | 10 |
|
| 11 | +if [ $# -ne 3 ]; then |
| 12 | + echo "$0 should have 3 parameters: ndk_path, target_arch and sdk_version" |
| 13 | + exit 1 |
| 14 | +fi |
| 15 | + |
| 16 | +NDK_PATH=$1 |
| 17 | +ARCH="$2" |
| 18 | +ANDROID_SDK_VERSION=$3 |
11 | 19 |
|
12 |
| -if [ -z "$2" ]; then |
13 |
| - ARCH=arm |
14 |
| -else |
15 |
| - ARCH="$2" |
| 20 | +if [ $ANDROID_SDK_VERSION -lt 23 ]; then |
| 21 | + echo "$ANDROID_SDK_VERSION should equal or later than 23(Android 6.0)" |
16 | 22 | fi
|
17 | 23 |
|
18 | 24 | CC_VER="4.9"
|
| 25 | + |
19 | 26 | case $ARCH in
|
20 | 27 | arm)
|
21 |
| - DEST_CPU="$ARCH" |
22 |
| - SUFFIX="$ARCH-linux-androideabi" |
23 |
| - TOOLCHAIN_NAME="$SUFFIX" |
| 28 | + DEST_CPU="arm" |
| 29 | + TOOLCHAIN_NAME="armv7-linux-androideabi" |
24 | 30 | ;;
|
25 | 31 | x86)
|
26 | 32 | DEST_CPU="ia32"
|
27 |
| - SUFFIX="i686-linux-android" |
28 |
| - TOOLCHAIN_NAME="$ARCH" |
| 33 | + TOOLCHAIN_NAME="i686-linux-android" |
29 | 34 | ;;
|
30 | 35 | x86_64)
|
31 |
| - DEST_CPU="ia32" |
32 |
| - SUFFIX="$ARCH-linux-android" |
33 |
| - TOOLCHAIN_NAME="$ARCH" |
| 36 | + DEST_CPU="x64" |
| 37 | + TOOLCHAIN_NAME="x86_64-linux-android" |
| 38 | + ARCH="x64" |
| 39 | + ;; |
| 40 | + arm64|aarch64) |
| 41 | + DEST_CPU="arm64" |
| 42 | + TOOLCHAIN_NAME="aarch64-linux-android" |
| 43 | + ARCH="arm64" |
34 | 44 | ;;
|
35 | 45 | *)
|
36 | 46 | echo "Unsupported architecture provided: $ARCH"
|
37 | 47 | exit 1
|
38 | 48 | ;;
|
39 | 49 | esac
|
40 | 50 |
|
41 |
| -NDK_PATH=$1 |
42 |
| -function make_toolchain { |
43 |
| - $NDK_PATH/build/tools/make-standalone-toolchain.sh \ |
44 |
| - --toolchain=$TOOLCHAIN_NAME-$CC_VER \ |
45 |
| - --arch=$ARCH \ |
46 |
| - --install-dir=$TOOLCHAIN \ |
47 |
| - --platform=android-21 |
48 |
| -} |
| 51 | +HOST_OS="linux" |
| 52 | +HOST_ARCH="x86_64" |
| 53 | +export CC_host=$(which gcc) |
| 54 | +export CXX_host=$(which g++) |
49 | 55 |
|
50 |
| -export TOOLCHAIN=$PWD/android-toolchain |
51 |
| -if [ -d "$TOOLCHAIN" ]; then |
52 |
| - read -r -p "NDK toolchain already exists. Replace it? [y/N]" response |
53 |
| - case "$response" in |
54 |
| - [Yy]) |
55 |
| - rm -rf "$TOOLCHAIN" |
56 |
| - make_toolchain |
57 |
| - esac |
58 |
| -else |
59 |
| - make_toolchain |
| 56 | +host_gcc_version=$($CC_host --version | grep gcc | awk '{print $NF}') |
| 57 | +major=$(echo $host_gcc_version | awk -F . '{print $1}') |
| 58 | +minor=$(echo $host_gcc_version | awk -F . '{print $2}') |
| 59 | +if [ -z $major ] || [ -z $minor ] || [ $major -lt 6 ] || [ $major -eq 6 -a $minor -lt 3 ]; then |
| 60 | + echo "host gcc $host_gcc_version is too old, need gcc 6.3.0" |
| 61 | + exit 1 |
60 | 62 | fi
|
| 63 | + |
| 64 | +SUFFIX="$TOOLCHAIN_NAME$ANDROID_SDK_VERSION" |
| 65 | +TOOLCHAIN=$NDK_PATH/toolchains/llvm/prebuilt/$HOST_OS-$HOST_ARCH |
| 66 | + |
61 | 67 | export PATH=$TOOLCHAIN/bin:$PATH
|
62 |
| -export AR=$TOOLCHAIN/bin/$SUFFIX-ar |
63 |
| -export CC=$TOOLCHAIN/bin/$SUFFIX-gcc |
64 |
| -export CXX=$TOOLCHAIN/bin/$SUFFIX-g++ |
65 |
| -export LINK=$TOOLCHAIN/bin/$SUFFIX-g++ |
| 68 | +export CC=$TOOLCHAIN/bin/$SUFFIX-clang |
| 69 | +export CXX=$TOOLCHAIN/bin/$SUFFIX-clang++ |
| 70 | + |
66 | 71 |
|
67 | 72 | GYP_DEFINES="target_arch=$ARCH"
|
68 | 73 | GYP_DEFINES+=" v8_target_arch=$ARCH"
|
69 | 74 | GYP_DEFINES+=" android_target_arch=$ARCH"
|
70 |
| -GYP_DEFINES+=" host_os=linux OS=android" |
| 75 | +GYP_DEFINES+=" host_os=$HOST_OS OS=android" |
71 | 76 | export GYP_DEFINES
|
72 | 77 |
|
73 | 78 | if [ -f "configure" ]; then
|
74 | 79 | ./configure \
|
75 | 80 | --dest-cpu=$DEST_CPU \
|
76 | 81 | --dest-os=android \
|
77 | 82 | --without-snapshot \
|
78 |
| - --openssl-no-asm |
| 83 | + --openssl-no-asm \ |
| 84 | + --cross-compiling |
79 | 85 | fi
|
0 commit comments