| #! /bin/bash |
| # Build Jami daemon for architecture specified by ANDROID_ABI |
| set -e |
| |
| CURRENTDIR=$(pwd) |
| |
| if [ -z "$ANDROID_NDK" -o -z "$ANDROID_SDK" ]; then |
| echo "You must define ANDROID_NDK, ANDROID_SDK and ANDROID_ABI before starting." |
| echo "They must point to your NDK and SDK directories." |
| exit 1 |
| fi |
| if [ -z "$ANDROID_ABI" ]; then |
| echo "Please set ANDROID_ABI to your architecture: armeabi-v7a, x86." |
| exit 1 |
| fi |
| |
| platform=$(echo "`uname`" | tr '[:upper:]' '[:lower:]') |
| arch=`uname -m` |
| |
| # Set up ABI variables |
| if [ ${ANDROID_ABI} = "x86" ] ; then |
| TARGET="i686-linux-android" |
| PJ_TARGET="i686-pc-linux-android" |
| PLATFORM_SHORT_ARCH="x86" |
| elif [ ${ANDROID_ABI} = "x86_64" ] ; then |
| TARGET="x86_64-linux-android" |
| PJ_TARGET="x86_64-pc-linux-android" |
| PLATFORM_SHORT_ARCH="x86_64" |
| elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then |
| TARGET="aarch64-linux-android" |
| PJ_TARGET="aarch64-unknown-linux-android" |
| PLATFORM_SHORT_ARCH="arm64" |
| elif [ ${ANDROID_ABI} = "armeabi-v7a" ] ; then |
| TARGET_CC="armv7a-linux-androideabi" |
| TARGET="arm-linux-androideabi" |
| PJ_TARGET="arm-unknown-linux-androideabi" |
| PLATFORM_SHORT_ARCH="arm" |
| else |
| echo "ABI not supported" |
| exit 1 |
| fi |
| |
| TARGET_CC=${TARGET_CC:-$TARGET} |
| |
| export API=21 |
| export ANDROID_API=android-$API |
| export ANDROID_TOOLCHAIN="${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64" |
| export TARGET |
| |
| # Add the NDK toolchain to the PATH, needed both for contribs and for building |
| # stub libraries |
| NDK_TOOLCHAIN_PATH="${ANDROID_TOOLCHAIN}/bin" |
| export PATH=${NDK_TOOLCHAIN_PATH}:${PATH} |
| export SYSROOT=$ANDROID_TOOLCHAIN/sysroot |
| |
| export CROSS_COMPILE="${NDK_TOOLCHAIN_PATH}/${TARGET_TUPLE}-" |
| export SYSROOT=$ANDROID_TOOLCHAIN/sysroot |
| |
| if [ -z "$DAEMON_DIR" ]; then |
| DAEMON_DIR="$(pwd)/../daemon" |
| echo "DAEMON_DIR not provided trying to find it in $DAEMON_DIR" |
| fi |
| |
| if [ ! -d "$DAEMON_DIR" ]; then |
| echo 'Daemon not found.' |
| echo 'If you cloned the daemon in a custom location override' \ |
| 'DAEMON_DIR to point to it' |
| echo "You can also use our meta repo which contains both: |
| https://review.jami.net/#/admin/projects/ring-project" |
| exit 1 |
| fi |
| export DAEMON_DIR |
| |
| # Make in // |
| MAKEFLAGS= |
| if which nproc >/dev/null; then |
| MAKEFLAGS=-j`nproc` |
| fi |
| |
| # Build buildsystem tools |
| cd $DAEMON_DIR/extras/tools |
| export PATH=`pwd`/build/bin:$PATH |
| echo "Building tools" |
| ./bootstrap |
| make $MAKEFLAGS |
| make .pkg-config |
| make .gas |
| |
| # Setup cross-compilation build environemnt |
| export AR=$NDK_TOOLCHAIN_PATH/llvm-ar |
| export AS="$NDK_TOOLCHAIN_PATH/$TARGET_CC$API-clang -c" |
| export CC=$NDK_TOOLCHAIN_PATH/$TARGET_CC$API-clang |
| export CXX=$NDK_TOOLCHAIN_PATH/$TARGET_CC$API-clang++ |
| export LD=$NDK_TOOLCHAIN_PATH/ld |
| export RANLIB=$NDK_TOOLCHAIN_PATH/llvm-ranlib |
| export STRIP=$NDK_TOOLCHAIN_PATH/llvm-strip |
| |
| FLAGS_COMMON="-fPIC" |
| EXTRA_CFLAGS="${EXTRA_CFLAGS} ${FLAGS_COMMON}" |
| EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} ${FLAGS_COMMON}" |
| EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -llog" |
| |
| ############ |
| # Contribs # |
| ############ |
| echo "Building the contribs" |
| CONTRIB_DIR=${DAEMON_DIR}/contrib/native-${TARGET} |
| CONTRIB_SYSROOT=${DAEMON_DIR}/contrib/${TARGET} |
| mkdir -p ${CONTRIB_DIR} |
| mkdir -p ${CONTRIB_SYSROOT}/lib/pkgconfig |
| |
| echo "copying files" |
| cp -r ${CURRENTDIR}/freetype ${DAEMON_DIR}/contrib/src |
| |
| cd ${CONTRIB_DIR} |
| |
| ../bootstrap --host=${TARGET} --enable-freetype --enable-x264 --enable-ffmpeg \ |
| --disable-webrtc-audio-processing --disable-argon2 \ |
| --disable-asio --enable-fmt --disable-gcrypt --disable-gmp \ |
| --disable-gnutls --disable-gpg-error --disable-gsm \ |
| --disable-http_parser --disable-jack --disable-jsoncpp \ |
| --disable-libarchive --disable-libressl --enable-msgpack \ |
| --disable-natpmp --disable-nettle --enable-opencv --enable-opendht \ |
| --disable-pjproject --disable-portaudio --disable-restinio \ |
| --disable-secp256k1 --disable-speexdsp --disable-upnp \ |
| --disable-uuid --disable-yaml-cpp |
| |
| make list |
| make fetch |
| export PATH="$PATH:$CONTRIB_SYSROOT/bin" |
| make $MAKEFLAGS |
| |