compile-ios.sh 4.4 KB
Newer Older
Guillaume Roguez's avatar
Guillaume Roguez committed
1 2 3
#! /bin/sh

export BUILDFORIOS=1
4
export MIN_IOS_VERSION=9.3
Guillaume Roguez's avatar
Guillaume Roguez committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
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)"

Edric Milaret's avatar
Edric Milaret committed
67 68 69 70 71 72 73 74 75 76 77 78 79
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

80 81 82 83
if [ -z "$NPROC"  ]; then
    NPROC=`sysctl -n hw.ncpu || echo -n 1`
fi

Edric Milaret's avatar
Edric Milaret committed
84
cd $DAEMON_DIR
Guillaume Roguez's avatar
Guillaume Roguez committed
85 86 87 88 89 90 91 92

for ARCH in "${ARCHS[@]}"
do
	mkdir -p contrib/native-$ARCH
	cd contrib/native-$ARCH

    if test -z "$HOST"
    then
Edric Milaret's avatar
Edric Milaret committed
93
        if [ "$ARCH" = "arm64" ]
Guillaume Roguez's avatar
Guillaume Roguez committed
94 95 96 97 98 99 100 101 102 103
        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"
104 105
        make fetch
	make -j$NPROC || exit 1
Guillaume Roguez's avatar
Guillaume Roguez committed
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

	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

123
    CXXFLAGS="-stdlib=libc++ $CFLAGS"
Guillaume Roguez's avatar
Guillaume Roguez committed
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
    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

153
    make -j$NPROC || exit 1
Guillaume Roguez's avatar
Guillaume Roguez committed
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
    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