blob: 521660cbabd82d724338971bc1112854947e5cf7 [file] [log] [blame]
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -04001#! /bin/sh
2
3export BUILDFORIOS=1
Kateryna Kostiukb0c3a5e2020-07-10 10:15:13 -04004export MIN_IOS_VERSION=11
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -04005IOS_TARGET_PLATFORM=iPhoneSimulator
6RELEASE=0
7
8while test -n "$1"
9do
10 case "$1" in
Andreas Traczyk8174fe22018-04-16 17:42:09 -040011 --platform=*)
12 IOS_TARGET_PLATFORM="${1#--platform=}"
13 ;;
14 --host=*)
15 HOST="${1#--host=}"
16 ;;
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040017 esac
18 shift
19done
20
21if test -z "$HOST"
22then
Andreas Traczyk8174fe22018-04-16 17:42:09 -040023 if [ "$IOS_TARGET_PLATFORM" = "all" ]
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040024 then
Andreas Traczyk8174fe22018-04-16 17:42:09 -040025 ARCHS=("arm64" "x86_64")
26 elif [ "$IOS_TARGET_PLATFORM" = "iPhoneSimulator" ]
27 then
28 ARCHS=("x86_64")
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040029 elif [ "$IOS_TARGET_PLATFORM" = "iPhoneOS" ]
30 then
Andreas Traczyk8174fe22018-04-16 17:42:09 -040031 ARCHS=("arm64")
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040032 fi
33else
Andreas Traczyk8174fe22018-04-16 17:42:09 -040034 ARCHS=("${HOST%%-*}")
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040035 case "$HOST" in
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040036 aarch64-*)
Andreas Traczyk8174fe22018-04-16 17:42:09 -040037 IOS_TARGET_PLATFORM="iPhoneOS"
38 ARCHS=("arm64")
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040039 ;;
40 x86_64-*)
Andreas Traczyk8174fe22018-04-16 17:42:09 -040041 IOS_TARGET_PLATFORM="iPhoneSimulator"
42 ARCHS=("x86_64")
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040043 ;;
44 esac
45fi
46
Andreas Traczyk8174fe22018-04-16 17:42:09 -040047if [ ! `which gas-preprocessor.pl` ]
48then
49 echo 'gas-preprocessor.pl not found. Trying to install...'
50 (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \
51 -o /usr/local/bin/gas-preprocessor.pl \
52 && chmod +x /usr/local/bin/gas-preprocessor.pl) \
53 || exit 1
54fi
55
56IOS_TOP_DIR="$(pwd)"
57
58if [ -z "$DAEMON_DIR" ]; then
59 DAEMON_DIR="$(pwd)/../daemon"
60 echo "DAEMON_DIR not provided trying to find it in $DAEMON_DIR"
61fi
62if [ ! -d "$DAEMON_DIR" ]; then
63 echo 'Daemon not found.'
64 echo 'If you cloned the daemon in a custom location override' \
65 'use DAEMON_DIR to point to it'
66 echo "You can also use our meta repo which contains both:
67 https://gerrit-ring.savoirfairelinux.com/#/admin/projects/ring-project"
68 exit 1
69fi
70
71if [ -z "$NPROC" ]; then
72 NPROC=`sysctl -n hw.ncpu || echo -n 1`
73fi
74
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040075export IOS_TARGET_PLATFORM
76echo "Building for $IOS_TARGET_PLATFORM for $ARCHS"
77
Edric Milareta68931d2016-07-05 09:53:18 -040078cd $DAEMON_DIR
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040079
80for ARCH in "${ARCHS[@]}"
81do
Andreas Traczyk8174fe22018-04-16 17:42:09 -040082 mkdir -p contrib/native-$ARCH
83 cd contrib/native-$ARCH
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040084
Andreas Traczyk8174fe22018-04-16 17:42:09 -040085 if [ "$ARCH" = "arm64" ]
86 then
87 HOST=aarch64-apple-darwin_ios
88 IOS_TARGET_PLATFORM="iPhoneOS"
89 else
90 HOST=$ARCH-apple-darwin_ios
91 IOS_TARGET_PLATFORM="iPhoneSimulator"
92 fi
93 export IOS_TARGET_PLATFORM
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040094
Andreas Traczyk8174fe22018-04-16 17:42:09 -040095 SDKROOT=`xcode-select -print-path`/Platforms/${IOS_TARGET_PLATFORM}.platform/Developer/SDKs/${IOS_TARGET_PLATFORM}${SDK_VERSION}.sdk
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040096
Andreas Traczyk8174fe22018-04-16 17:42:09 -040097 SDK="`echo "print '${IOS_TARGET_PLATFORM}'.lower()" | python`"
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -040098
Andreas Traczyk8174fe22018-04-16 17:42:09 -040099 CC="xcrun -sdk $SDK clang"
100 CXX="xcrun -sdk $SDK clang++"
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400101
Kateryna Kostiuk46b3f9b2020-08-03 12:44:16 -0400102 SDKROOT="$SDKROOT" ../bootstrap --host="$HOST" --disable-libav --disable-plugin --disable-libarchive --enable-ffmpeg
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400103
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400104 echo "Building contrib"
105 make fetch
106 make -j$NPROC || exit 1
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400107
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400108 cd ../..
109 echo "Building daemon"
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400110
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400111 CFLAGS="-arch $ARCH -isysroot $SDKROOT"
112 if [ "$IOS_TARGET_PLATFORM" = "iPhoneOS" ]
113 then
114 CFLAGS+=" -miphoneos-version-min=$MIN_IOS_VERSION -fembed-bitcode"
115 else
116 CFLAGS+=" -mios-simulator-version-min=$MIN_IOS_VERSION"
117 fi
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400118
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400119 if [ "$RELEASE" = "1" ]
120 then
121 CFLAGS+=" -O3"
122 fi
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400123
Kateryna Kostiukb0c3a5e2020-07-10 10:15:13 -0400124 CXXFLAGS="-stdlib=libc++ -std=c++17 $CFLAGS"
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400125 LDFLAGS="$CFLAGS"
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400126
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400127 ./autogen.sh || exit 1
128 mkdir -p "build-ios-$ARCH"
129 cd build-ios-$ARCH
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400130
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400131 RING_CONF="--host=$HOST \
132 --without-dbus \
Kateryna Kostiuk46b3f9b2020-08-03 12:44:16 -0400133 --disable-plugin \
134 --disable-libarchive \
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400135 --enable-static \
136 --disable-shared \
137 --prefix=$IOS_TOP_DIR/DEPS/$ARCH"
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400138
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400139 if [ "$RELEASE" = "0" ]
140 then
141 RING_CONF+=" --enable-debug"
142 fi
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400143
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400144 $DAEMON_DIR/configure $RING_CONF \
145 CC="$CC $CFLAGS" \
146 CXX="$CXX $CXXFLAGS" \
Kateryna Kostiukcae6c0e2020-03-12 11:28:57 -0400147 OBJCXX="$CXX $CXXFLAGS" \
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400148 LD="$LD" \
149 CFLAGS="$CFLAGS" \
150 CXXFLAGS="$CXXFLAGS" \
151 LDFLAGS="$LDFLAGS" || exit 1
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400152
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400153 # We need to copy this file or else it's just an empty file
154 rsync -a $DAEMON_DIR/src/buildinfo.cpp ./src/buildinfo.cpp
155
156 make -j$NPROC || exit 1
157 make install || exit 1
158
159 rsync -ar $DAEMON_DIR/contrib/$HOST/lib/*.a $IOS_TOP_DIR/DEPS/$ARCH/lib/
160 cd $IOS_TOP_DIR/DEPS/$ARCH/lib/
161 for i in *.a ; do mv "$i" "${i/-$HOST.a/.a}" ; done
162
163 cd $DAEMON_DIR
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400164done
165
166cd $IOS_TOP_DIR
167
168FAT_DIR=$IOS_TOP_DIR/fat
169mkdir -p $FAT_DIR
170
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400171if ((${#ARCHS[@]} == "2"))
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400172then
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400173 mkdir -p $FAT_DIR/lib
174 echo "Making fat lib for ${ARCHS[0]} and ${ARCHS[1]}"
175 LIBFILES=$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/*.a
176 for f in $LIBFILES
177 do
178 libFile=${f##*/}
179 echo "Processing $libFile lib..."
180 #There is only 2 ARCH max... So let's make it simple
181 lipo -create "$IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/$libFile" \
182 "$IOS_TOP_DIR/DEPS/${ARCHS[1]}/lib/$libFile" \
183 -output "$FAT_DIR/lib/$libFile"
184 done
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400185else
Andreas Traczyk8174fe22018-04-16 17:42:09 -0400186 echo "No need for fat lib"
187 rsync -ar --delete $IOS_TOP_DIR/DEPS/${ARCHS[0]}/lib/*.a $FAT_DIR/lib
Guillaume Roguezd0a1faf2016-06-29 15:55:37 -0400188fi
189
190rsync -ar --delete $IOS_TOP_DIR/DEPS/${ARCHS[0]}/include/* $FAT_DIR/include