Skip to content

Instantly share code, notes, and snippets.

@felix-schwarz
Forked from steipete/openssl-build.h
Last active March 19, 2024 03:16
Show Gist options
  • Save felix-schwarz/c61c0f7d9ab60f53ebb0 to your computer and use it in GitHub Desktop.
Save felix-schwarz/c61c0f7d9ab60f53ebb0 to your computer and use it in GitHub Desktop.

Revisions

  1. felix-schwarz revised this gist Oct 28, 2015. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions openssl-build.sh
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    #!/bin/bash

    # This script downlaods and builds the iOS and Mac openSSL libraries with Bitcode enabled
    # This script downloads and builds the iOS, tvOS and Mac openSSL libraries with Bitcode enabled

    # Credits:
    # https://github.com/st3fan/ios-openssl
    @@ -13,7 +13,7 @@ set -e

    usage ()
    {
    echo "usage: $0 [iOS SDK version (defaults to latest)] [tvOS SDK version (defaults to latest)] [OS X minimum deployment target (defaults to latest)]"
    echo "usage: $0 [iOS SDK version (defaults to latest)] [tvOS SDK version (defaults to latest)] [OS X minimum deployment target (defaults to 10.7)]"
    exit 127
    }

  2. felix-schwarz revised this gist Oct 28, 2015. 1 changed file with 5 additions and 2 deletions.
    7 changes: 5 additions & 2 deletions openssl-build.sh
    Original file line number Diff line number Diff line change
    @@ -13,7 +13,7 @@ set -e

    usage ()
    {
    echo "usage: $0 [iOS SDK version (defaults to latest)] [tvOS SDK version (defaults to latest)]"
    echo "usage: $0 [iOS SDK version (defaults to latest)] [tvOS SDK version (defaults to latest)] [OS X minimum deployment target (defaults to latest)]"
    exit 127
    }

    @@ -27,9 +27,12 @@ if [ -z $1 ]; then

    TVOS_SDK_VERSION="" #"9.0"
    TVOS_MIN_SDK_VERSION="9.0"

    OSX_DEPLOYMENT_TARGET="10.7"
    else
    IOS_SDK_VERSION=$1
    TVOS_SDK_VERSION=$2
    OSX_DEPLOYMENT_TARGET=$3
    fi

    OPENSSL_VERSION="openssl-1.0.2d"
    @@ -47,7 +50,7 @@ buildMac()
    TARGET="darwin64-x86_64-cc"
    fi

    export CC="${BUILD_TOOLS}/usr/bin/clang -fembed-bitcode"
    export CC="${BUILD_TOOLS}/usr/bin/clang -fembed-bitcode -mmacosx-version-min=${OSX_DEPLOYMENT_TARGET}"

    pushd . > /dev/null
    cd "${OPENSSL_VERSION}"
  3. felix-schwarz revised this gist Sep 17, 2015. No changes.
  4. felix-schwarz renamed this gist Sep 17, 2015. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  5. felix-schwarz revised this gist Sep 17, 2015. 1 changed file with 74 additions and 10 deletions.
    84 changes: 74 additions & 10 deletions openssl-build.h
    Original file line number Diff line number Diff line change
    @@ -5,13 +5,15 @@
    # Credits:
    # https://github.com/st3fan/ios-openssl
    # https://github.com/x2on/OpenSSL-for-iPhone/blob/master/build-libssl.sh
    # https://gist.github.com/foozmeat/5154962
    # Peter Steinberger, PSPDFKit GmbH, @steipete.
    # Felix Schwarz, IOSPIRIT GmbH, @felix_schwarz.

    set -e

    usage ()
    {
    echo "usage: $0 [minimum iOS SDK version (default 8.0)]"
    echo "usage: $0 [iOS SDK version (defaults to latest)] [tvOS SDK version (defaults to latest)]"
    exit 127
    }

    @@ -20,10 +22,14 @@ if [ $1 -e "-h" ]; then
    fi

    if [ -z $1 ]; then
    SDK_VERSION="9.0"
    MIN_SDK_VERSION="8.0"
    IOS_SDK_VERSION="" #"9.1"
    IOS_MIN_SDK_VERSION="8.0"

    TVOS_SDK_VERSION="" #"9.0"
    TVOS_MIN_SDK_VERSION="9.0"
    else
    SDK_VERSION=$1
    IOS_SDK_VERSION=$1
    TVOS_SDK_VERSION=$2
    fi

    OPENSSL_VERSION="openssl-1.0.2d"
    @@ -47,7 +53,7 @@ buildMac()
    cd "${OPENSSL_VERSION}"
    ./Configure no-asm ${TARGET} --openssldir="/tmp/${OPENSSL_VERSION}-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-${ARCH}.log"
    make >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make install >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make install_sw >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make clean >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    popd > /dev/null
    }
    @@ -68,26 +74,70 @@ buildIOS()

    export $PLATFORM
    export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
    export CROSS_SDK="${PLATFORM}${SDK_VERSION}.sdk"
    export CROSS_SDK="${PLATFORM}${IOS_SDK_VERSION}.sdk"
    export BUILD_TOOLS="${DEVELOPER}"
    export CC="${BUILD_TOOLS}/usr/bin/gcc -fembed-bitcode -arch ${ARCH}"

    echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${SDK_VERSION} ${ARCH}"
    echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${IOS_SDK_VERSION} ${ARCH}"

    if [[ "${ARCH}" == "x86_64" ]]; then
    ./Configure no-asm darwin64-x86_64-cc --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    else
    ./Configure iphoneos-cross --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    fi
    # add -isysroot to CC=
    sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${MIN_SDK_VERSION} !" "Makefile"
    sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${IOS_MIN_SDK_VERSION} !" "Makefile"

    make >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    make install >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    make install_sw >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    make clean >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    popd > /dev/null
    }

    buildTVOS()
    {
    ARCH=$1

    pushd . > /dev/null
    cd "${OPENSSL_VERSION}"

    if [[ "${ARCH}" == "i386" || "${ARCH}" == "x86_64" ]]; then
    PLATFORM="AppleTVSimulator"
    else
    PLATFORM="AppleTVOS"
    sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
    fi

    export $PLATFORM
    export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
    export CROSS_SDK="${PLATFORM}${TVOS_SDK_VERSION}.sdk"
    export BUILD_TOOLS="${DEVELOPER}"
    export CC="${BUILD_TOOLS}/usr/bin/gcc -fembed-bitcode -arch ${ARCH}"

    echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${TVOS_SDK_VERSION} ${ARCH}"

    # Patch apps/speed.c to not use fork() since it's not available on tvOS
    LANG=C sed -i -- 's/define HAVE_FORK 1/define HAVE_FORK 0/' "./apps/speed.c"

    # Patch Configure to build for tvOS, not iOS
    LANG=C sed -i -- 's/D\_REENTRANT\:iOS/D\_REENTRANT\:tvOS/' "./Configure"
    chmod u+x ./Configure

    if [[ "${ARCH}" == "x86_64" ]]; then
    ./Configure no-asm darwin64-x86_64-cc --openssldir="/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}.log"
    else
    ./Configure iphoneos-cross --openssldir="/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}.log"
    fi
    # add -isysroot to CC=
    sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -mtvos-version-min=${TVOS_MIN_SDK_VERSION} !" "Makefile"

    make >> "/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}.log" 2>&1
    make install_sw >> "/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}.log" 2>&1
    make clean >> "/tmp/${OPENSSL_VERSION}-tvOS-${ARCH}.log" 2>&1
    popd > /dev/null
    }


    echo "Cleaning up"
    rm -rf include/openssl/* lib/*

    @@ -101,7 +151,7 @@ rm -rf "${OPENSSL_VERSION}"

    if [ ! -e ${OPENSSL_VERSION}.tar.gz ]; then
    echo "Downloading ${OPENSSL_VERSION}.tar.gz"
    curl -O http://www.openssl.org/source/${OPENSSL_VERSION}.tar.gz
    curl -O https://www.openssl.org/source/${OPENSSL_VERSION}.tar.gz
    else
    echo "Using ${OPENSSL_VERSION}.tar.gz"
    fi
    @@ -152,6 +202,20 @@ lipo \
    "/tmp/${OPENSSL_VERSION}-iOS-x86_64/lib/libssl.a" \
    -create -output lib/libssl_iOS.a

    buildTVOS "arm64"
    buildTVOS "x86_64"

    echo "Building tvOS libraries"
    lipo \
    "/tmp/${OPENSSL_VERSION}-tvOS-arm64/lib/libcrypto.a" \
    "/tmp/${OPENSSL_VERSION}-tvOS-x86_64/lib/libcrypto.a" \
    -create -output lib/libcrypto_tvOS.a

    lipo \
    "/tmp/${OPENSSL_VERSION}-tvOS-arm64/lib/libssl.a" \
    "/tmp/${OPENSSL_VERSION}-tvOS-x86_64/lib/libssl.a" \
    -create -output lib/libssl_tvOS.a

    echo "Cleaning up"
    rm -rf /tmp/${OPENSSL_VERSION}-*
    rm -rf ${OPENSSL_VERSION}
  6. @steipete steipete revised this gist Jul 16, 2015. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions openssl-build.h
    Original file line number Diff line number Diff line change
    @@ -1,11 +1,11 @@
    #!/bin/bash

    # This script downlaods and builds the iOS and Mac openSSL libraries
    # This script downlaods and builds the iOS and Mac openSSL libraries with Bitcode enabled

    # Credits:
    # https://github.com/st3fan/ios-openssl
    # https://github.com/x2on/OpenSSL-for-iPhone/blob/master/build-libssl.sh

    # Peter Steinberger, PSPDFKit GmbH, @steipete.

    set -e

    @@ -41,11 +41,11 @@ buildMac()
    TARGET="darwin64-x86_64-cc"
    fi

    export CC="${BUILD_TOOLS}/usr/bin/clang"
    export CC="${BUILD_TOOLS}/usr/bin/clang -fembed-bitcode"

    pushd . > /dev/null
    cd "${OPENSSL_VERSION}"
    ./Configure ${TARGET} --openssldir="/tmp/${OPENSSL_VERSION}-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-${ARCH}.log"
    ./Configure no-asm ${TARGET} --openssldir="/tmp/${OPENSSL_VERSION}-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-${ARCH}.log"
    make >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make install >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make clean >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    @@ -75,7 +75,7 @@ buildIOS()
    echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${SDK_VERSION} ${ARCH}"

    if [[ "${ARCH}" == "x86_64" ]]; then
    ./Configure darwin64-x86_64-cc --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    ./Configure no-asm darwin64-x86_64-cc --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    else
    ./Configure iphoneos-cross --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    fi
  7. @steipete steipete created this gist Jul 16, 2015.
    159 changes: 159 additions & 0 deletions openssl-build.h
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,159 @@
    #!/bin/bash

    # This script downlaods and builds the iOS and Mac openSSL libraries

    # Credits:
    # https://github.com/st3fan/ios-openssl
    # https://github.com/x2on/OpenSSL-for-iPhone/blob/master/build-libssl.sh


    set -e

    usage ()
    {
    echo "usage: $0 [minimum iOS SDK version (default 8.0)]"
    exit 127
    }

    if [ $1 -e "-h" ]; then
    usage
    fi

    if [ -z $1 ]; then
    SDK_VERSION="9.0"
    MIN_SDK_VERSION="8.0"
    else
    SDK_VERSION=$1
    fi

    OPENSSL_VERSION="openssl-1.0.2d"
    DEVELOPER=`xcode-select -print-path`

    buildMac()
    {
    ARCH=$1

    echo "Building ${OPENSSL_VERSION} for ${ARCH}"

    TARGET="darwin-i386-cc"

    if [[ $ARCH == "x86_64" ]]; then
    TARGET="darwin64-x86_64-cc"
    fi

    export CC="${BUILD_TOOLS}/usr/bin/clang"

    pushd . > /dev/null
    cd "${OPENSSL_VERSION}"
    ./Configure ${TARGET} --openssldir="/tmp/${OPENSSL_VERSION}-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-${ARCH}.log"
    make >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make install >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    make clean >> "/tmp/${OPENSSL_VERSION}-${ARCH}.log" 2>&1
    popd > /dev/null
    }

    buildIOS()
    {
    ARCH=$1

    pushd . > /dev/null
    cd "${OPENSSL_VERSION}"

    if [[ "${ARCH}" == "i386" || "${ARCH}" == "x86_64" ]]; then
    PLATFORM="iPhoneSimulator"
    else
    PLATFORM="iPhoneOS"
    sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
    fi

    export $PLATFORM
    export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
    export CROSS_SDK="${PLATFORM}${SDK_VERSION}.sdk"
    export BUILD_TOOLS="${DEVELOPER}"
    export CC="${BUILD_TOOLS}/usr/bin/gcc -fembed-bitcode -arch ${ARCH}"

    echo "Building ${OPENSSL_VERSION} for ${PLATFORM} ${SDK_VERSION} ${ARCH}"

    if [[ "${ARCH}" == "x86_64" ]]; then
    ./Configure darwin64-x86_64-cc --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    else
    ./Configure iphoneos-cross --openssldir="/tmp/${OPENSSL_VERSION}-iOS-${ARCH}" &> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log"
    fi
    # add -isysroot to CC=
    sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=${MIN_SDK_VERSION} !" "Makefile"

    make >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    make install >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    make clean >> "/tmp/${OPENSSL_VERSION}-iOS-${ARCH}.log" 2>&1
    popd > /dev/null
    }

    echo "Cleaning up"
    rm -rf include/openssl/* lib/*

    mkdir -p lib
    mkdir -p include/openssl/

    rm -rf "/tmp/${OPENSSL_VERSION}-*"
    rm -rf "/tmp/${OPENSSL_VERSION}-*.log"

    rm -rf "${OPENSSL_VERSION}"

    if [ ! -e ${OPENSSL_VERSION}.tar.gz ]; then
    echo "Downloading ${OPENSSL_VERSION}.tar.gz"
    curl -O http://www.openssl.org/source/${OPENSSL_VERSION}.tar.gz
    else
    echo "Using ${OPENSSL_VERSION}.tar.gz"
    fi

    echo "Unpacking openssl"
    tar xfz "${OPENSSL_VERSION}.tar.gz"

    buildMac "x86_64"

    echo "Copying headers"
    cp /tmp/${OPENSSL_VERSION}-x86_64/include/openssl/* include/openssl/

    echo "Building Mac libraries"
    lipo \
    "/tmp/${OPENSSL_VERSION}-x86_64/lib/libcrypto.a" \
    -create -output lib/libcrypto_Mac.a

    lipo \
    "/tmp/${OPENSSL_VERSION}-x86_64/lib/libssl.a" \
    -create -output lib/libssl_Mac.a

    buildIOS "armv7"
    buildIOS "arm64"
    buildIOS "x86_64"
    buildIOS "i386"

    echo "Building iOS libraries"
    lipo \
    "/tmp/${OPENSSL_VERSION}-iOS-armv7/lib/libcrypto.a" \
    "/tmp/${OPENSSL_VERSION}-iOS-i386/lib/libcrypto.a" \
    -create -output lib/libcrypto_iOS.a

    lipo \
    "/tmp/${OPENSSL_VERSION}-iOS-armv7/lib/libssl.a" \
    "/tmp/${OPENSSL_VERSION}-iOS-i386/lib/libssl.a" \
    -create -output lib/libssl_iOS.a

    echo "Adding 64-bit libraries"
    lipo \
    "lib/libcrypto_iOS.a" \
    "/tmp/${OPENSSL_VERSION}-iOS-arm64/lib/libcrypto.a" \
    "/tmp/${OPENSSL_VERSION}-iOS-x86_64/lib/libcrypto.a" \
    -create -output lib/libcrypto_iOS.a

    lipo \
    "lib/libssl_iOS.a" \
    "/tmp/${OPENSSL_VERSION}-iOS-arm64/lib/libssl.a" \
    "/tmp/${OPENSSL_VERSION}-iOS-x86_64/lib/libssl.a" \
    -create -output lib/libssl_iOS.a

    echo "Cleaning up"
    rm -rf /tmp/${OPENSSL_VERSION}-*
    rm -rf ${OPENSSL_VERSION}

    echo "Done"