1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-04-23 14:42:02 +02:00
jami-client-qt/extras/scripts/build_daemon_macos.sh
Vladimir Stoiakin 39264e59c2 build: fix packaging with sdbus-c++
Change-Id: Ie7ab5f35d0f215cd32932f277dd7cc178e0dd2cc
2023-05-30 11:26:30 -04:00

142 lines
3.9 KiB
Bash
Executable file

#!/usr/bin/env bash
# Flags:
# -a: architecture to build. Accepted values arm64, x86_64, unified
# -d: debug
set -e
arch=''
debug=
while getopts "a:d:" OPT; do
case "$OPT" in
a)
arch="${OPTARG}"
;;
d)
debug=true
;;
\?)
exit 1
;;
esac
done
if [[ "$arch" == 'unified' ]]; then
echo "unified build"
ARCHS=("arm64" "x86_64")
elif [[ "$arch" == '' ]]; then
ARCHS=("arm64")
else
ARCHS=("$arch")
fi
TOP="$(pwd)"
INSTALL="${TOP}/install"
OS_VER=$(uname -r)
DAEMON=${TOP}/daemon
cd "$DAEMON"
FAT_CONTRIB_DIR=$DAEMON/contrib/apple-darwin
mkdir -p "$FAT_CONTRIB_DIR"
# build contrib for every arch
for ARCH in "${ARCHS[@]}"; do
HOST="${ARCH}-apple-darwin${OS_VER}"
mkdir -p contrib/native-"${ARCH}"
(
cd contrib/native-"${ARCH}"
../bootstrap --host="$HOST"
echo "Building contrib for $ARCH"
# force to build every contrib
for dir in "$DAEMON"/contrib/src/*/; do
PKG=$(basename -- "$dir")
if [ "$PKG" != "sdbus-cpp" ] && [ "$PKG" != "natpmp" ] &&
[ "$PKG" != "portaudio" ] && [ "$PKG" != "pthreads" ] &&
[ "$PKG" != "lttng-ust" ] && [ "$PKG" != "openssl" ] &&
[ "$PKG" != "media-sdk" ] && [ "$PKG" != "jack" ] &&
[ "$PKG" != "onnx" ] && [ "$PKG" != "opencv" ] &&
[ "$PKG" != "opencv_contrib" ] && [ "$PKG" != "uuid" ] &&
[ "$PKG" != "webrtc-audio-processing" ] && [ "$PKG" != "liburcu" ]; then
make -j"$NPROC" ."$PKG"
fi
done
)
done
# make fat libs for contrib
mkdir -p "$FAT_CONTRIB_DIR"/lib
if ((${#ARCHS[@]} == "2")); then
echo "Making fat lib for ${ARCHS[0]} and ${ARCHS[1]}"
LIBFILES="$DAEMON/contrib/${ARCHS[0]}-apple-darwin$OS_VER/lib/*".a
for f in $LIBFILES; do
# filter out arch from file name
arch0=${ARCHS[0]}
if [ "$arch0" = "arm64" ]; then
arch0="aarch64"
fi
# file name for first arch
libfile0=${f##*/}
# file name without arch
libfile="${libfile0//"-$arch0"/}"
# replace arch0 with ARCHS[1] to get file name for second arch
libfile1="${libfile0//$arch0/${ARCHS[1]}}"
echo "Processing $libfile from $libfile0 and $libfile1 $ lib..."
lipo -create "$DAEMON/contrib/${ARCHS[0]}-apple-darwin$OS_VER/lib/$libfile0" \
"$DAEMON/contrib/${ARCHS[1]}-apple-darwin$OS_VER/lib/$libfile1" \
-output "$FAT_CONTRIB_DIR/lib/$libfile"
done
else
echo "No need for fat lib"
rsync -ar --delete "$DAEMON/contrib/${ARCHS[0]}-apple-darwin$OS_VER/lib/"*.a "$FAT_CONTRIB_DIR/lib"
fi
rsync -ar --delete "$DAEMON/contrib/${ARCHS[0]}-apple-darwin$OS_VER/include"* "$FAT_CONTRIB_DIR/"
# build deamon for every arch
for ARCH in "${ARCHS[@]}"; do
echo "$ARCH"
cd "$DAEMON"
HOST="${ARCH}-apple-darwin"
CONFIGURE_FLAGS=" --without-dbus --host=${HOST} -with-contrib=$DAEMON/contrib/${ARCH}-apple-darwin${OS_VER} --prefix=${INSTALL}/daemon/$ARCH"
if [ "${debug}" = "true" ]; then
CONFIGURE_FLAGS+=" --enable-debug"
fi
echo "$CONFIGURE_FLAGS"
./autogen.sh || exit
# We need to copy this file or else it's just an empty file
rsync -a "$DAEMON"/src/buildinfo.cpp ./src/buildinfo.cpp
mkdir -p "build-macos-${ARCH}"
cd "build-macos-${ARCH}"
"$DAEMON"/configure $CONFIGURE_FLAGS ARCH="$ARCH" || exit 1
echo "$CONFIGURE_FLAGS"
rsync -a "$DAEMON"/src/buildinfo.cpp ./src/buildinfo.cpp
make -j"$NPROC" || exit 1
make install || exit 1
cd "$DAEMON"
done
# make fat lib for daemon
FAT_INSTALL_DIR="${INSTALL}"/daemon/
mkdir -p "${FAT_INSTALL_DIR}"
if ((${#ARCHS[@]} == "2")); then
echo "Creating daemon fat lib"
mkdir -p "$FAT_INSTALL_DIR"/lib
lipo -create "${INSTALL}/daemon/${ARCHS[0]}/lib/libjami.a" \
"${INSTALL}/daemon/${ARCHS[1]}/lib/libjami.a" \
-output "${FAT_INSTALL_DIR}"/lib/libjami.a
else
echo "No need for daemon fat lib"
rsync -ar --delete "${INSTALL}/daemon/${ARCHS[0]}/lib/libjami.a" "${FAT_INSTALL_DIR}"/lib/
fi
rsync -ar --delete "${INSTALL}/daemon/${ARCHS[0]}/include/"* "$FAT_INSTALL_DIR"/include