diff --git a/build-daemon.sh b/build-daemon.sh index 6e4ffd9fbf9c7c06b38bc0f5df35f9bd02e314a4..46aface3f034768b6f4afba92b40d72ae5573003 100755 --- a/build-daemon.sh +++ b/build-daemon.sh @@ -12,6 +12,9 @@ if [ -z "$ANDROID_ABI" ]; then exit 1 fi +platform=$(echo "`uname`" | tr '[:upper:]' '[:lower:]') +arch=`uname -m` + ANDROID_TOPLEVEL_DIR="`pwd`" ANDROID_APP_DIR="${ANDROID_TOPLEVEL_DIR}/ring-android" @@ -21,111 +24,65 @@ 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" + TARGET="i686-linux-android" + PJ_TARGET="i686-pc-linux-android" 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" + TARGET="x86_64-linux-android" + PJ_TARGET="x86_64-pc-linux-android" HAVE_X86=1 HAVE_64=1 PLATFORM_SHORT_ARCH="x86_64" elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then - TARGET_TUPLE="aarch64-linux-android" - PJ_TARGET_TUPLE="aarch64-unknown-linux-android" - PATH_HOST=$TARGET_TUPLE + TARGET="aarch64-linux-android" + PJ_TARGET="aarch64-unknown-linux-android" 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 + TARGET_CC="armv7a-linux-androideabi" + TARGET="arm-linux-androideabi" + PJ_TARGET="arm-unknown-linux-androideabi" HAVE_ARM=1 PLATFORM_SHORT_ARCH="arm" fi +TARGET_CC=${TARGET_CC:-$TARGET} -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 - -export ANDROID_API -export TARGET_TUPLE +export API=21 +export ANDROID_API=android-$API +export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$platform-$arch +export TARGET export HAVE_ARM export HAVE_X86 export HAVE_64 -# Add the NDK toolchain to the PATH, needed both for contribs and for building -# stub libraries -NDK_TOOLCHAIN_PATH="${ANDROID_TOOLCHAIN}/bin" -CROSS_COMPILE=${NDK_TOOLCHAIN_PATH}/${TARGET_TUPLE}- -export PATH=${NDK_TOOLCHAIN_PATH}:${PATH} -export CROSS_COMPILE="${CROSS_COMPILE}" -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 '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 -# 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${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}" -EXTRA_CFLAGS="${EXTRA_CFLAGS} -fPIC" -EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -fPIC" -EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${SYSROOT}/usr/${LIBDIR}" -echo "EXTRA_CFLAGS= ${EXTRA_CFLAGS}" >> config.mak -echo "EXTRA_CXXFLAGS= ${EXTRA_CXXFLAGS}" >> config.mak -echo "EXTRA_LDFLAGS= ${EXTRA_LDFLAGS}" >> config.mak - if [ "${RELEASE}" -eq 1 ]; then echo "Daemon in release mode." OPTS="" - STRIP_ARG="-s " else echo "Daemon in debug mode." OPTS="--enable-debug" fi # Make in // -UNAMES=$(uname -s) MAKEFLAGS= -if which nproc >/dev/null -then +if which nproc >/dev/null; then MAKEFLAGS=-j`nproc` -elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/null -then +elif [ "$platform" == "darwin" ] && which sysctl >/dev/null; then MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count` fi @@ -138,24 +95,40 @@ make $MAKEFLAGS make .pkg-config make .gas +# Generate JNI interface 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 +PACKAGEDIR=$ANDROID_APP_DIR/libringclient/src/main/java/cx/ring/daemon $JNIDIR/make-swig.sh + +# Setup cross-compilation build environemnt +export AR=$TOOLCHAIN/bin/$TARGET-ar +export AS=$TOOLCHAIN/bin/$TARGET-as +export CC=$TOOLCHAIN/bin/$TARGET_CC$API-clang +export CXX=$TOOLCHAIN/bin/$TARGET_CC$API-clang++ +export LD=$TOOLCHAIN/bin/$TARGET-ld +export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib +export STRIP=$TOOLCHAIN/bin/$TARGET-strip + +FLAGS_COMMON="-fPIC -g" +EXTRA_CFLAGS="${EXTRA_CFLAGS} ${FLAGS_COMMON}" +EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} ${FLAGS_COMMON}" +EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -g" +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" +fi ############ # Contribs # ############ echo "Building the contribs" -CONTRIB_DIR=${DAEMON_DIR}/contrib/native-${TARGET_TUPLE} -CONTRIB_SYSROOT=${DAEMON_DIR}/contrib/${TARGET_TUPLE} +CONTRIB_DIR=${DAEMON_DIR}/contrib/native-${TARGET} +CONTRIB_SYSROOT=${DAEMON_DIR}/contrib/${TARGET} mkdir -p ${CONTRIB_DIR} mkdir -p ${CONTRIB_SYSROOT}/lib/pkgconfig cd ${CONTRIB_DIR} -../bootstrap --host=${TARGET_TUPLE} --enable-ffmpeg +../bootstrap --host=${TARGET} --enable-ffmpeg make list make fetch @@ -165,18 +138,26 @@ make $MAKEFLAGS ############ # Make Jami daemon # ############ -DAEMON_BUILD_DIR="${DAEMON_DIR}/build-android-${TARGET_TUPLE}" +DAEMON_BUILD_DIR="${DAEMON_DIR}/build-android-${TARGET}" mkdir -p ${DAEMON_BUILD_DIR} -if [ ! -f config.h ]; then - cd ${DAEMON_DIR} +cd ${DAEMON_DIR} +if [ ! -f configure ]; then ./autogen.sh - cd "${DAEMON_BUILD_DIR}" +fi + +cd "${DAEMON_BUILD_DIR}" +if [ ! -f config.h ]; then echo "Configuring with ${OPTS}" CFLAGS="${EXTRA_CFLAGS}" \ CXXFLAGS="${EXTRA_CXXFLAGS}" \ - LDFLAGS="${EXTRA_LDFLAGS}" \ - ${ANDROID_TOPLEVEL_DIR}/configure.sh ${OPTS} + CPPFLAGS="${CPPFLAGS} -I${DAEMON_DIR}/contrib/${TARGET}/include " \ + LDFLAGS="${EXTRA_LDFLAGS} -L${DAEMON_DIR}/contrib/${TARGET}/lib " \ + PKG_CONFIG_LIBDIR=$DAEMON_DIR/contrib/$TARGET/lib/pkgconfig \ + ${DAEMON_DIR}/configure --host=$TARGET $EXTRA_PARAMS \ + --disable-shared --with-opensl --without-dbus --without-alsa --without-pulse --enable-accel\ + --prefix=$DAEMON_DIR/install-android-$TARGET \ + ${OPTS} fi if [ ${ANDROID_API} = "android-21" ] ; then @@ -195,13 +176,13 @@ 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} \ + -lpjsip-${PJ_TARGET} \ + -lpjsip-simple-${PJ_TARGET} \ + -lpjsip-ua-${PJ_TARGET} -lpjsua-${PJ_TARGET} \ + -lpjnath-${PJ_TARGET} \ + -lpjmedia-${PJ_TARGET} \ + -lpjlib-util-${PJ_TARGET} \ + -lpj-${PJ_TARGET} \ -lupnp -lixml \ -larchive \ -lsecp256k1 \ @@ -223,17 +204,16 @@ mkdir -p ${LIBRING_JNI_DIR} cp $ANDROID_NDK/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so $LIBRING_JNI_DIR # Use a shared libc++_shared.so (shared by jami and all other plugins) -${NDK_TOOLCHAIN_PATH}/clang++ \ - --shared \ - -Wall -Wextra \ - -Wno-unused-variable \ - -Wno-unused-function \ - -Wno-unused-parameter \ - ${JNIDIR}/ring_wrapper.cpp \ - ${DAEMON_BUILD_DIR}/src/.libs/libring.a \ - -isystem ${DAEMON_DIR}/contrib/${TARGET_TUPLE}/include \ - -I${DAEMON_DIR}/src \ - -L${DAEMON_DIR}/contrib/${TARGET_TUPLE}/lib \ - ${STATIC_LIBS_ALL} \ - ${STRIP_ARG} --std=c++14 -O3 -fPIC \ - -o ${LIBRING_JNI_DIR}/libring.so +${CXX} --shared \ + -Wall -Wextra \ + -Wno-unused-variable \ + -Wno-unused-function \ + -Wno-unused-parameter \ + ${JNIDIR}/ring_wrapper.cpp \ + ${DAEMON_BUILD_DIR}/src/.libs/libring.a \ + -isystem ${DAEMON_DIR}/contrib/${TARGET}/include \ + -I${DAEMON_DIR}/src \ + -L${DAEMON_DIR}/contrib/${TARGET}/lib \ + ${STATIC_LIBS_ALL} \ + ${FLAGS_COMMON} -O3 --std=c++17 \ + -o ${LIBRING_JNI_DIR}/libring.so diff --git a/configure.sh b/configure.sh deleted file mode 100755 index 3856ed14b28f5ce2eef3e15dc0f57c2f0136e8e4..0000000000000000000000000000000000000000 --- a/configure.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -if [ -z "$ANDROID_NDK" ]; then - echo "Please set the ANDROID_NDK environment variable with its path." - exit 1 -fi -if [ -z "$ANDROID_ABI" ]; then - echo "Please set ANDROID_ABI to your architecture: armeabi-v7a, armeabi, arm64-v8a, x86, x86_64 or mips." - exit 1 -fi -if [ -z "$ANDROID_API" ];then - echo "ANDROID_API not set, call ./compile.sh first" - exit 1 -fi - -CPPFLAGS="${CPPFLAGS} -I${DAEMON_DIR}/contrib/${TARGET_TUPLE}/include " \ -LDFLAGS="${LDFLAGS} -L${DAEMON_DIR}/contrib/${TARGET_TUPLE}/lib " \ -CC="${CROSS_COMPILE}clang" \ -CXX="${CROSS_COMPILE}clang++" \ -NM="${CROSS_COMPILE}nm" \ -STRIP="${CROSS_COMPILE}strip" \ -RANLIB="${CROSS_COMPILE}ranlib" \ -AR="${CROSS_COMPILE}ar" \ -AS="${CROSS_COMPILE}as" \ -PKG_CONFIG_LIBDIR=$DAEMON_DIR/contrib/$TARGET_TUPLE/lib/pkgconfig \ -$DAEMON_DIR/configure --host=$TARGET_TUPLE $EXTRA_PARAMS \ - --disable-shared --with-opensl --without-dbus --without-alsa --without-pulse --enable-accel\ - --prefix=$DAEMON_DIR/install-android-$TARGET_TUPLE \ - $* diff --git a/gen-env.sh b/gen-env.sh deleted file mode 100755 index 73574344ce92b221cc029f1cc47d5f81b9341082..0000000000000000000000000000000000000000 --- a/gen-env.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -# Simple script to generate env.txt -ENVTXT=$1/assets/env.txt - -function optional_var { - echo -n "$1=" >> $ENVTXT - ONE=\$$1 - T=`eval echo $ONE` - if [ -z "$T" ]; then - echo -n "0" >> $ENVTXT - else - echo -n "$T" >> $ENVTXT - fi - echo -n -e "\n" >> $ENVTXT -} - -rm -f $ENVTXT -echo -e "ANDROID_ABI=$ANDROID_ABI" >> $ENVTXT -optional_var "NO_FPU" -optional_var "NO_ARMV6"