blob: aeb88b45669cd591378b8725770b7ffc7ceecca3 [file] [log] [blame]
agsantosac1940d2020-09-17 10:18:40 -04001#! /bin/bash
2# Build Jami daemon for architecture specified by ANDROID_ABI
3set -e
4
agsantos4bb4bc52021-03-08 14:21:45 -05005CURRENTDIR=$(pwd)
6
agsantosac1940d2020-09-17 10:18:40 -04007if [ -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
11fi
12if [ -z "$ANDROID_ABI" ]; then
13 echo "Please set ANDROID_ABI to your architecture: armeabi-v7a, x86."
14 exit 1
15fi
16
17HAVE_ARM=0
18HAVE_X86=0
19HAVE_64=0
20
21# Set up ABI variables
22if [ ${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"
28elif [ ${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"
35elif [ ${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"
42else
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"
48fi
49
50if [ "${HAVE_64}" = 1 ];then
51 LIBDIR=lib64
52else
53 LIBDIR=lib
54fi
55ANDROID_API_VERS=21
56ANDROID_API=android-$ANDROID_API_VERS
57
58export ANDROID_TOOLCHAIN="`pwd`/../../client-android/android-toolchain-$ANDROID_API_VERS-$PLATFORM_SHORT_ARCH"
59if [ ! -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
65fi
66
67export ANDROID_API
68export TARGET_TUPLE
69export HAVE_ARM
70export HAVE_X86
71export HAVE_64
72
73# Add the NDK toolchain to the PATH, needed both for contribs and for building
74# stub libraries
75NDK_TOOLCHAIN_PATH="${ANDROID_TOOLCHAIN}/bin"
76CROSS_COMPILE=${NDK_TOOLCHAIN_PATH}/${TARGET_TUPLE}-
77export PATH=${NDK_TOOLCHAIN_PATH}:${PATH}
78export CROSS_COMPILE="${CROSS_COMPILE}"
79export SYSROOT=$ANDROID_TOOLCHAIN/sysroot
80
81if [ -z "$DAEMON_DIR" ]; then
82 DAEMON_DIR="$(pwd)/../../daemon"
83 echo "DAEMON_DIR not provided trying to find it in $DAEMON_DIR"
84fi
85
86if [ ! -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
93fi
94export DAEMON_DIR
95
96# Setup LDFLAGS
97if [ ${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"
100elif [ ${ANDROID_ABI} = "arm64-v8a" ] ; then
101 EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${SYSROOT}/usr/lib -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/lib"
102fi
103EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/${LIBDIR}/${ANDROID_ABI} -L${ANDROID_TOOLCHAIN}/${TARGET_TUPLE}/${LIBDIR}"
104EXTRA_CFLAGS="${EXTRA_CFLAGS} -fPIC"
105EXTRA_CXXFLAGS="${EXTRA_CXXFLAGS} -fPIC"
106EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${SYSROOT}/usr/${LIBDIR}"
107echo "EXTRA_CFLAGS= ${EXTRA_CFLAGS}" >> config.mak
108echo "EXTRA_CXXFLAGS= ${EXTRA_CXXFLAGS}" >> config.mak
109echo "EXTRA_LDFLAGS= ${EXTRA_LDFLAGS}" >> config.mak
110
111echo "Daemon in debug mode."
agsantosac1940d2020-09-17 10:18:40 -0400112
113# Make in //
114UNAMES=$(uname -s)
115MAKEFLAGS=
116if which nproc >/dev/null
117then
118MAKEFLAGS=-j`nproc`
119elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/null
120then
121MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count`
122fi
123
124# Build buildsystem tools
125cd $DAEMON_DIR/extras/tools
126export PATH=`pwd`/build/bin:$PATH
127echo "Building tools"
128./bootstrap
129make $MAKEFLAGS
130make .pkg-config
131make .gas
132
133############
134# Contribs #
135############
136echo "Building the contribs"
137CONTRIB_DIR=${DAEMON_DIR}/contrib/native-${TARGET_TUPLE}
138CONTRIB_SYSROOT=${DAEMON_DIR}/contrib/${TARGET_TUPLE}
139mkdir -p ${CONTRIB_DIR}
140mkdir -p ${CONTRIB_SYSROOT}/lib/pkgconfig
141
agsantos4bb4bc52021-03-08 14:21:45 -0500142echo "copying files"
143cp -r ${CURRENTDIR}/freetype ${DAEMON_DIR}/contrib/src
144
agsantosac1940d2020-09-17 10:18:40 -0400145cd ${CONTRIB_DIR}
Aline Gondim Santosba981bb2022-08-02 14:28:04 -0300146../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
agsantosac1940d2020-09-17 10:18:40 -0400147
148make list
149make fetch
150export PATH="$PATH:$CONTRIB_SYSROOT/bin"
151make $MAKEFLAGS
152