-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbuild_ios_libs.sh
executable file
·274 lines (202 loc) · 10.6 KB
/
build_ios_libs.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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
set -x #echo on
# configuring paths
# Get the full path to the script file
SCRIPT_PATH=$(realpath "$0")
# Extract the directory path
MOBILE_PROJECT_ROOT=$(dirname "$SCRIPT_PATH")
export ZANO_MOBILE_IOS_BOOST_VERSION_STR="Boost 1.76.0"
export ZANO_MOBILE_IOS_BOOST_ROOT="$MOBILE_PROJECT_ROOT/_libs_ios/boost"
export ZANO_MOBILE_IOS_BOOST_INCLUDE_PATH="$ZANO_MOBILE_IOS_BOOST_ROOT/include"
# this path is not actually used for linking, in that case it more just to confuse cmake and let it go
export ZANO_MOBILE_IOS_BOOST_LIBRARY_PATH="$MOBILE_PROJECT_ROOT/_libs_ios/boost/lib"
export ZANO_OPENSSL_ROOT="$MOBILE_PROJECT_ROOT/_libs_ios/OpenSSL"
export ZANO_PATH="$MOBILE_PROJECT_ROOT/zano"
export NO_DEFAULT_PATH
echo "Boost Version: $ZANO_MOBILE_IOS_BOOST_VERSION_STR"
echo "Boost Include: $ZANO_MOBILE_IOS_BOOST_LIBRARY_PATH"
echo "Boost Lib: $ZANO_MOBILE_IOS_BOOST_INCLUDE_PATH"
echo "Native Zano: $ZANO_PATH"
echo "OpenSSL: $OPENSSL_CRYPTO_LIBRARY"
echo "==============================================================================="
echo "Building..."
echo "Folder is: $ZANO_PATH"
cd "$ZANO_PATH"
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
CONFIG_TYPE="$1"
if [ -z "$CONFIG_TYPE" ]; then
CONFIG_TYPE="Release"
fi
echo "Config type: $CONFIG_TYPE"
export ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64="$MOBILE_PROJECT_ROOT/_builds_ios/arm64"
export ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64="$MOBILE_PROJECT_ROOT/_install_ios/arm64"
export ZANO_MOBILE_IOS_BUILD_FOLDER_x86_64="$MOBILE_PROJECT_ROOT/_builds_ios/x86_64"
export ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64="$MOBILE_PROJECT_ROOT/_install_ios/x86_64"
export ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64_SIMULATOR="$MOBILE_PROJECT_ROOT/_builds_ios/arm64_simulator"
export ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR="$MOBILE_PROJECT_ROOT/_install_ios/arm64_simulator"
export ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_x86_64_SIMULATOR_TEMP="$MOBILE_PROJECT_ROOT/_install_ios/arm64_x86_64_simulator_temp"
export ZANO_MOBILE_IOS_INSTALL_FOLDER="$MOBILE_PROJECT_ROOT/_install_ios"
rm -r "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib"
rm -r "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_x86_64_SIMULATOR_TEMP}/lib"
#if false; then ###### delete this
echo "Building ARM64...."
export OPENSSL_INCLUDE_DIR="$ZANO_OPENSSL_ROOT/iphoneos/include"
export OPENSSL_CRYPTO_LIBRARY="$ZANO_OPENSSL_ROOT/iphoneos/lib/libcrypto.a"
export OPENSSL_SSL_LIBRARY="$ZANO_OPENSSL_ROOT/iphoneos/lib/libssl.a"
rm -r "${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64}" # ../_builds_ios
rm -r "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}" #../_install_ios
mkdir -p "${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64}"
mkdir -p "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}"
cmake -DCMAKE_BUILD_TYPE=$CONFIG_TYPE \
-DCMAKE_TOOLCHAIN_FILE="${MOBILE_PROJECT_ROOT}/ios-cmake/ios.toolchain.cmake" \
-DPLATFORM=OS64 \
-S"${ZANO_PATH}" \
-B"${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64}" \
-GXcode \
-DOPENSSL_INCLUDE_DIR="${OPENSSL_INCLUDE_DIR}" \
-DOPENSSL_CRYPTO_LIBRARY="${OPENSSL_CRYPTO_LIBRARY}" \
-DOPENSSL_SSL_LIBRARY="${OPENSSL_SSL_LIBRARY}" \
-DBoost_VERSION="${ZANO_MOBILE_IOS_BOOST_VERSION_STR}" \
-DBoost_LIBRARY_DIRS="${ZANO_MOBILE_IOS_BOOST_LIBRARY_PATH}" \
-DBoost_INCLUDE_DIRS="${ZANO_MOBILE_IOS_BOOST_INCLUDE_PATH}" \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_INSTALL_PREFIX="${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}" \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DDISABLE_TOR=TRUE
# -DCMAKE_OSX_ARCHITECTURES="arm64"
# -DCMAKE_IOS_INSTALL_COMBINED=YES
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
cmake --build "${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64}" --config $CONFIG_TYPE --target install -- -j 4
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
#fi ###### delete this
############# Build for x86_64 #######################################
#if false; then ###### delete this
echo "Building x86_64...."
export OPENSSL_INCLUDE_DIR="$ZANO_OPENSSL_ROOT/iphonesimulator/include"
export OPENSSL_CRYPTO_LIBRARY="$ZANO_OPENSSL_ROOT/iphonesimulator/lib/libcrypto.a"
export OPENSSL_SSL_LIBRARY="$ZANO_OPENSSL_ROOT/iphonesimulator/lib/libssl.a"
rm -r "${ZANO_MOBILE_IOS_BUILD_FOLDER_x86_64}" #../_builds_ios
rm -r "${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}" #../_install_ios
mkdir -p "${ZANO_MOBILE_IOS_BUILD_FOLDER_x86_64}"
mkdir -p "${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}"
cmake -DCMAKE_BUILD_TYPE=$CONFIG_TYPE \
-DCMAKE_TOOLCHAIN_FILE="${MOBILE_PROJECT_ROOT}/ios-cmake/ios.toolchain.cmake" \
-DPLATFORM=SIMULATOR64 \
-S"${ZANO_PATH}" \
-B"${ZANO_MOBILE_IOS_BUILD_FOLDER_x86_64}" \
-GXcode \
-DOPENSSL_INCLUDE_DIR="${OPENSSL_INCLUDE_DIR}" \
-DOPENSSL_CRYPTO_LIBRARY="${OPENSSL_CRYPTO_LIBRARY}" \
-DOPENSSL_SSL_LIBRARY="${OPENSSL_SSL_LIBRARY}" \
-DBoost_VERSION="${ZANO_MOBILE_IOS_BOOST_VERSION_STR}" \
-DBoost_LIBRARY_DIRS="${ZANO_MOBILE_IOS_BOOST_LIBRARY_PATH}" \
-DBoost_INCLUDE_DIRS="${ZANO_MOBILE_IOS_BOOST_INCLUDE_PATH}" \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_INSTALL_PREFIX="${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}" \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DDISABLE_TOR=TRUE
# -DCMAKE_OSX_ARCHITECTURES="x86_64" \
# -DCMAKE_IOS_INSTALL_COMBINED=YES
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
cmake --build "${ZANO_MOBILE_IOS_BUILD_FOLDER_x86_64}" --config $CONFIG_TYPE --target install -- -j 4
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
#fi ###### delete this
############# Build for arm64_simulator #######################################
#if false; then ###### delete this
echo "Building arm64_simulator...."
export OPENSSL_INCLUDE_DIR="$ZANO_OPENSSL_ROOT/iphonesimulator/include"
export OPENSSL_CRYPTO_LIBRARY="$ZANO_OPENSSL_ROOT/iphonesimulator/lib/libcrypto.a"
export OPENSSL_SSL_LIBRARY="$ZANO_OPENSSL_ROOT/iphonesimulator/lib/libssl.a"
rm -r "${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64_SIMULATOR}" #../_builds_ios
rm -r "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR}" #../_install_ios
mkdir -p "${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64_SIMULATOR}"
mkdir -p "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR}"
cmake -DCMAKE_BUILD_TYPE=$CONFIG_TYPE \
-DCMAKE_TOOLCHAIN_FILE="${MOBILE_PROJECT_ROOT}/ios-cmake/ios.toolchain.cmake" \
-DPLATFORM=SIMULATORARM64 \
-S"${ZANO_PATH}" \
-B"${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64_SIMULATOR}" \
-GXcode \
-DOPENSSL_INCLUDE_DIR="${OPENSSL_INCLUDE_DIR}" \
-DOPENSSL_CRYPTO_LIBRARY="${OPENSSL_CRYPTO_LIBRARY}" \
-DOPENSSL_SSL_LIBRARY="${OPENSSL_SSL_LIBRARY}" \
-DBoost_VERSION="${ZANO_MOBILE_IOS_BOOST_VERSION_STR}" \
-DBoost_LIBRARY_DIRS="${ZANO_MOBILE_IOS_BOOST_LIBRARY_PATH}" \
-DBoost_INCLUDE_DIRS="${ZANO_MOBILE_IOS_BOOST_INCLUDE_PATH}" \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_INSTALL_PREFIX="${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR}" \
-DCMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH=NO \
-DDISABLE_TOR=TRUE
# -DCMAKE_OSX_ARCHITECTURES="x86_64" \
# -DCMAKE_IOS_INSTALL_COMBINED=YES
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
cmake --build "${ZANO_MOBILE_IOS_BUILD_FOLDER_ARM64_SIMULATOR}" --config $CONFIG_TYPE --target install -- -j 4
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
#fi ###### delete this
mkdir -p "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_x86_64_SIMULATOR_TEMP}/lib"
# due to the conflict between names in openssl/libcrypto.a and zano/libcrypto.a we're renaming our lib before creating xcframowork
mv "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}/lib/libcrypto.a" "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}/lib/libcrypto_.a"
mv "${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}/lib/libcrypto.a" "${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}/lib/libcrypto_.a"
mv "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR}/lib/libcrypto.a" "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR}/lib/libcrypto_.a"
mkdir "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib"
libs_list=("libcommon.a" "libwallet.a" "libcrypto_.a" "libcurrency_core.a" "libz.a")
for LIB_NAME in "${libs_list[@]}"
do
echo "Creating xcframwork for: $LIB_NAME"
#create a temporary lib with both x86_64 simulator libs and ARM64 simulator libs
lipo -create "${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}/lib/$LIB_NAME" "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_SIMULATOR}/lib/$LIB_NAME" -output "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_x86_64_SIMULATOR_TEMP}/lib/$LIB_NAME"
if [ $? -ne 0 ]; then
echo "Failed to lipo -create"
exit 1
fi
if [ "$LIB_NAME" = "libwallet.a" ]; then
echo "making header for wallet lib"
export ZANO_WALLET_HEADERS_PATH="-headers $ZANO_PATH/src/wallet"
else
export ZANO_WALLET_HEADERS_PATH=""
fi
echo "ZANO_WALLET_HEADERS_PATH: $ZANO_WALLET_HEADERS_PATH"
xcodebuild -create-xcframework -library "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}/lib/$LIB_NAME" $ZANO_WALLET_HEADERS_PATH -library "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64_x86_64_SIMULATOR_TEMP}/lib/$LIB_NAME" $ZANO_WALLET_HEADERS_PATH -output "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib/${LIB_NAME}.xcframework"
#xcodebuild -create-xcframework -library "${ZANO_MOBILE_IOS_INSTALL_FOLDER_ARM64}/lib/$LIB_NAME" -library "${ZANO_MOBILE_IOS_INSTALL_FOLDER_x86_64}/lib/$LIB_NAME" -output "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib/${LIB_NAME}.xcframework"
if [ $? -ne 0 ]; then
echo "Failed to xcodebuild -create-xcframework"
exit 1
fi
done
echo "Creating xcframwork for: OpenSSL"
xcodebuild -create-xcframework -library "$ZANO_OPENSSL_ROOT/iphoneos/lib/libcrypto.a" -library "$ZANO_OPENSSL_ROOT/iphonesimulator/lib/libcrypto.a" -output "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib/thirdparty/openssl/libcrypto.xcframework"
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
xcodebuild -create-xcframework -library "$ZANO_OPENSSL_ROOT/iphoneos/lib/libssl.a" -library "$ZANO_OPENSSL_ROOT/iphonesimulator/lib/libssl.a" -output "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib/thirdparty/openssl/libssl.xcframework"
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi
echo "Creating xcframwork for: Boost"
xcodebuild -create-xcframework -library "${ZANO_MOBILE_IOS_BOOST_ROOT}/stage/iphoneos/libboost.a" -library "${ZANO_MOBILE_IOS_BOOST_ROOT}/stage/iphonesimulator/libboost.a" -output "${ZANO_MOBILE_IOS_INSTALL_FOLDER}/lib/thirdparty/libboost.xcframework"
if [ $? -ne 0 ]; then
echo "Failed to perform command"
exit 1
fi