Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 1 | #! /bin/bash |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 2 | # Build Jami daemon for architecture specified by ANDROID_ABI |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 3 | set -e |
| 4 | |
| 5 | if [ -z "$ANDROID_NDK" -o -z "$ANDROID_SDK" ]; then |
| 6 | echo "You must define ANDROID_NDK, ANDROID_SDK and ANDROID_ABI before starting." |
| 7 | echo "They must point to your NDK and SDK directories." |
| 8 | exit 1 |
| 9 | fi |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 10 | if [ -z "$ANDROID_ABI" ]; then |
| 11 | echo "Please set ANDROID_ABI to your architecture: armeabi-v7a, x86." |
| 12 | exit 1 |
| 13 | fi |
| 14 | |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 15 | platform=$(echo "`uname`" | tr '[:upper:]' '[:lower:]') |
| 16 | arch=`uname -m` |
| 17 | |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 18 | ANDROID_TOPLEVEL_DIR="`pwd`" |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 19 | ANDROID_APP_DIR="${ANDROID_TOPLEVEL_DIR}/ring-android" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 20 | |
| 21 | HAVE_ARM=0 |
| 22 | HAVE_X86=0 |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 23 | HAVE_64=0 |
| 24 | |
| 25 | # Set up ABI variables |
| 26 | if [ ${ANDROID_ABI} = "x86" ] ; then |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 27 | TARGET="i686-linux-android" |
| 28 | PJ_TARGET="i686-pc-linux-android" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 29 | HAVE_X86=1 |
| 30 | PLATFORM_SHORT_ARCH="x86" |
| 31 | elif [ ${ANDROID_ABI} = "x86_64" ] ; then |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 32 | TARGET="x86_64-linux-android" |
| 33 | PJ_TARGET="x86_64-pc-linux-android" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 34 | HAVE_X86=1 |
| 35 | HAVE_64=1 |
| 36 | PLATFORM_SHORT_ARCH="x86_64" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 37 | elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 38 | TARGET="aarch64-linux-android" |
| 39 | PJ_TARGET="aarch64-unknown-linux-android" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 40 | HAVE_ARM=1 |
| 41 | HAVE_64=1 |
| 42 | PLATFORM_SHORT_ARCH="arm64" |
| 43 | else |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 44 | TARGET_CC="armv7a-linux-androideabi" |
| 45 | TARGET="arm-linux-androideabi" |
| 46 | PJ_TARGET="arm-unknown-linux-androideabi" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 47 | HAVE_ARM=1 |
| 48 | PLATFORM_SHORT_ARCH="arm" |
| 49 | fi |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 50 | TARGET_CC=${TARGET_CC:-$TARGET} |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 51 | |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 52 | export API=21 |
| 53 | export ANDROID_API=android-$API |
| 54 | export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$platform-$arch |
| 55 | export TARGET |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 56 | export HAVE_ARM |
| 57 | export HAVE_X86 |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 58 | export HAVE_64 |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 59 | |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 60 | if [ -z "$DAEMON_DIR" ]; then |
| 61 | DAEMON_DIR="$(pwd)/../daemon" |
| 62 | echo "DAEMON_DIR not provided trying to find it in $DAEMON_DIR" |
| 63 | fi |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 64 | if [ ! -d "$DAEMON_DIR" ]; then |
| 65 | echo 'Daemon not found.' |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 66 | echo 'If you cloned the daemon in a custom location override DAEMON_DIR to point to it' |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 67 | echo "You can also use our meta repo which contains both: |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 68 | https://review.jami.net/#/admin/projects/ring-project" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 69 | exit 1 |
| 70 | fi |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 71 | export DAEMON_DIR |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 72 | |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 73 | if [ "${RELEASE}" -eq 1 ]; then |
| 74 | echo "Daemon in release mode." |
| 75 | OPTS="" |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 76 | else |
| 77 | echo "Daemon in debug mode." |
| 78 | OPTS="--enable-debug" |
| 79 | fi |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 80 | |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 81 | # Make in // |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 82 | MAKEFLAGS= |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 83 | if which nproc >/dev/null; then |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 84 | MAKEFLAGS=-j`nproc` |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 85 | elif [ "$platform" == "darwin" ] && which sysctl >/dev/null; then |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 86 | MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count` |
| 87 | fi |
| 88 | |
| 89 | # Build buildsystem tools |
Alexandre Lision | 123e000 | 2018-01-02 16:20:49 -0500 | [diff] [blame] | 90 | cd $DAEMON_DIR/extras/tools |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 91 | export PATH=`pwd`/build/bin:$PATH |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 92 | echo "Building tools" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 93 | ./bootstrap |
| 94 | make $MAKEFLAGS |
Alexandre Lision | f7547c7 | 2017-07-27 14:07:12 -0400 | [diff] [blame] | 95 | make .pkg-config |
Adrien Beraud | 44a7a23 | 2017-06-22 18:58:31 +0200 | [diff] [blame] | 96 | make .gas |
Alexandre Lision | 123e000 | 2018-01-02 16:20:49 -0500 | [diff] [blame] | 97 | |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 98 | # Generate JNI interface |
Alexandre Lision | 123e000 | 2018-01-02 16:20:49 -0500 | [diff] [blame] | 99 | JNIDIR=$DAEMON_DIR/bin/jni |
Alexandre Lision | 123e000 | 2018-01-02 16:20:49 -0500 | [diff] [blame] | 100 | cd $JNIDIR |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 101 | PACKAGEDIR=$ANDROID_APP_DIR/libringclient/src/main/java/cx/ring/daemon $JNIDIR/make-swig.sh |
| 102 | |
| 103 | # Setup cross-compilation build environemnt |
| 104 | export AR=$TOOLCHAIN/bin/$TARGET-ar |
| 105 | export AS=$TOOLCHAIN/bin/$TARGET-as |
| 106 | export CC=$TOOLCHAIN/bin/$TARGET_CC$API-clang |
| 107 | export CXX=$TOOLCHAIN/bin/$TARGET_CC$API-clang++ |
| 108 | export LD=$TOOLCHAIN/bin/$TARGET-ld |
| 109 | export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib |
| 110 | export STRIP=$TOOLCHAIN/bin/$TARGET-strip |
| 111 | |
| 112 | FLAGS_COMMON="-fPIC -g" |
| 113 | EXTRA_CFLAGS="${EXTRA_CFLAGS} ${FLAGS_COMMON}" |
| 114 | EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} ${FLAGS_COMMON}" |
| 115 | EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -g" |
| 116 | if [ ${ANDROID_ABI} = "armeabi-v7a" ] ; then |
| 117 | EXTRA_CFLAGS="${EXTRA_CFLAGS} -march=armv7-a -mthumb -mfpu=vfpv3-d16" |
| 118 | EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -march=armv7-a -mthumb -mfpu=vfpv3-d16" |
| 119 | fi |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 120 | |
| 121 | ############ |
| 122 | # Contribs # |
| 123 | ############ |
| 124 | echo "Building the contribs" |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 125 | CONTRIB_DIR=${DAEMON_DIR}/contrib/native-${TARGET} |
| 126 | CONTRIB_SYSROOT=${DAEMON_DIR}/contrib/${TARGET} |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 127 | mkdir -p ${CONTRIB_DIR} |
| 128 | mkdir -p ${CONTRIB_SYSROOT}/lib/pkgconfig |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 129 | |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 130 | cd ${CONTRIB_DIR} |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 131 | ../bootstrap --host=${TARGET} --enable-ffmpeg |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 132 | |
| 133 | make list |
| 134 | make fetch |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 135 | export PATH="$PATH:$CONTRIB_SYSROOT/bin" |
Guillaume Roguez | 6b4c02b | 2016-12-14 19:04:16 -0500 | [diff] [blame] | 136 | make $MAKEFLAGS |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 137 | |
| 138 | ############ |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 139 | # Make Jami daemon # |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 140 | ############ |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 141 | DAEMON_BUILD_DIR="${DAEMON_DIR}/build-android-${TARGET}" |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 142 | mkdir -p ${DAEMON_BUILD_DIR} |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 143 | |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 144 | cd ${DAEMON_DIR} |
| 145 | if [ ! -f configure ]; then |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 146 | ./autogen.sh |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 147 | fi |
| 148 | |
| 149 | cd "${DAEMON_BUILD_DIR}" |
| 150 | if [ ! -f config.h ]; then |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 151 | echo "Configuring with ${OPTS}" |
Adrien Béraud | cbef9d6 | 2018-09-30 21:17:55 -0400 | [diff] [blame] | 152 | CFLAGS="${EXTRA_CFLAGS}" \ |
| 153 | CXXFLAGS="${EXTRA_CXXFLAGS}" \ |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 154 | CPPFLAGS="${CPPFLAGS} -I${DAEMON_DIR}/contrib/${TARGET}/include " \ |
| 155 | LDFLAGS="${EXTRA_LDFLAGS} -L${DAEMON_DIR}/contrib/${TARGET}/lib " \ |
| 156 | PKG_CONFIG_LIBDIR=$DAEMON_DIR/contrib/$TARGET/lib/pkgconfig \ |
| 157 | ${DAEMON_DIR}/configure --host=$TARGET $EXTRA_PARAMS \ |
| 158 | --disable-shared --with-opensl --without-dbus --without-alsa --without-pulse --enable-accel\ |
| 159 | --prefix=$DAEMON_DIR/install-android-$TARGET \ |
| 160 | ${OPTS} |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 161 | fi |
| 162 | |
| 163 | if [ ${ANDROID_API} = "android-21" ] ; then |
| 164 | # android-21 has empty sys/shm.h headers that triggers shm detection but it |
| 165 | # doesn't have any shm functions and/or symbols. */ |
| 166 | export ac_cv_header_sys_shm_h=no |
| 167 | fi |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 168 | |
| 169 | echo "Building dring ${MAKEFLAGS}" |
| 170 | V=99 make $MAKEFLAGS |
| 171 | |
Alexandre Lision | ccf2063 | 2018-01-04 10:32:53 -0500 | [diff] [blame] | 172 | ###################### |
| 173 | # Building JNI library |
| 174 | ###################### |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 175 | cd ${ANDROID_TOPLEVEL_DIR} |
| 176 | |
| 177 | STATIC_LIBS_ALL="-llog -lOpenSLES -landroid \ |
| 178 | -lopendht \ |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 179 | -lpjsip-${PJ_TARGET} \ |
| 180 | -lpjsip-simple-${PJ_TARGET} \ |
| 181 | -lpjsip-ua-${PJ_TARGET} -lpjsua-${PJ_TARGET} \ |
| 182 | -lpjnath-${PJ_TARGET} \ |
| 183 | -lpjmedia-${PJ_TARGET} \ |
| 184 | -lpjlib-util-${PJ_TARGET} \ |
| 185 | -lpj-${PJ_TARGET} \ |
Eden Abitbol | 638fe95 | 2019-06-04 10:34:07 -0400 | [diff] [blame] | 186 | -lupnp -lixml \ |
Adrien Béraud | 1b53879 | 2020-06-29 11:39:23 -0400 | [diff] [blame] | 187 | -larchive \ |
Adrien Béraud | 94bd50e | 2017-09-29 14:54:31 +0200 | [diff] [blame] | 188 | -lsecp256k1 \ |
Adrien Béraud | ee17338 | 2019-01-19 01:46:51 -0500 | [diff] [blame] | 189 | -lgnutls -lhogweed -lnettle -lgmp \ |
Vsevolod Ivanov | 97525bd | 2019-08-25 03:02:50 -0400 | [diff] [blame] | 190 | -lssl -lcrypto \ |
Adrien Béraud | 543579b | 2018-06-01 15:53:44 -0400 | [diff] [blame] | 191 | -lavformat -lavdevice -lavfilter -lavcodec -lswresample -lswscale -lavutil \ |
Adrien Béraud | 66faa23 | 2019-09-10 14:01:56 -0400 | [diff] [blame] | 192 | -lyaml-cpp -ljsoncpp -lhttp_parser -lfmt\ |
ayounes | 5fa1068 | 2019-09-25 13:22:06 -0400 | [diff] [blame] | 193 | -luuid -lz -ldl \ |
Adrien Béraud | 3a4b4b6 | 2020-02-21 22:57:48 -0500 | [diff] [blame] | 194 | -lvpx -lopus -lspeex -lspeexdsp -lx264 \ |
Aline Bonnet | a14f606 | 2017-05-04 10:33:24 -0400 | [diff] [blame] | 195 | -largon2 \ |
Adrien Béraud | 1b53879 | 2020-06-29 11:39:23 -0400 | [diff] [blame] | 196 | -liconv" |
Adrien Beraud | 6c9d158 | 2017-04-24 23:17:19 +0200 | [diff] [blame] | 197 | |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 198 | LIBRING_JNI_DIR=${ANDROID_APP_DIR}/app/src/main/libs/${ANDROID_ABI} |
Adrien Béraud | 645da10 | 2020-09-28 10:17:11 -0400 | [diff] [blame] | 199 | LIBRING_JNI_UNSTRIPPED_DIR=${ANDROID_APP_DIR}/unstripped/${ANDROID_ABI} |
| 200 | LIBCPP=$ANDROID_NDK/sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libc++_shared.so |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 201 | |
Adrien Béraud | fd8a9ae | 2019-11-28 13:33:24 -0500 | [diff] [blame] | 202 | echo "Building Jami JNI library for Android to ${LIBRING_JNI_DIR}" |
Adrien Béraud | 86759bb | 2016-09-28 13:54:54 -0400 | [diff] [blame] | 203 | mkdir -p ${LIBRING_JNI_DIR} |
ayounes | 47e9399 | 2019-10-28 12:09:53 -0400 | [diff] [blame] | 204 | |
ayounes | 5fa1068 | 2019-09-25 13:22:06 -0400 | [diff] [blame] | 205 | # Use a shared libc++_shared.so (shared by jami and all other plugins) |
Adrien Béraud | 1623f0b | 2020-09-28 16:10:21 -0400 | [diff] [blame] | 206 | cp $LIBCPP $LIBRING_JNI_DIR |
| 207 | |
Adrien Béraud | 8e5cfa6 | 2020-09-24 12:01:14 -0400 | [diff] [blame] | 208 | ${CXX} --shared \ |
| 209 | -Wall -Wextra \ |
| 210 | -Wno-unused-variable \ |
| 211 | -Wno-unused-function \ |
| 212 | -Wno-unused-parameter \ |
| 213 | ${JNIDIR}/ring_wrapper.cpp \ |
| 214 | ${DAEMON_BUILD_DIR}/src/.libs/libring.a \ |
| 215 | -isystem ${DAEMON_DIR}/contrib/${TARGET}/include \ |
| 216 | -I${DAEMON_DIR}/src \ |
| 217 | -L${DAEMON_DIR}/contrib/${TARGET}/lib \ |
| 218 | ${STATIC_LIBS_ALL} \ |
| 219 | ${FLAGS_COMMON} -O3 --std=c++17 \ |
Adrien Béraud | 1623f0b | 2020-09-28 16:10:21 -0400 | [diff] [blame] | 220 | -o ${LIBRING_JNI_DIR}/libring.so |
Adrien Béraud | 645da10 | 2020-09-28 10:17:11 -0400 | [diff] [blame] | 221 | |
Adrien Béraud | 1623f0b | 2020-09-28 16:10:21 -0400 | [diff] [blame] | 222 | if [ "${RELEASE}" -eq 1 ]; then |
| 223 | mkdir -p ${LIBRING_JNI_UNSTRIPPED_DIR} |
| 224 | cp ${LIBCPP} ${LIBRING_JNI_UNSTRIPPED_DIR} |
| 225 | cp ${LIBRING_JNI_DIR}/libring.so ${LIBRING_JNI_UNSTRIPPED_DIR} |
| 226 | ${STRIP} ${LIBRING_JNI_DIR}/libring.so |
| 227 | fi |