123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #!/bin/bash
- # This script builds the iOS and Mac openSSL libraries
- # Download openssl http://www.openssl.org/source/ and place the tarball next to this script
- # Credits:
- # https://github.com/st3fan/ios-openssl
- # https://github.com/x2on/OpenSSL-for-iPhone/blob/master/build-libssl.sh
- set -e
- usage ()
- {
- echo "usage: $0 [minimum iOS SDK version (default 8.3)]"
- exit 127
- }
- if [ $1 -e "-h" ]; then
- usage
- fi
- SDK_VERSION_MIN="4.0"
- if [ -z $1 ]; then
- SDK_VERSION="8.3"
- else
- SDK_VERSION=$1
- fi
- OPENSSL_VERSION="openssl-1.0.2a"
- DEVELOPER=`xcode-select -print-path`
- buildMac()
- {
- ARCH=$1
- echo "Building ${OPENSSL_VERSION} for ${ARCH}"
- TARGET="darwin-i386-cc"
- if [[ $ARCH == "x86_64" ]]; then
- TARGET="darwin64-x86_64-cc"
- SDK_VERSION_MIN="6.0"
- fi
- pushd . > /dev/null
- cd "${OPENSSL_VERSION}"
- ./Configure ${TARGET} --openssldir="/tmp/${OPENSSL_VERSION}-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-${ARCH}.log"
- make >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
- make install >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
- make clean >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
- popd > /dev/null
- }
- buildIOS()
- {
- ARCH=$1
- pushd . > /dev/null
- cd "${OPENSSL_VERSION}"
-
- if [[ "${ARCH}" == "i386" || "${ARCH}" == "x86_64" ]]; then
- PLATFORM="iPhoneSimulator"
- else
- PLATFORM="iPhoneOS"
- sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
- fi
-
- export $PLATFORM
- export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
- export CROSS_SDK="${PLATFORM}${SDK_VERSION}.sdk"
- export BUILD_TOOLS="${DEVELOPER}"
- export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"
-
- echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${SDK_VERSION} ${ARCH}"
- if [[ "${ARCH}" == "x86_64" ]]; then
- ./Configure darwin64-x86_64-cc --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
- else
- ./Configure iphoneos-cross --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
- fi
- # add -isysroot to CC=
- sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${SDK_VERSION_MIN} !" "Makefile"
- make >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
- make install >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
- make clean >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
- popd > /dev/null
- }
- echo "Cleaning up"
- rm -rf include/openssl/* lib/*
- mkdir -p lib/iOS
- mkdir -p lib/Mac
- mkdir -p include/openssl/
- rm -rf "/tmp/${OPENSSL_VERSION}-*"
- rm -rf "/tmp/${OPENSSL_VERSION}-*.log"
- rm -rf "${OPENSSL_VERSION}"
- if [ ! -e ${OPENSSL_VERSION}.tar.gz ]; then
- echo "Downloading ${OPENSSL_VERSION}.tar.gz"
- curl -O https://www.openssl.org/source/${OPENSSL_VERSION}.tar.gz
- else
- echo "Using ${OPENSSL_VERSION}.tar.gz"
- fi
- echo "Unpacking openssl"
- tar xfz "${OPENSSL_VERSION}.tar.gz"
- buildMac "i386"
- buildMac "x86_64"
- echo "Copying headers"
- cp /tmp/${OPENSSL_VERSION}-i386/include/openssl/* include/openssl/
- echo "Building Mac libraries"
- lipo \
- "/tmp/${OPENSSL_VERSION}-i386/lib/libcrypto.a" \
- "/tmp/${OPENSSL_VERSION}-x86_64/lib/libcrypto.a" \
- -create -output lib/Mac/libcrypto.a
- lipo \
- "/tmp/${OPENSSL_VERSION}-i386/lib/libssl.a" \
- "/tmp/${OPENSSL_VERSION}-x86_64/lib/libssl.a" \
- -create -output lib/Mac/libssl.a
- buildIOS "armv7s"
- buildIOS "armv7"
- buildIOS "arm64"
- buildIOS "x86_64"
- buildIOS "i386"
- echo "Building iOS libraries"
- lipo \
- "/tmp/${OPENSSL_VERSION}-iOS-armv7s/lib/libcrypto.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-armv7/lib/libcrypto.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-arm64/lib/libcrypto.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-i386/lib/libcrypto.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-x86_64/lib/libcrypto.a" \
- -create -output lib/iOS/libcrypto.a
- lipo \
- "/tmp/${OPENSSL_VERSION}-iOS-armv7s/lib/libssl.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-armv7/lib/libssl.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-arm64/lib/libssl.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-i386/lib/libssl.a" \
- "/tmp/${OPENSSL_VERSION}-iOS-x86_64/lib/libssl.a" \
- -create -output lib/iOS/libssl.a
- echo "Cleaning up"
- rm -rf /tmp/${OPENSSL_VERSION}-*
- rm -rf ${OPENSSL_VERSION}
- echo "Done"
|