Linus Mårtensson | 5e4e8ec | 2013-05-08 12:10:07 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
Robert Chiras | a4b8000 | 2016-04-22 15:35:23 | [diff] [blame] | 3 | # 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 Chiras | 271201f | 2016-03-03 10:02:44 | [diff] [blame] | 12 | if [ -z "$2" ]; then |
| 13 | ARCH=arm |
| 14 | else |
| 15 | ARCH="$2" |
| 16 | fi |
| 17 | |
| 18 | CC_VER="4.9" |
| 19 | case $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 | ;; |
| 39 | esac |
| 40 | |
TheBeastOfCaerbannog | 757c90e | 2017-03-21 09:02:26 | [diff] [blame] | 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 | } |
| 49 | |
Linus Mårtensson | 5e4e8ec | 2013-05-08 12:10:07 | [diff] [blame] | 50 | export TOOLCHAIN=$PWD/android-toolchain |
TheBeastOfCaerbannog | 757c90e | 2017-03-21 09:02:26 | [diff] [blame] | 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 |
| 60 | fi |
Linus Mårtensson | 5e4e8ec | 2013-05-08 12:10:07 | [diff] [blame] | 61 | export PATH=$TOOLCHAIN/bin:$PATH |
Robert Chiras | 271201f | 2016-03-03 10:02:44 | [diff] [blame] | 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++ |
Linus Mårtensson | 5e4e8ec | 2013-05-08 12:10:07 | [diff] [blame] | 66 | |
Robert Chiras | a4b8000 | 2016-04-22 15:35:23 | [diff] [blame] | 67 | GYP_DEFINES="target_arch=$ARCH" |
| 68 | GYP_DEFINES+=" v8_target_arch=$ARCH" |
| 69 | GYP_DEFINES+=" android_target_arch=$ARCH" |
| 70 | GYP_DEFINES+=" host_os=linux OS=android" |
| 71 | export GYP_DEFINES |
| 72 | |
| 73 | if [ -f "configure" ]; then |
| 74 | ./configure \ |
| 75 | --dest-cpu=$DEST_CPU \ |
| 76 | --dest-os=android \ |
| 77 | --without-snapshot \ |
| 78 | --openssl-no-asm |
| 79 | fi |