1#! /bin/sh
2#
3#  Step 1.
4#  Configure for base system so simulator is covered
5#
6#  Step 2.
7#  Make for iOS and iOS simulator
8#
9#  Step 3.
10#  Merge libs into final version for xcode import
11
12export PREFIX="$(pwd)/libsodium-ios"
13export IOS32_PREFIX="$PREFIX/tmp/ios32"
14export IOS32s_PREFIX="$PREFIX/tmp/ios32s"
15export IOS64_PREFIX="$PREFIX/tmp/ios64"
16export SIMULATOR32_PREFIX="$PREFIX/tmp/simulator32"
17export SIMULATOR64_PREFIX="$PREFIX/tmp/simulator64"
18export XCODEDIR=$(xcode-select -p)
19
20xcode_major=$(xcodebuild -version|egrep '^Xcode '|cut -d' ' -f2|cut -d. -f1)
21if [ $xcode_major -ge 8 ]; then
22  export IOS_SIMULATOR_VERSION_MIN=${IOS_SIMULATOR_VERSION_MIN-"6.0.0"}
23  export IOS_VERSION_MIN=${IOS_VERSION_MIN-"6.0.0"}
24else
25  export IOS_SIMULATOR_VERSION_MIN=${IOS_SIMULATOR_VERSION_MIN-"5.1.1"}
26  export IOS_VERSION_MIN=${IOS_VERSION_MIN-"5.1.1"}
27fi
28
29mkdir -p $SIMULATOR32_PREFIX $SIMULATOR64_PREFIX $IOS32_PREFIX $IOS32s_PREFIX $IOS64_PREFIX || exit 1
30
31# Build for the simulator
32export BASEDIR="${XCODEDIR}/Platforms/iPhoneSimulator.platform/Developer"
33export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH"
34export SDK="${BASEDIR}/SDKs/iPhoneSimulator.sdk"
35
36## i386 simulator
37export CFLAGS="-O2 -arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN} -flto"
38export LDFLAGS="-arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN} -flto"
39
40make distclean > /dev/null
41
42./configure --host=i686-apple-darwin10 \
43            --disable-shared \
44            --enable-minimal \
45            --prefix="$SIMULATOR32_PREFIX" || exit 1
46
47make -j3 install || exit 1
48
49## x86_64 simulator
50export CFLAGS="-O2 -arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN} -flto"
51export LDFLAGS="-arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN} -flto"
52
53make distclean > /dev/null
54
55./configure --host=x86_64-apple-darwin10 \
56            --disable-shared \
57            --enable-minimal \
58            --prefix="$SIMULATOR64_PREFIX"
59
60make -j3 install || exit 1
61
62# Build for iOS
63export BASEDIR="${XCODEDIR}/Platforms/iPhoneOS.platform/Developer"
64export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH"
65export SDK="${BASEDIR}/SDKs/iPhoneOS.sdk"
66
67## 32-bit iOS
68export CFLAGS="-O2 -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN} -flto"
69export LDFLAGS="-mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN} -flto"
70
71make distclean > /dev/null
72
73./configure --host=arm-apple-darwin10 \
74            --disable-shared \
75            --enable-minimal \
76            --prefix="$IOS32_PREFIX" || exit 1
77
78make -j3 install || exit 1
79
80## 32-bit armv7s iOS
81export CFLAGS="-O2 -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN} -flto"
82export LDFLAGS="-mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN} -flto"
83
84make distclean > /dev/null
85
86./configure --host=arm-apple-darwin10 \
87            --disable-shared \
88            --enable-minimal \
89            --prefix="$IOS32s_PREFIX" || exit 1
90
91make -j3 install || exit 1
92
93## 64-bit iOS
94export CFLAGS="-O2 -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN} -flto -fembed-bitcode"
95export LDFLAGS="-arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN} -flto -fembed-bitcode"
96
97make distclean > /dev/null
98
99./configure --host=arm-apple-darwin10 \
100            --disable-shared \
101            --enable-minimal \
102            --prefix="$IOS64_PREFIX" || exit 1
103
104make -j3 install || exit 1
105
106# Create universal binary and include folder
107rm -fr -- "$PREFIX/include" "$PREFIX/libsodium.a" 2> /dev/null
108mkdir -p -- "$PREFIX/lib"
109lipo -create \
110  "$SIMULATOR32_PREFIX/lib/libsodium.a" \
111  "$SIMULATOR64_PREFIX/lib/libsodium.a" \
112  "$IOS32_PREFIX/lib/libsodium.a" \
113  "$IOS32s_PREFIX/lib/libsodium.a" \
114  "$IOS64_PREFIX/lib/libsodium.a" \
115  -output "$PREFIX/lib/libsodium.a"
116mv -f -- "$IOS32_PREFIX/include" "$PREFIX/"
117
118echo
119echo "libsodium has been installed into $PREFIX"
120echo
121file -- "$PREFIX/lib/libsodium.a"
122
123# Cleanup
124rm -rf -- "$PREFIX/tmp"
125make distclean > /dev/null
126