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