agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame] | 1 | #! /bin/bash |
| 2 | # Build Jami daemon for architecture specified by ANDROID_ABI |
| 3 | set -e |
| 4 | |
agsantos | 4bb4bc5 | 2021-03-08 14:21:45 -0500 | [diff] [blame] | 5 | CURRENTDIR=$(pwd) |
| 6 | |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame] | 7 | if [ -z "$ANDROID_NDK" -o -z "$ANDROID_SDK" ]; then |
| 8 | echo "You must define ANDROID_NDK, ANDROID_SDK and ANDROID_ABI before starting." |
| 9 | echo "They must point to your NDK and SDK directories." |
| 10 | exit 1 |
| 11 | fi |
| 12 | if [ -z "$ANDROID_ABI" ]; then |
| 13 | echo "Please set ANDROID_ABI to your architecture: armeabi-v7a, x86." |
| 14 | exit 1 |
| 15 | fi |
| 16 | |
| 17 | HAVE_ARM=0 |
| 18 | HAVE_X86=0 |
| 19 | HAVE_64=0 |
| 20 | |
| 21 | # Set up ABI variables |
| 22 | if [ ${ANDROID_ABI} = "x86" ] ; then |
| 23 | TARGET_TUPLE="i686-linux-android" |
| 24 | PJ_TARGET_TUPLE="i686-pc-linux-android" |
| 25 | PATH_HOST="x86" |
| 26 | HAVE_X86=1 |
| 27 | PLATFORM_SHORT_ARCH="x86" |
| 28 | elif [ ${ANDROID_ABI} = "x86_64" ] ; then |
| 29 | TARGET_TUPLE="x86_64-linux-android" |
| 30 | PJ_TARGET_TUPLE="x86_64-pc-linux-android" |
| 31 | PATH_HOST="x86_64" |
| 32 | HAVE_X86=1 |
| 33 | HAVE_64=1 |
| 34 | PLATFORM_SHORT_ARCH="x86_64" |
| 35 | elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then |
| 36 | TARGET_TUPLE="aarch64-linux-android" |
| 37 | PJ_TARGET_TUPLE="aarch64-unknown-linux-android" |
| 38 | PATH_HOST=$TARGET_TUPLE |
| 39 | HAVE_ARM=1 |
| 40 | HAVE_64=1 |
| 41 | PLATFORM_SHORT_ARCH="arm64" |
| 42 | else |
| 43 | TARGET_TUPLE="arm-linux-androideabi" |
| 44 | PJ_TARGET_TUPLE="arm-unknown-linux-androideabi" |
| 45 | PATH_HOST=$TARGET_TUPLE |
| 46 | HAVE_ARM=1 |
| 47 | PLATFORM_SHORT_ARCH="arm" |
| 48 | fi |
| 49 | |
| 50 | if [ "${HAVE_64}" = 1 ];then |
| 51 | LIBDIR=lib64 |
| 52 | else |
| 53 | LIBDIR=lib |
| 54 | fi |
| 55 | ANDROID_API_VERS=21 |
| 56 | ANDROID_API=android-$ANDROID_API_VERS |
| 57 | |
| 58 | export ANDROID_TOOLCHAIN="`pwd`/../../client-android/android-toolchain-$ANDROID_API_VERS-$PLATFORM_SHORT_ARCH" |
| 59 | if [ ! -d "$ANDROID_TOOLCHAIN" ]; then |
| 60 | $ANDROID_NDK/build/tools/make_standalone_toolchain.py \ |
| 61 | --arch=$PLATFORM_SHORT_ARCH \ |
| 62 | --api $ANDROID_API_VERS \ |
| 63 | --stl libc++ \ |
| 64 | --install-dir=$ANDROID_TOOLCHAIN |
| 65 | fi |
| 66 | |
| 67 | export ANDROID_API |
| 68 | export TARGET_TUPLE |
| 69 | export HAVE_ARM |
| 70 | export HAVE_X86 |
| 71 | export HAVE_64 |
| 72 | |
| 73 | # Add the NDK toolchain to the PATH, needed both for contribs and for building |
| 74 | # stub libraries |
| 75 | NDK_TOOLCHAIN_PATH="${ANDROID_TOOLCHAIN}/bin" |
| 76 | CROSS_COMPILE=${NDK_TOOLCHAIN_PATH}/${TARGET_TUPLE}- |
| 77 | export PATH=${NDK_TOOLCHAIN_PATH}:${PATH} |
| 78 | export CROSS_COMPILE="${CROSS_COMPILE}" |
| 79 | export SYSROOT=$ANDROID_TOOLCHAIN/sysroot |
| 80 | |
| 81 | if [ -z "$DAEMON_DIR" ]; then |
| 82 | DAEMON_DIR="$(pwd)/../../daemon" |
| 83 | echo "DAEMON_DIR not provided trying to find it in $DAEMON_DIR" |
| 84 | fi |
| 85 | |
| 86 | if [ ! -d "$DAEMON_DIR" ]; then |
| 87 | echo 'Daemon not found.' |
| 88 | echo 'If you cloned the daemon in a custom location override' \ |
| 89 | 'DAEMON_DIR to point to it' |
| 90 | echo "You can also use our meta repo which contains both: |
| 91 | https://review.jami.net/#/admin/projects/ring-project" |
| 92 | exit 1 |
| 93 | fi |
| 94 | export DAEMON_DIR |
| 95 | |
| 96 | # Setup LDFLAGS |
| 97 | if [ ${ANDROID_ABI} = "armeabi-v7a" ] ; then |
| 98 | EXTRA_CFLAGS="${EXTRA_CFLAGS} -march=armv7-a -mthumb -mfpu=vfpv3-d16" |
| 99 | EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -march=armv7-a -mthumb -mfpu=vfpv3-d16" |
| 100 | elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then |
| 101 | EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${SYSROOT}/usr/lib -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/lib" |
| 102 | fi |
| 103 | EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/${LIBDIR}/${ANDROID_ABI} -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/${LIBDIR}" |
| 104 | EXTRA_CFLAGS="${EXTRA_CFLAGS} -fPIC" |
| 105 | EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -fPIC" |
| 106 | EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${SYSROOT}/usr/${LIBDIR}" |
| 107 | echo "EXTRA_CFLAGS= ${EXTRA_CFLAGS}" >> config.mak |
| 108 | echo "EXTRA_CXXFLAGS= ${EXTRA_CXXFLAGS}" >> config.mak |
| 109 | echo "EXTRA_LDFLAGS= ${EXTRA_LDFLAGS}" >> config.mak |
| 110 | |
| 111 | echo "Daemon in debug mode." |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame] | 112 | |
| 113 | # Make in // |
| 114 | UNAMES=$(uname -s) |
| 115 | MAKEFLAGS= |
| 116 | if which nproc >/dev/null |
| 117 | then |
| 118 | MAKEFLAGS=-j`nproc` |
| 119 | elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/null |
| 120 | then |
| 121 | MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count` |
| 122 | fi |
| 123 | |
| 124 | # Build buildsystem tools |
| 125 | cd $DAEMON_DIR/extras/tools |
| 126 | export PATH=`pwd`/build/bin:$PATH |
| 127 | echo "Building tools" |
| 128 | ./bootstrap |
| 129 | make $MAKEFLAGS |
| 130 | make .pkg-config |
| 131 | make .gas |
| 132 | |
| 133 | ############ |
| 134 | # Contribs # |
| 135 | ############ |
| 136 | echo "Building the contribs" |
| 137 | CONTRIB_DIR=${DAEMON_DIR}/contrib/native-${TARGET_TUPLE} |
| 138 | CONTRIB_SYSROOT=${DAEMON_DIR}/contrib/${TARGET_TUPLE} |
| 139 | mkdir -p ${CONTRIB_DIR} |
| 140 | mkdir -p ${CONTRIB_SYSROOT}/lib/pkgconfig |
| 141 | |
agsantos | 4bb4bc5 | 2021-03-08 14:21:45 -0500 | [diff] [blame] | 142 | echo "copying files" |
| 143 | cp -r ${CURRENTDIR}/freetype ${DAEMON_DIR}/contrib/src |
| 144 | |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame] | 145 | cd ${CONTRIB_DIR} |
Aline Gondim Santos | ba981bb | 2022-08-02 14:28:04 -0300 | [diff] [blame^] | 146 | ../bootstrap --host=${TARGET_TUPLE} --enable-freetype --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 --disable-msgpack --disable-natpmp --disable-nettle --enable-opencv --disable-opendht --disable-pjproject --disable-portaudio --disable-restinio --disable-secp256k1 --disable-speexdsp --disable-upnp --disable-uuid --disable-yaml-cpp |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame] | 147 | |
| 148 | make list |
| 149 | make fetch |
| 150 | export PATH="$PATH:$CONTRIB_SYSROOT/bin" |
| 151 | make $MAKEFLAGS |
| 152 | |