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
20export IOS_SIMULATOR_VERSION_MIN=${IOS_SIMULATOR_VERSION_MIN-"6.0.0"}
21export IOS_VERSION_MIN=${IOS_VERSION_MIN-"6.0.0"}
22
23echo
24echo "Warnings related to headers being present but not usable are due to functions"
25echo "that didn't exist in the specified minimum iOS version level."
26echo "They can be safely ignored."
27echo
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}"
38export LDFLAGS="-arch i386 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}"
39
40make distclean > /dev/null
41
42if [ -z "$LIBSODIUM_FULL_BUILD" ]; then
43  export LIBSODIUM_ENABLE_MINIMAL_FLAG="--enable-minimal"
44else
45  export LIBSODIUM_ENABLE_MINIMAL_FLAG=""
46fi
47
48./configure --host=i686-apple-darwin10 \
49            --disable-shared \
50            ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \
51            --prefix="$SIMULATOR32_PREFIX" || exit 1
52
53
54NPROCESSORS=$(getconf NPROCESSORS_ONLN 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
55PROCESSORS=${NPROCESSORS:-3}
56
57make -j${PROCESSORS} install || exit 1
58
59## x86_64 simulator
60export CFLAGS="-O2 -arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}"
61export LDFLAGS="-arch x86_64 -isysroot ${SDK} -mios-simulator-version-min=${IOS_SIMULATOR_VERSION_MIN}"
62
63make distclean > /dev/null
64
65./configure --host=x86_64-apple-darwin10 \
66            --disable-shared \
67            ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \
68            --prefix="$SIMULATOR64_PREFIX"
69
70make -j${PROCESSORS} install || exit 1
71
72# Build for iOS
73export BASEDIR="${XCODEDIR}/Platforms/iPhoneOS.platform/Developer"
74export PATH="${BASEDIR}/usr/bin:$BASEDIR/usr/sbin:$PATH"
75export SDK="${BASEDIR}/SDKs/iPhoneOS.sdk"
76
77## 32-bit iOS
78export CFLAGS="-fembed-bitcode -O2 -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
79export LDFLAGS="-fembed-bitcode -mthumb -arch armv7 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
80
81make distclean > /dev/null
82
83./configure --host=arm-apple-darwin10 \
84            --disable-shared \
85            ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \
86            --prefix="$IOS32_PREFIX" || exit 1
87
88make -j${PROCESSORS} install || exit 1
89
90## 32-bit armv7s iOS
91export CFLAGS="-fembed-bitcode -O2 -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
92export LDFLAGS="-fembed-bitcode -mthumb -arch armv7s -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
93
94make distclean > /dev/null
95
96./configure --host=arm-apple-darwin10 \
97            --disable-shared \
98            ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \
99            --prefix="$IOS32s_PREFIX" || exit 1
100
101make -j${PROCESSORS} install || exit 1
102
103## 64-bit iOS
104export CFLAGS="-fembed-bitcode -O2 -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
105export LDFLAGS="-fembed-bitcode -arch arm64 -isysroot ${SDK} -mios-version-min=${IOS_VERSION_MIN}"
106
107make distclean > /dev/null
108
109./configure --host=arm-apple-darwin10 \
110            --disable-shared \
111            ${LIBSODIUM_ENABLE_MINIMAL_FLAG} \
112            --prefix="$IOS64_PREFIX" || exit 1
113
114make -j${PROCESSORS} install || exit 1
115
116# Create universal binary and include folder
117rm -fr -- "$PREFIX/include" "$PREFIX/libsodium.a" 2> /dev/null
118mkdir -p -- "$PREFIX/lib"
119lipo -create \
120  "$SIMULATOR32_PREFIX/lib/libsodium.a" \
121  "$SIMULATOR64_PREFIX/lib/libsodium.a" \
122  "$IOS32_PREFIX/lib/libsodium.a" \
123  "$IOS32s_PREFIX/lib/libsodium.a" \
124  "$IOS64_PREFIX/lib/libsodium.a" \
125  -output "$PREFIX/lib/libsodium.a"
126mv -f -- "$IOS32_PREFIX/include" "$PREFIX/"
127
128echo
129echo "libsodium has been installed into $PREFIX"
130echo
131file -- "$PREFIX/lib/libsodium.a"
132
133# Cleanup
134rm -rf -- "$PREFIX/tmp"
135make distclean > /dev/null
136