1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
#!/usr/bin/env bash
set -e
usage() {
echo "Usage: configure.sh [-build_type type] [-deployment_target version] [-config_only] [-include_32bit] [-no_bitcode]"
echo " -build_type defines the CMAKE_BUILD_TYPE used. Defaults to Release."
echo " -deployment_target defines minimum iOS Deployment Target. The default is dependent on ios.toolchain.cmake and currently defaults to 8.0"
echo " -config_only only configures cmake (no make invoked)."
echo " -include_32bit includes the 32-bit arm architectures."
echo " -no_bitcode disables bitcode"
echo " -clean deletes build directory prior to configuring"
}
ABS_PATH="`dirname \"$0\"`" # relative
ABS_PATH="`( cd \"${ABS_PATH}\" && pwd )`" # absolutized and normalized
# Make sure that the path to this file exists and can be retrieved!
if [ -z "${ABS_PATH}" ]; then
echo "Could not fetch the ABS_PATH."
exit 1
fi
CONFIG_ONLY=0
INCLUDE_32BIT=""
DISABLE_BITCODE=""
DEPLOYMENT_TARGET=""
CLEAN=0
# Command line argument parsing
while (( "$#" )); do
case "$1" in
-build_type)
if [ "$#" -lt 2 ] || [[ "$2" == -* ]] ; then
usage
echo "Error: argument $1 expecting a value to follow."
exit 1
fi
CPPRESTSDK_BUILD_TYPE=$2
shift 2
;;
-deployment_target)
if [ "$#" -lt 2 ] || [[ "$2" == -* ]] ; then
usage
echo "Error: argument $1 expecting a value to follow."
exit 1
fi
DEPLOYMENT_TARGET="-DDEPLOYMENT_TARGET=$2"
shift 2
;;
-config_only)
CONFIG_ONLY=1
shift 1
;;
-include_32bit)
INCLUDE_32BIT="-DINCLUDE_32BIT=ON"
shift 1
;;
-no_bitcode)
DISABLE_BITCODE="-DDISABLE_BITCODE=ON"
shift 1
;;
-clean)
CLEAN=1
shift 1
;;
*)
usage
echo "Error: unsupported argument $1"
exit 1
;;
esac
done
## Configuration
DEFAULT_BOOST_VERSION=1.69.0
DEFAULT_OPENSSL_VERSION=1.1.0k
BOOST_VERSION=${BOOST_VERSION:-${DEFAULT_BOOST_VERSION}}
OPENSSL_VERSION=${OPENSSL_VERSION:-${DEFAULT_OPENSSL_VERSION}}
CPPRESTSDK_BUILD_TYPE=${CPPRESTSDK_BUILD_TYPE:-Release}
############################ No need to edit anything below this line
## Set some needed variables
IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version`
## Buildsteps below
## Fetch submodules just in case
git submodule update --init
## Build Boost
if [ ! -e $ABS_PATH/boost.framework ] && [ ! -d $ABS_PATH/boost ]; then
if [ ! -d "${ABS_PATH}/Apple-Boost-BuildScript" ]; then
git clone https://github.com/faithfracture/Apple-Boost-BuildScript ${ABS_PATH}/Apple-Boost-BuildScript
fi
pushd ${ABS_PATH}/Apple-Boost-BuildScript
git checkout 8c42427b4ebc7865eb99b0a0b9607888af2c6abc
BOOST_LIBS="thread chrono filesystem regex system random" ./boost.sh -ios -tvos --boost-version $BOOST_VERSION
popd
mv ${ABS_PATH}/Apple-Boost-BuildScript/build/boost/${BOOST_VERSION}/ios/framework/boost.framework ${ABS_PATH}
mv ${ABS_PATH}/boost.framework/Versions/A/Headers ${ABS_PATH}/boost.headers
mkdir -p ${ABS_PATH}/boost.framework/Versions/A/Headers
mv ${ABS_PATH}/boost.headers ${ABS_PATH}/boost.framework/Versions/A/Headers/boost
fi
## Build OpenSSL
if [ ! -e ${ABS_PATH}/openssl/lib/libcrypto.a ]; then
if [ ! -d "${ABS_PATH}/OpenSSL-for-iPhone" ]; then
git clone --depth=1 https://github.com/x2on/OpenSSL-for-iPhone.git ${ABS_PATH}/OpenSSL-for-iPhone
fi
pushd ${ABS_PATH}/OpenSSL-for-iPhone
git checkout 6c665e2a15ba7e834875eecaf4eb93c11605dd9a
./build-libssl.sh --version=${OPENSSL_VERSION}
popd
mkdir -p ${ABS_PATH}/openssl/lib
if [ -e ${ABS_PATH}/OpenSSL-for-iPhone/bin/iPhoneOS${IOS_SDK_VERSION}-arm64.sdk/include ]
then
cp -r ${ABS_PATH}/OpenSSL-for-iPhone/bin/iPhoneOS${IOS_SDK_VERSION}-arm64.sdk/include ${ABS_PATH}/openssl
else
echo 'Could not find OpenSSL for iPhone'
exit 1
fi
cp ${ABS_PATH}/OpenSSL-for-iPhone/include/LICENSE ${ABS_PATH}/openssl
lipo -create -output ${ABS_PATH}/openssl/lib/libssl.a ${ABS_PATH}/OpenSSL-for-iPhone/bin/iPhone*/lib/libssl.a
lipo -create -output ${ABS_PATH}/openssl/lib/libcrypto.a ${ABS_PATH}/OpenSSL-for-iPhone/bin/iPhone*/lib/libcrypto.a
fi
## Fetch CMake toolchain
if [ ! -e ${ABS_PATH}/ios-cmake/ios.toolchain.cmake ]; then
if [ ! -d "${ABS_PATH}/ios-cmake" ]; then
git clone https://github.com/leetal/ios-cmake ${ABS_PATH}/ios-cmake
fi
pushd ${ABS_PATH}/ios-cmake
git checkout 2.1.2
popd
fi
## Build CPPRestSDK
if [ -d "${ABS_PATH}/build.${CPPRESTSDK_BUILD_TYPE}.ios" ]; then
if [ "$CLEAN" -eq 1 ]; then
echo "Removing directory ${ABS_PATH}/build.${CPPRESTSDK_BUILD_TYPE}.ios prior to configuring."
rm -rf "${ABS_PATH}/build.${CPPRESTSDK_BUILD_TYPE}.ios"
else
printf "WARNING: Running configure on an already existing configuration.\nAny changes to the existing configuration will not be picked up.\nEither remove the directory and re-run configure or run configure with the -clean flag.\n\n"
fi
fi
mkdir -p ${ABS_PATH}/build.${CPPRESTSDK_BUILD_TYPE}.ios
pushd ${ABS_PATH}/build.${CPPRESTSDK_BUILD_TYPE}.ios
cmake -DCMAKE_BUILD_TYPE=${CPPRESTSDK_BUILD_TYPE} .. ${INCLUDE_32BIT} ${DISABLE_BITCODE} ${DEPLOYMENT_TARGET}
if [ "$CONFIG_ONLY" -eq 0 ]; then
make
printf "\n\n===================================================================================\n"
echo ">>>> The final library is available in 'build.${CPPRESTSDK_BUILD_TYPE}.ios/lib/libcpprest.a'"
printf "===================================================================================\n\n"
else
printf "\n\n===================================================================================\n"
echo ">>>> Configuration complete. Run 'make' in 'build.${CPPRESTSDK_BUILD_TYPE}.ios' to build."
printf "===================================================================================\n\n"
fi
popd
|