build.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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.1g"
  7. DEVELOPER=$(xcode-select --print-path)
  8. IOS_SDK_VERSION=$(xcrun --sdk iphoneos --show-sdk-version)
  9. IOS_DEPLOYMENT_VERSION="5.1.1"
  10. OSX_SDK_VERSION=$(xcrun --sdk macosx --show-sdk-version)
  11. OSX_DEPLOYMENT_VERSION="10.8"
  12. IPHONEOS_PLATFORM=$(xcrun --sdk iphoneos --show-sdk-platform-path)
  13. IPHONEOS_SDK=$(xcrun --sdk iphoneos --show-sdk-path)
  14. IPHONESIMULATOR_PLATFORM=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
  15. IPHONESIMULATOR_SDK=$(xcrun --sdk iphonesimulator --show-sdk-path)
  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-osx lib-ios lib-osx
  20. rm -rf "/tmp/openssl-${OPENSSL_VERSION}-*"
  21. rm -rf "/tmp/openssl-${OPENSSL_VERSION}-*.log"
  22. build()
  23. {
  24. ARCH=$1
  25. SDK=$2
  26. TYPE=$3
  27. export BUILD_TOOLS="${DEVELOPER}"
  28. export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"
  29. mkdir -p "lib-${TYPE}"
  30. rm -rf "openssl-${OPENSSL_VERSION}"
  31. tar xfz "openssl-${OPENSSL_VERSION}.tar.gz"
  32. pushd .
  33. cd "openssl-${OPENSSL_VERSION}"
  34. if [ "$TYPE" == "ios" ]; then
  35. # IOS
  36. if [ "$ARCH" == "x86_64" ]; then
  37. # Simulator
  38. export CROSS_TOP="${IPHONESIMULATOR_PLATFORM}/Developer"
  39. export CROSS_SDK="iPhoneSimulator${IOS_SDK_VERSION}.sdk"
  40. ./Configure darwin64-x86_64-cc --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  41. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${IOS_DEPLOYMENT_VERSION} !" "Makefile"
  42. elif [ "$ARCH" == "i386" ]; then
  43. # Simulator
  44. export CROSS_TOP="${IPHONESIMULATOR_PLATFORM}/Developer"
  45. export CROSS_SDK="iPhoneSimulator${IOS_SDK_VERSION}.sdk"
  46. ./Configure iphoneos-cross --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  47. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${IOS_DEPLOYMENT_VERSION} !" "Makefile"
  48. else
  49. # iOS
  50. export CROSS_TOP="${IPHONEOS_PLATFORM}/Developer"
  51. export CROSS_SDK="iPhoneOS${IOS_SDK_VERSION}.sdk"
  52. ./Configure iphoneos-cross --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  53. perl -i -pe 's|static volatile sig_atomic_t intr_signal|static volatile int intr_signal|' crypto/ui/ui_openssl.c
  54. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${IOS_DEPLOYMENT_VERSION} !" "Makefile"
  55. fi
  56. else
  57. #OSX
  58. if [ "$ARCH" == "x86_64" ]; then
  59. ./Configure darwin64-x86_64-cc --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  60. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${SDK} -mmacosx-version-min=${OSX_DEPLOYMENT_VERSION} !" "Makefile"
  61. elif [ "$ARCH" == "i386" ]; then
  62. ./Configure darwin-i386-cc --openssldir="/tmp/openssl-${OPENSSL_VERSION}-${ARCH}" &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  63. sed -ie "s!^CFLAG=!CFLAG=-isysroot ${SDK} -mmacosx-version-min=${OSX_DEPLOYMENT_VERSION} !" "Makefile"
  64. fi
  65. fi
  66. make &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  67. make install &> "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}.log"
  68. popd
  69. rm -rf "openssl-${OPENSSL_VERSION}"
  70. # Add arch to library
  71. if [ -f "lib-${TYPE}/libcrypto.a" ]; then
  72. xcrun lipo "lib-${TYPE}/libcrypto.a" "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libcrypto.a" -create -output "lib-${TYPE}/libcrypto.a"
  73. xcrun lipo "lib-${TYPE}/libssl.a" "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libssl.a" -create -output "lib-${TYPE}/libssl.a"
  74. else
  75. cp "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libcrypto.a" "lib-${TYPE}/libcrypto.a"
  76. cp "/tmp/openssl-${OPENSSL_VERSION}-${ARCH}/lib/libssl.a" "lib-${TYPE}/libssl.a"
  77. fi
  78. }
  79. build "armv7" "${IPHONEOS_SDK}" "ios"
  80. build "armv7s" "${IPHONEOS_SDK}" "ios"
  81. build "arm64" "${IPHONEOS_SDK}" "ios"
  82. build "i386" "${IPHONESIMULATOR_SDK}" "ios"
  83. build "x86_64" "${IPHONESIMULATOR_SDK}" "ios"
  84. mkdir -p include-ios
  85. cp -r /tmp/openssl-${OPENSSL_VERSION}-i386/include/openssl include-ios/
  86. build "i386" "${OSX_SDK}" "osx"
  87. build "x86_64" "${OSX_SDK}" "osx"
  88. mkdir -p include-osx
  89. cp -r /tmp/openssl-${OPENSSL_VERSION}-i386/include/openssl include-osx/
  90. rm -rf "/tmp/openssl-${OPENSSL_VERSION}-*"
  91. rm -rf "/tmp/openssl-${OPENSSL_VERSION}-*.log"