forked from microsoft/cpprestsdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfigure.sh
executable file
·165 lines (146 loc) · 6.13 KB
/
configure.sh
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