-
libthreadutil is a library that was generated while building libupnp version 1.6.25. This library isn't generated anymore for libupnp's new version 1.8.4. It is instead part of the API internally. Therefore linking the library isn't required anymore. Change-Id: I6b641b6a06d65fc73b9fdde36b9ab749d8c7c886 Gitlab: #96
libthreadutil is a library that was generated while building libupnp version 1.6.25. This library isn't generated anymore for libupnp's new version 1.8.4. It is instead part of the API internally. Therefore linking the library isn't required anymore. Change-Id: I6b641b6a06d65fc73b9fdde36b9ab749d8c7c886 Gitlab: #96
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
build-daemon.sh 8.05 KiB
#! /bin/bash
# Build Ring daemon for architecture specified by ANDROID_ABI
#for OSX/BSD
realpath() {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
set -e
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
ANDROID_TOPLEVEL_DIR="`pwd`"
ANDROID_APP_DIR="$(pwd)/ring-android"
HAVE_ARM=0
HAVE_X86=0
HAVE_MIPS=0
HAVE_64=0
# Set up ABI variables
if [ ${ANDROID_ABI} = "x86" ] ; then
TARGET_TUPLE="i686-linux-android"
PJ_TARGET_TUPLE="i686-pc-linux-android"
PATH_HOST="x86"
HAVE_X86=1
PLATFORM_SHORT_ARCH="x86"
elif [ ${ANDROID_ABI} = "x86_64" ] ; then
TARGET_TUPLE="x86_64-linux-android"
PJ_TARGET_TUPLE="x86_64-pc-linux-android"
PATH_HOST="x86_64"
HAVE_X86=1
HAVE_64=1
PLATFORM_SHORT_ARCH="x86_64"
elif [ ${ANDROID_ABI} = "mips" ] ; then
TARGET_TUPLE="mipsel-linux-android"
PJ_TARGET_TUPLE="mips-unknown-linux-androideabi"
PATH_HOST=$TARGET_TUPLE
HAVE_MIPS=1
PLATFORM_SHORT_ARCH="mips"
elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then
TARGET_TUPLE="aarch64-linux-android"
PJ_TARGET_TUPLE="aarch64-unknown-linux-android"
PATH_HOST=$TARGET_TUPLE
HAVE_ARM=1
HAVE_64=1
PLATFORM_SHORT_ARCH="arm64"
else
TARGET_TUPLE="arm-linux-androideabi"
PJ_TARGET_TUPLE="arm-unknown-linux-androideabi"
PATH_HOST=$TARGET_TUPLE
HAVE_ARM=1
PLATFORM_SHORT_ARCH="arm"
fi
if [ "${HAVE_64}" = 1 ];then
LIBDIR=lib64
else
LIBDIR=lib
fi
ANDROID_API_VERS=21
ANDROID_API=android-$ANDROID_API_VERS
export ANDROID_TOOLCHAIN="`pwd`/android-toolchain-$ANDROID_API_VERS-$PLATFORM_SHORT_ARCH"
if [ ! -d "$ANDROID_TOOLCHAIN" ]; then
$ANDROID_NDK/build/tools/make_standalone_toolchain.py \
--arch=$PLATFORM_SHORT_ARCH \
--api $ANDROID_API_VERS \
--stl libc++ \
--install-dir=$ANDROID_TOOLCHAIN
fi
GCCVER=clang
CXXSTL="/"${GCCVER}
export GCCVER
export CXXSTL
export ANDROID_API
export TARGET_TUPLE
export PATH_HOST
export HAVE_ARM
export HAVE_X86
export HAVE_MIPS
export HAVE_64
export PLATFORM_SHORT_ARCH
# Add the NDK toolchain to the PATH, needed both for contribs and for building
# stub libraries
NDK_TOOLCHAIN_PATH=`echo ${ANDROID_TOOLCHAIN}/bin`
export NDK_TOOLCHAIN_PATH=${NDK_TOOLCHAIN_PATH}
export PATH=${NDK_TOOLCHAIN_PATH}:${PATH}
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://gerrit-ring.savoirfairelinux.com/#/admin/projects/ring-project"
exit 1
fi
# Setup LDFLAGS
if [ ${ANDROID_ABI} = "armeabi-v7a" ] ; then
EXTRA_CFLAGS="${EXTRA_CFLAGS} -march=armv7-a -mthumb -mfpu=vfpv3-d16"
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -march=armv7-a -mthumb -mfpu=vfpv3-d16"
elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_TOOLCHAIN}/sysroot/usr/lib -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/lib"
fi
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/${LIBDIR}/${ANDROID_ABI} -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/${LIBDIR}"
# Make in //
UNAMES=$(uname -s)
MAKEFLAGS=
if which nproc >/dev/null
then
MAKEFLAGS=-j`nproc`
elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/null
then
MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count`
fi
# Build buildsystem tools
cd $DAEMON_DIR/extras/tools
export PATH=`pwd`/extras/tools/build/bin:$PATH
echo "Building tools"
./bootstrap
make $MAKEFLAGS
make .pkg-config
make .gas
JNIDIR=$DAEMON_DIR/bin/jni
PACKAGEDIR=$ANDROID_APP_DIR/libringclient/src/main/java/cx/ring/daemon
#Build JNI interface
cd $JNIDIR
PACKAGEDIR=$PACKAGEDIR $JNIDIR/make-swig.sh
############
# Contribs #
############
cd $DAEMON_DIR
echo "Building the contribs"
mkdir -p contrib/native-${TARGET_TUPLE}
CROSS_COMPILE=${NDK_TOOLCHAIN_PATH}/${TARGET_TUPLE}-
export CROSS_COMPILE="${CROSS_COMPILE}"
mkdir -p contrib/${TARGET_TUPLE}/lib/pkgconfig
cd $DAEMON_DIR/contrib/native-${TARGET_TUPLE}
../bootstrap --host=${TARGET_TUPLE} --disable-libav --enable-ffmpeg --disable-speexdsp
# Always strip symbols for libring.so remove it if you want to debug the daemon
STRIP_ARG="-s "
EXTRA_CFLAGS="${EXTRA_CFLAGS} -DNDEBUG -fPIC -fno-integrated-as"
EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -DNDEBUG -fPIC"
EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${SYSROOT}/usr/${LIBDIR}"
if [ "${RELEASE}" -eq 1 ]; then
echo "Daemon in release mode."
OPTS=""
else
echo "Daemon in debug mode."
OPTS="--enable-debug"
fi
export SYSROOT=$ANDROID_TOOLCHAIN/sysroot
echo "EXTRA_CFLAGS= ${EXTRA_CFLAGS}" >> config.mak
echo "EXTRA_CXXFLAGS= ${EXTRA_CXXFLAGS}" >> config.mak
echo "EXTRA_LDFLAGS= ${EXTRA_LDFLAGS}" >> config.mak
export RING_EXTRA_CFLAGS="${EXTRA_CFLAGS}"
export RING_EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS}"
export RING_EXTRA_LDFLAGS="${EXTRA_LDFLAGS}"
make list
make fetch
export PATH="$PATH:$PWD/../$TARGET_TUPLE/bin"
make $MAKEFLAGS
############
# Make Ring #
############
cd $DAEMON_DIR
RING_SRC_DIR="${DAEMON_DIR}"
RING_BUILD_DIR="`realpath build-android-${TARGET_TUPLE}`"
export RING_SRC_DIR="${RING_SRC_DIR}"
export RING_BUILD_DIR="${RING_BUILD_DIR}"
mkdir -p build-android-${TARGET_TUPLE}
cd ${ANDROID_APP_DIR}
if [ ! -f config.h ]; then
echo "Bootstraping"
cd ${DAEMON_DIR}
./autogen.sh
cd "${DAEMON_DIR}/build-android-${TARGET_TUPLE}"
echo "Configuring with ${OPTS}"
CFLAGS="${EXTRA_CFLAGS}" \
CXXFLAGS="${EXTRA_CXXFLAGS}" \
LDFLAGS="${EXTRA_LDFLAGS}" \
${ANDROID_TOPLEVEL_DIR}/configure.sh ${OPTS}
fi
if [ ${ANDROID_API} = "android-21" ] ; then
# android-21 has empty sys/shm.h headers that triggers shm detection but it
# doesn't have any shm functions and/or symbols. */
export ac_cv_header_sys_shm_h=no
fi
if [ ${ANDROID_ABI} = "x86" -a ${ANDROID_API} != "android-21" ] ; then
# NDK x86 libm.so has nanf symbol but no nanf definition, we don't known if
# intel devices has nanf. Assume they don't have it.
export ac_cv_lib_m_nanf=no
fi
echo "Building dring ${MAKEFLAGS}"
V=99 make $MAKEFLAGS
######################
# Building JNI library
######################
cd ${ANDROID_TOPLEVEL_DIR}
STATIC_LIBS_ALL="-llog -lOpenSLES -landroid \
-lopendht \
-lpjsip-${PJ_TARGET_TUPLE} \
-lpjsip-simple-${PJ_TARGET_TUPLE} \
-lpjsip-ua-${PJ_TARGET_TUPLE} -lpjsua-${PJ_TARGET_TUPLE} \
-lpjnath-${PJ_TARGET_TUPLE} \
-lpjmedia-${PJ_TARGET_TUPLE} \
-lpjlib-util-${PJ_TARGET_TUPLE} \
-lpj-${PJ_TARGET_TUPLE} \
-lupnp -lixml \
-lsecp256k1 \
-lgnutls -lhogweed -lnettle -lgmp \
-lrestbed -lssl -lcrypto \
-lavformat -lavdevice -lavfilter -lavcodec -lswresample -lswscale -lavutil \
-lyaml-cpp -ljsoncpp \
-luuid -lz \
-lvpx -lopus -lspeex -lx264 \
-largon2 \
-liconv"
LIBRING_JNI_DIR=${ANDROID_APP_DIR}/app/src/main/libs/${ANDROID_ABI}
echo "Building Ring JNI library for Android to ${LIBRING_JNI_DIR}"
mkdir -p ${LIBRING_JNI_DIR}
${NDK_TOOLCHAIN_PATH}/clang++ \
--shared \
-Wall -Wextra \
-Wno-unused-variable \
-Wno-unused-function \
-Wno-unused-parameter \
${JNIDIR}/ring_wrapper.cpp \
${RING_BUILD_DIR}/src/.libs/libring.a \
-static-libstdc++ \
-isystem ${RING_SRC_DIR}/contrib/${TARGET_TUPLE}/include \
-I${RING_SRC_DIR}/src \
-L${RING_SRC_DIR}/contrib/${TARGET_TUPLE}/lib \
${STATIC_LIBS_ALL} \
${STRIP_ARG} --std=c++14 -O3 -fPIC \
-o ${LIBRING_JNI_DIR}/libring.so