blob: 59f0a40c1ac214f174fdad339ea3d79ab57b0278 [file] [log] [blame]
Linus Mårtensson5e4e8ec2013-05-08 12:10:071#!/bin/bash
2
Robert Chirasa4b80002016-04-22 15:35:233# In order to cross-compile node for Android using NDK, run:
4# source android-configure <path_to_ndk> [arch]
5#
6# By running android-configure with source, will allow environment variables to
7# be persistent in current session. This is useful for installing native node
8# modules with npm. Also, don't forget to set the arch in npm config using
9# 'npm config set arch=<arch>'
10
11
Robert Chiras271201f2016-03-03 10:02:4412if [ -z "$2" ]; then
13 ARCH=arm
14else
15 ARCH="$2"
16fi
17
18CC_VER="4.9"
19case $ARCH in
20 arm)
21 DEST_CPU="$ARCH"
22 SUFFIX="$ARCH-linux-androideabi"
23 TOOLCHAIN_NAME="$SUFFIX"
24 ;;
25 x86)
26 DEST_CPU="ia32"
27 SUFFIX="i686-linux-android"
28 TOOLCHAIN_NAME="$ARCH"
29 ;;
30 x86_64)
31 DEST_CPU="ia32"
32 SUFFIX="$ARCH-linux-android"
33 TOOLCHAIN_NAME="$ARCH"
34 ;;
35 *)
36 echo "Unsupported architecture provided: $ARCH"
37 exit 1
38 ;;
39esac
40
TheBeastOfCaerbannog757c90e2017-03-21 09:02:2641NDK_PATH=$1
42function 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}
49
Linus Mårtensson5e4e8ec2013-05-08 12:10:0750export TOOLCHAIN=$PWD/android-toolchain
TheBeastOfCaerbannog757c90e2017-03-21 09:02:2651if [ -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
58else
59 make_toolchain
60fi
Linus Mårtensson5e4e8ec2013-05-08 12:10:0761export PATH=$TOOLCHAIN/bin:$PATH
Robert Chiras271201f2016-03-03 10:02:4462export AR=$TOOLCHAIN/bin/$SUFFIX-ar
63export CC=$TOOLCHAIN/bin/$SUFFIX-gcc
64export CXX=$TOOLCHAIN/bin/$SUFFIX-g++
65export LINK=$TOOLCHAIN/bin/$SUFFIX-g++
Linus Mårtensson5e4e8ec2013-05-08 12:10:0766
Robert Chirasa4b80002016-04-22 15:35:2367GYP_DEFINES="target_arch=$ARCH"
68GYP_DEFINES+=" v8_target_arch=$ARCH"
69GYP_DEFINES+=" android_target_arch=$ARCH"
70GYP_DEFINES+=" host_os=linux OS=android"
71export GYP_DEFINES
72
73if [ -f "configure" ]; then
74 ./configure \
75 --dest-cpu=$DEST_CPU \
76 --dest-os=android \
77 --without-snapshot \
78 --openssl-no-asm
79fi