|
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