Skip to content

Instantly share code, notes, and snippets.

@maxep
Created December 3, 2015 13:31
Show Gist options
  • Select an option

  • Save maxep/98e3f6d13fc9a7be6751 to your computer and use it in GitHub Desktop.

Select an option

Save maxep/98e3f6d13fc9a7be6751 to your computer and use it in GitHub Desktop.

Revisions

  1. maxep created this gist Dec 3, 2015.
    145 changes: 145 additions & 0 deletions build_openssl_ios.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,145 @@
    #!/bin/sh

    # Automatic build script for libssl and libcrypto
    # for iPhoneOS and iPhoneSimulator
    #
    # Created by Felix Schulze on 16.12.10.
    # Copyright 2010 Felix Schulze. All rights reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #
    ###########################################################################
    # Change values here #
    #
    VERSION="1.0.2d" #
    SDKVERSION="9.1" #
    # #
    ###########################################################################
    # #
    # Don't change anything under this line! #
    # #
    ###########################################################################


    CURRENTPATH=`pwd`
    ARCHS="i386 x86_64 armv7 armv7s arm64"
    DEVELOPER=`xcode-select -print-path`

    if [ ! -d "$DEVELOPER" ]; then
    echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
    echo "run"
    echo "sudo xcode-select -switch <xcode path>"
    echo "for default installation:"
    echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
    exit 1
    fi

    case $DEVELOPER in
    *\ * )
    echo "Your Xcode path contains whitespaces, which is not supported."
    exit 1
    ;;
    esac

    case $CURRENTPATH in
    *\ * )
    echo "Your path contains whitespaces, which is not supported by 'make install'."
    exit 1
    ;;
    esac

    set -e
    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

    mkdir -p "${CURRENTPATH}/src"
    mkdir -p "${CURRENTPATH}/bin"
    mkdir -p "${CURRENTPATH}/lib_ios"

    tar zxf openssl-${VERSION}.tar.gz -C "${CURRENTPATH}/src"
    cd "${CURRENTPATH}/src/openssl-${VERSION}"


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

    export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
    export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
    export BUILD_TOOLS="${DEVELOPER}"

    echo "Building openssl-${VERSION} for ${PLATFORM} ${SDKVERSION} ${ARCH}"
    echo "Please stand by..."

    export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"
    mkdir -p "${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
    LOG="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/build-openssl-${VERSION}.log"

    set +e
    if [[ "$VERSION" =~ 1.0.0. ]]; then
    ./Configure BSD-generic32 --openssldir="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" > "${LOG}" 2>&1
    elif [ "${ARCH}" == "x86_64" ]; then
    ./Configure darwin64-x86_64-cc --openssldir="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" > "${LOG}" 2>&1
    else
    ./Configure iphoneos-cross --openssldir="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" > "${LOG}" 2>&1
    fi

    if [ $? != 0 ];
    then
    echo "Problem while configure - Please check ${LOG}"
    exit 1
    fi

    # add -isysroot to CC=
    sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 !" "Makefile"

    if [ "$1" == "verbose" ];
    then
    make
    else
    make >> "${LOG}" 2>&1
    fi

    if [ $? != 0 ];
    then
    echo "Problem while make - Please check ${LOG}"
    exit 1
    fi

    set -e
    make install >> "${LOG}" 2>&1
    make clean >> "${LOG}" 2>&1
    done

    echo "Build library..."
    lipo -create ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-i386.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-x86_64.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7s.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-arm64.sdk/lib/libssl.a -output ${CURRENTPATH}/lib_ios/libssl.a

    lipo -create ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-i386.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-x86_64.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7s.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-arm64.sdk/lib/libcrypto.a -output ${CURRENTPATH}/lib_ios/libcrypto.a

    mkdir -p ${CURRENTPATH}/include
    cp -R ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-i386.sdk/include/openssl ${CURRENTPATH}/include/
    echo "Building done."
    echo "Cleaning up..."
    rm -rf ${CURRENTPATH}/src/openssl-${VERSION}
    rm -r ${CURRENTPATH}/src
    echo "Done."