| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/usr/bin/env bash
- set -ex
- . $(dirname $0)/osx_helpers.sh
- DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET:-"$(macos_version)"}
- SDK_FETCH=
- if ! [ ${DEPLOYMENT_TARGET} == "$(macos_version)" ]; then
- SDK_FETCH=1
- # SDK URL from https://github.com/docker/golang-cross/blob/master/osx-cross.sh
- SDK_URL=https://s3.dockerproject.org/darwin/v2/MacOSX${DEPLOYMENT_TARGET}.sdk.tar.xz
- SDK_SHA1=dd228a335194e3392f1904ce49aff1b1da26ca62
- fi
- OPENSSL_VERSION=1.1.0j
- OPENSSL_URL=https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
- OPENSSL_SHA1=dcad1efbacd9a4ed67d4514470af12bbe2a1d60a
- PYTHON_VERSION=3.6.8
- PYTHON_URL=https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
- PYTHON_SHA1=09fcc4edaef0915b4dedbfb462f1cd15f82d3a6f
- #
- # Install prerequisites.
- #
- if ! [ -x "$(command -v brew)" ]; then
- ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- fi
- if ! [ -x "$(command -v grealpath)" ]; then
- brew update > /dev/null
- brew install coreutils
- fi
- if ! [ -x "$(command -v python3)" ]; then
- brew update > /dev/null
- brew install python3
- fi
- if ! [ -x "$(command -v virtualenv)" ]; then
- pip install virtualenv
- fi
- #
- # Create toolchain directory.
- #
- BUILD_PATH="$(grealpath $(dirname $0)/../../build)"
- mkdir -p ${BUILD_PATH}
- TOOLCHAIN_PATH="${BUILD_PATH}/toolchain"
- mkdir -p ${TOOLCHAIN_PATH}
- #
- # Set macOS SDK.
- #
- if [ ${SDK_FETCH} ]; then
- SDK_PATH=${TOOLCHAIN_PATH}/MacOSX${DEPLOYMENT_TARGET}.sdk
- fetch_tarball ${SDK_URL} ${SDK_PATH} ${SDK_SHA1}
- else
- SDK_PATH="$(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${DEPLOYMENT_TARGET}.sdk"
- fi
- #
- # Build OpenSSL.
- #
- OPENSSL_SRC_PATH=${TOOLCHAIN_PATH}/openssl-${OPENSSL_VERSION}
- if ! [ -f ${TOOLCHAIN_PATH}/bin/openssl ]; then
- rm -rf ${OPENSSL_SRC_PATH}
- fetch_tarball ${OPENSSL_URL} ${OPENSSL_SRC_PATH} ${OPENSSL_SHA1}
- (
- cd ${OPENSSL_SRC_PATH}
- export MACOSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET}
- export SDKROOT=${SDK_PATH}
- ./Configure darwin64-x86_64-cc --prefix=${TOOLCHAIN_PATH}
- make install_sw install_dev
- )
- fi
- #
- # Build Python.
- #
- PYTHON_SRC_PATH=${TOOLCHAIN_PATH}/Python-${PYTHON_VERSION}
- if ! [ -f ${TOOLCHAIN_PATH}/bin/python3 ]; then
- rm -rf ${PYTHON_SRC_PATH}
- fetch_tarball ${PYTHON_URL} ${PYTHON_SRC_PATH} ${PYTHON_SHA1}
- (
- cd ${PYTHON_SRC_PATH}
- ./configure --prefix=${TOOLCHAIN_PATH} \
- --enable-ipv6 --without-ensurepip --with-dtrace --without-gcc \
- --datarootdir=${TOOLCHAIN_PATH}/share \
- --datadir=${TOOLCHAIN_PATH}/share \
- --enable-framework=${TOOLCHAIN_PATH}/Frameworks \
- MACOSX_DEPLOYMENT_TARGET=${DEPLOYMENT_TARGET} \
- CFLAGS="-isysroot ${SDK_PATH} -I${TOOLCHAIN_PATH}/include" \
- CPPFLAGS="-I${SDK_PATH}/usr/include -I${TOOLCHAIN_PATH}include" \
- LDFLAGS="-isysroot ${SDK_PATH} -L ${TOOLCHAIN_PATH}/lib"
- make -j 4
- make install PYTHONAPPSDIR=${TOOLCHAIN_PATH}
- make frameworkinstallextras PYTHONAPPSDIR=${TOOLCHAIN_PATH}/share
- )
- fi
- echo ""
- echo "*** Targeting macOS: ${DEPLOYMENT_TARGET}"
- echo "*** Using SDK ${SDK_PATH}"
- echo "*** Using $(python3_version ${TOOLCHAIN_PATH})"
- echo "*** Using $(openssl_version ${TOOLCHAIN_PATH})"
|