build.sh 4.3 KB

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