#! /bin/sh export BUILDFORIOS=1 export MIN_IOS_VERSION=9.3 IOS_TARGET_PLATFORM=iPhoneSimulator RELEASE=0 while test -n "$1" do case "$1" in --platform=*) IOS_TARGET_PLATFORM="${1#--platform=}" ;; --host=*) HOST="${1#--host=}" ;; esac shift done if test -z "$HOST" then if [ "$IOS_TARGET_PLATFORM" = "iPhoneSimulator" ] then ARCHS=("x86_64") elif [ "$IOS_TARGET_PLATFORM" = "iPhoneOS" ] then ARCHS=("arm64") fi else ARCHS=("${HOST%%-*}") case "$HOST" in armv7-*) IOS_TARGET_PLATFORM="iPhoneOS" ;; aarch64-*) IOS_TARGET_PLATFORM="iPhoneOS" ARCHS=("arm64") ;; x86_64-*) IOS_TARGET_PLATFORM="iPhoneSimulator" ;; esac fi export IOS_TARGET_PLATFORM echo "Building for $IOS_TARGET_PLATFORM for $ARCHS" SDKROOT=`xcode-select -print-path`/Platforms/${IOS_TARGET_PLATFORM}.platform/Developer/SDKs/${IOS_TARGET_PLATFORM}${SDK_VERSION}.sdk if [ ! `which gas-preprocessor.pl` ] then echo 'gas-preprocessor.pl not found. Trying to install...' (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \ -o /usr/local/bin/gas-preprocessor.pl \ && chmod +x /usr/local/bin/gas-preprocessor.pl) \ || exit 1 fi SDK="`echo "print '${IOS_TARGET_PLATFORM}'.lower()" | python`" CC="xcrun -sdk $SDK clang" CXX="xcrun -sdk $SDK clang++" IOS_TOP_DIR="$(pwd)" 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 "You can also use our meta repo which contains both: https://gerrit-ring.savoirfairelinux.com/#/admin/projects/ring-project" exit 1 fi if [ -z "$NPROC" ]; then NPROC=`sysctl -n hw.ncpu || echo -n 1` fi cd $DAEMON_DIR for ARCH in "${ARCHS[@]}" do mkdir -p contrib/native-$ARCH cd contrib/native-$ARCH if test -z "$HOST" then if [ "$ARCH" = "arm64" ] then HOST=aarch64-apple-darwin_ios else HOST=$ARCH-apple-darwin_ios fi fi SDKROOT="$SDKROOT" ../bootstrap --host="$HOST" --disable-libav --enable-ffmpeg echo "Building contrib" make fetch make -j$NPROC || exit 1 cd ../.. echo "Building daemon" CFLAGS="-arch $ARCH -isysroot $SDKROOT" if [ "$IOS_TARGET_PLATFORM" = "iPhoneOS" ] then CFLAGS+=" -miphoneos-version-min=$MIN_IOS_VERSION -fembed-bitcode" else CFLAGS+=" -mios-simulator-version-min=$MIN_IOS_VERSION" fi if [ "$RELEASE" = "1" ] then CFLAGS+=" -O3" fi CXXFLAGS="-stdlib=libc++ -std=c++14 $CFLAGS" LDFLAGS="$CFLAGS" ./autogen.sh || exit 1 mkdir -p "build-ios-$ARCH" cd build-ios-$ARCH RING_CONF="--host=$HOST \ --without-dbus \ --enable-static \ --disable-shared \ --disable-video \ --prefix=$IOS_TOP_DIR/DEPS/$ARCH" if [ "$RELEASE" = "0" ] then RING_CONF+=" --enable-debug" fi $DAEMON_DIR/configure $RING_CONF \ CC="$CC $CFLAGS" \ CXX="$CXX $CXXFLAGS" \ LD="$LD" \ CFLAGS="$CFLAGS" \ CXXFLAGS="$CXXFLAGS" \ LDFLAGS="$LDFLAGS" || exit 1 # We need to copy this file or else it's just an empty file rsync -a $DAEMON_DIR/src/buildinfo.cpp ./src/buildinfo.cpp make -j$NPROC || exit 1 make install || exit 1 rsync -ar $DAEMON_DIR/contrib/$HOST/lib/*.a $IOS_TOP_DIR/DEPS/$ARCH/lib/ cd $IOS_TOP_DIR/DEPS/$ARCH/lib/ for i in *.a ; do mv "$i" "${i/-$HOST.a/.a}" ; done cd $DAEMON_DIR done cd $IOS_TOP_DIR FAT_DIR=$IOS_TOP_DIR/fat mkdir -p $FAT_DIR if ((${#ARCHS[@]} > "1")) then echo "Making fat lib for $ARCHS" LIBFILES=$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/*.a for f in $LIBFILES do echo "Processing $f lib..." #There is only 2 ARCH max... So let's make it simple lipo -create "$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/$f" \ "$IOS_TOP_DIR/DEPS/${ARCHS[1]}/lib/$f" \ -output "$FAT_DIR/lib/$f" done else echo "No need for fat lib" rsync -ar --delete $IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/*.a $FAT_DIR/lib fi rsync -ar --delete $IOS_TOP_DIR/DEPS/${ARCHS[0]}/include/* $FAT_DIR/include