build.sh 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/bin/bash
  2. # Yay shell scripting! This script builds a static version of
  3. # OpenSSL ${OPENSSL_VERSION} for iOS and OSX that contains code for armv6, armv7, armv7s, arm64, i386 and x86_64.
  4. set -x
  5. # Setup paths to stuff we need
  6. OPENSSL_VERSION="1.0.2o"
  7. DEVELOPER=$(xcode-select --print-path)
  8. IPHONEOS_SDK_VERSION=$(xcrun --sdk iphoneos --show-sdk-version)
  9. IPHONEOS_DEPLOYMENT_VERSION="6.0"
  10. IPHONEOS_PLATFORM=$(xcrun --sdk iphoneos --show-sdk-platform-path)
  11. IPHONEOS_SDK=$(xcrun --sdk iphoneos --show-sdk-path)
  12. IPHONESIMULATOR_PLATFORM=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
  13. IPHONESIMULATOR_SDK=$(xcrun --sdk iphonesimulator --show-sdk-path)
  14. OSX_SDK_VERSION=$(xcrun --sdk macosx --show-sdk-version)
  15. OSX_DEPLOYMENT_VERSION="10.8"
  16. OSX_PLATFORM=$(xcrun --sdk macosx --show-sdk-platform-path)
  17. OSX_SDK=$(xcrun --sdk macosx --show-sdk-path)
  18. # Clean up whatever was left from our previous build
  19. rm -rf include-ios include-macos lib-ios lib-macos
  20. rm -rf /tmp/openssl-${OPENSSL_VERSION}*
  21. configure() {
  22. OS=$1
  23. ARCH=$2
  24. PLATFORM=$3
  25. SDK_VERSION=$4
  26. DEPLOYMENT_VERSION=$5
  27. export CROSS_TOP="${PLATFORM}/Developer"
  28. export CROSS_SDK="${OS}${SDK_VERSION}.sdk"
  29. if [ "$ARCH" == "x86_64" ]; then
  30. ./Configure darwin64-x86_64-cc --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  31. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -arch $ARCH -mios-simulator-version-min=${DEPLOYMENT_VERSION} -miphoneos-version-min=${DEPLOYMENT_VERSION} !" "Makefile"
  32. else
  33. ./Configure iphoneos-cross -no-asm --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  34. sed -ie "s!^CFLAG=!CFLAG=-mios-simulator-version-min=${DEPLOYMENT_VERSION} -miphoneos-version-min=${DEPLOYMENT_VERSION} !" "Makefile"
  35. perl -i -pe 's|static volatile sig_atomic_t intr_signal|static volatile int intr_signal|' crypto/ui/ui_openssl.c
  36. fi
  37. }
  38. build()
  39. {
  40. ARCH=$1
  41. SDK=$2
  42. TYPE=$3
  43. export BUILD_TOOLS="${DEVELOPER}"
  44. export CC="${BUILD_TOOLS}/usr/bin/gcc -fembed-bitcode -arch ${ARCH}"
  45. mkdir -p "lib-${TYPE}"
  46. rm -rf openssl-${OPENSSL_VERSION}
  47. tar xfz openssl-${OPENSSL_VERSION}.tar.gz
  48. pushd .
  49. cd "openssl-${OPENSSL_VERSION}"
  50. #fix header for Swift
  51. sed -ie "s/BIGNUM \*I,/BIGNUM \*i,/g" crypto/rsa/rsa.h
  52. if [ "$TYPE" == "ios" ]; then
  53. # IOS
  54. if [ "$ARCH" == "x86_64" ] || [ "$ARCH" == "i386" ]; then
  55. configure "iPhoneSimulator" $ARCH ${IPHONESIMULATOR_PLATFORM} ${IPHONEOS_SDK_VERSION} ${IPHONEOS_DEPLOYMENT_VERSION}
  56. else
  57. configure "iPhoneOS" $ARCH ${IPHONEOS_PLATFORM} ${IPHONEOS_SDK_VERSION} ${IPHONEOS_DEPLOYMENT_VERSION}
  58. fi
  59. elif [ "$TYPE" == "macos" ]; then
  60. #OSX
  61. if [ "$ARCH" == "x86_64" ]; then
  62. ./Configure darwin64-x86_64-cc --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  63. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${SDK} -arch $ARCH -mmacosx-version-min=${OSX_DEPLOYMENT_VERSION} !" "Makefile"
  64. elif [ "$ARCH" == "i386" ]; then
  65. ./Configure darwin-i386-cc --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  66. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${SDK} -arch $ARCH -mmacosx-version-min=${OSX_DEPLOYMENT_VERSION} !" "Makefile"
  67. fi
  68. fi
  69. make &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  70. make install &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  71. popd
  72. # Add arch to library
  73. if [ -f "lib-${TYPE}/libcrypto.a" ]; then
  74. xcrun lipo "lib-${TYPE}/libcrypto.a" "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libcrypto.a" -create -output "lib-${TYPE}/libcrypto.a"
  75. xcrun lipo "lib-${TYPE}/libssl.a" "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libssl.a" -create -output "lib-${TYPE}/libssl.a"
  76. else
  77. cp "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libcrypto.a" "lib-${TYPE}/libcrypto.a"
  78. cp "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libssl.a" "lib-${TYPE}/libssl.a"
  79. fi
  80. rm -rf "openssl-${OPENSSL_VERSION}"
  81. }
  82. build "i386" "${IPHONESIMULATOR_SDK}" "ios"
  83. build "x86_64" "${IPHONESIMULATOR_SDK}" "ios"
  84. build "armv7" "${IPHONEOS_SDK}" "ios"
  85. build "armv7s" "${IPHONEOS_SDK}" "ios"
  86. build "arm64" "${IPHONEOS_SDK}" "ios"
  87. mkdir -p include-ios
  88. cp -r /tmp/openssl-${OPENSSL_VERSION}-arm64/include/openssl include-ios/
  89. rm -rf /tmp/openssl-${OPENSSL_VERSION}*
  90. build "i386" "${OSX_SDK}" "macos"
  91. build "x86_64" "${OSX_SDK}" "macos"
  92. mkdir -p include-macos
  93. cp -r /tmp/openssl-${OPENSSL_VERSION}-x86_64/include/openssl include-macos/
  94. rm -rf /tmp/openssl-${OPENSSL_VERSION}*