osx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/usr/bin/env bash
  2. set -ex
  3. . $(dirname $0)/osx_helpers.sh
  4. DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET:-"$(macos_version)"}
  5. SDK_FETCH=
  6. if ! [ ${DEPLOYMENT_TARGET} == "$(macos_version)" ]; then
  7. SDK_FETCH=1
  8. # SDK URL from https://github.com/docker/golang-cross/blob/master/osx-cross.sh
  9. SDK_URL=https://s3.dockerproject.org/darwin/v2/MacOSX${DEPLOYMENT_TARGET}.sdk.tar.xz
  10. SDK_SHA1=dd228a335194e3392f1904ce49aff1b1da26ca62
  11. fi
  12. OPENSSL_VERSION=1.1.0j
  13. OPENSSL_URL=https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
  14. OPENSSL_SHA1=dcad1efbacd9a4ed67d4514470af12bbe2a1d60a
  15. PYTHON_VERSION=3.6.8
  16. PYTHON_URL=https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
  17. PYTHON_SHA1=09fcc4edaef0915b4dedbfb462f1cd15f82d3a6f
  18. #
  19. # Install prerequisites.
  20. #
  21. if ! [ -x "$(command -v brew)" ]; then
  22. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  23. fi
  24. if ! [ -x "$(command -v grealpath)" ]; then
  25. brew update > /dev/null
  26. brew install coreutils
  27. fi
  28. if ! [ -x "$(command -v python3)" ]; then
  29. brew update > /dev/null
  30. brew install python3
  31. fi
  32. if ! [ -x "$(command -v virtualenv)" ]; then
  33. pip install virtualenv
  34. fi
  35. #
  36. # Create toolchain directory.
  37. #
  38. BUILD_PATH="$(grealpath $(dirname $0)/../../build)"
  39. mkdir -p ${BUILD_PATH}
  40. TOOLCHAIN_PATH="${BUILD_PATH}/toolchain"
  41. mkdir -p ${TOOLCHAIN_PATH}
  42. #
  43. # Set macOS SDK.
  44. #
  45. if [ ${SDK_FETCH} ]; then
  46. SDK_PATH=${TOOLCHAIN_PATH}/MacOSX${DEPLOYMENT_TARGET}.sdk
  47. fetch_tarball ${SDK_URL} ${SDK_PATH} ${SDK_SHA1}
  48. else
  49. SDK_PATH="$(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${DEPLOYMENT_TARGET}.sdk"
  50. fi
  51. #
  52. # Build OpenSSL.
  53. #
  54. OPENSSL_SRC_PATH=${TOOLCHAIN_PATH}/openssl-${OPENSSL_VERSION}
  55. if ! [ -f ${TOOLCHAIN_PATH}/bin/openssl ]; then
  56. rm -rf ${OPENSSL_SRC_PATH}
  57. fetch_tarball ${OPENSSL_URL} ${OPENSSL_SRC_PATH} ${OPENSSL_SHA1}
  58. (
  59. cd ${OPENSSL_SRC_PATH}
  60. export MACOSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET}
  61. export SDKROOT=${SDK_PATH}
  62. ./Configure darwin64-x86_64-cc --prefix=${TOOLCHAIN_PATH}
  63. make install_sw install_dev
  64. )
  65. fi
  66. #
  67. # Build Python.
  68. #
  69. PYTHON_SRC_PATH=${TOOLCHAIN_PATH}/Python-${PYTHON_VERSION}
  70. if ! [ -f ${TOOLCHAIN_PATH}/bin/python3 ]; then
  71. rm -rf ${PYTHON_SRC_PATH}
  72. fetch_tarball ${PYTHON_URL} ${PYTHON_SRC_PATH} ${PYTHON_SHA1}
  73. (
  74. cd ${PYTHON_SRC_PATH}
  75. ./configure --prefix=${TOOLCHAIN_PATH} \
  76. --enable-ipv6 --without-ensurepip --with-dtrace --without-gcc \
  77. --datarootdir=${TOOLCHAIN_PATH}/share \
  78. --datadir=${TOOLCHAIN_PATH}/share \
  79. --enable-framework=${TOOLCHAIN_PATH}/Frameworks \
  80. MACOSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET} \
  81. CFLAGS="-isysroot ${SDK_PATH} -I${TOOLCHAIN_PATH}/include" \
  82. CPPFLAGS="-I${SDK_PATH}/usr/include -I${TOOLCHAIN_PATH}include" \
  83. LDFLAGS="-isysroot ${SDK_PATH} -L ${TOOLCHAIN_PATH}/lib"
  84. make -j 4
  85. make install PYTHONAPPSDIR=${TOOLCHAIN_PATH}
  86. make frameworkinstallextras PYTHONAPPSDIR=${TOOLCHAIN_PATH}/share
  87. )
  88. fi
  89. echo ""
  90. echo "*** Targeting macOS: ${DEPLOYMENT_TARGET}"
  91. echo "*** Using SDK ${SDK_PATH}"
  92. echo "*** Using $(python3_version ${TOOLCHAIN_PATH})"
  93. echo "*** Using $(openssl_version ${TOOLCHAIN_PATH})"