#!/bin/bash # In order to cross-compile node for Android using NDK, run: # source android-configure [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=' if [ -z "$2" ]; then ARCH=arm else ARCH="$2" fi CC_VER="4.9" case $ARCH in arm) DEST_CPU="$ARCH" SUFFIX="$ARCH-linux-androideabi" TOOLCHAIN_NAME="$SUFFIX" ;; x86) DEST_CPU="ia32" SUFFIX="i686-linux-android" TOOLCHAIN_NAME="$ARCH" ;; x86_64) DEST_CPU="ia32" SUFFIX="$ARCH-linux-android" TOOLCHAIN_NAME="$ARCH" ;; *) echo "Unsupported architecture provided: $ARCH" exit 1 ;; esac NDK_PATH=$1 function make_toolchain { $NDK_PATH/build/tools/make-standalone-toolchain.sh \ --toolchain=$TOOLCHAIN_NAME-$CC_VER \ --arch=$ARCH \ --install-dir=$TOOLCHAIN \ --platform=android-21 } export TOOLCHAIN=$PWD/android-toolchain if [ -d "$TOOLCHAIN" ]; then read -r -p "NDK toolchain already exists. Replace it? [y/N]" response case "$response" in [Yy]) rm -rf "$TOOLCHAIN" make_toolchain esac else make_toolchain fi export PATH=$TOOLCHAIN/bin:$PATH export AR=$TOOLCHAIN/bin/$SUFFIX-ar export CC=$TOOLCHAIN/bin/$SUFFIX-gcc export CXX=$TOOLCHAIN/bin/$SUFFIX-g++ export LINK=$TOOLCHAIN/bin/$SUFFIX-g++ GYP_DEFINES="target_arch=$ARCH" GYP_DEFINES+=" v8_target_arch=$ARCH" GYP_DEFINES+=" android_target_arch=$ARCH" GYP_DEFINES+=" host_os=linux OS=android" export GYP_DEFINES if [ -f "configure" ]; then ./configure \ --dest-cpu=$DEST_CPU \ --dest-os=android \ --without-snapshot \ --openssl-no-asm fi