-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild-ios.sh
More file actions
executable file
·191 lines (153 loc) · 6.84 KB
/
Copy pathbuild-ios.sh
File metadata and controls
executable file
·191 lines (153 loc) · 6.84 KB
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
#!/usr/bin/env bash
set -e
VERSION=$1
if [[ -z ${VERSION} ]]; then
echo "Missing VERSION as first parameter"
exit 99
fi
. ./common.sh #source-only
download_openssl
## --------------------
## Parameters
## --------------------
IOS_SDK=18.4
MIN_IOS=14.0
IOS_ARCHS="x86_64 arm64 sim_arm64"
## --------------------
## Variables
## --------------------
DEVELOPER_DIR=`xcode-select -print-path`
if [[ ! -d ${DEVELOPER_DIR} ]]; then
echo "Please set up Xcode correctly. '${DEVELOPER_DIR}' is not a valid developer tools folder."
exit 1
fi
if [[ ! -d "${DEVELOPER_DIR}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk" ]]; then
echo "The iOS SDK ${IOS_SDK} was not found."
exit 1
fi
## --------------------
## Functions
## --------------------
function build_ios() {
log_title "iOS Build"
echo "Using iOS SDK ${IOS_SDK}"
echo "Using iOS min version ${MIN_IOS}"
echo "Xcode Developer directory ${DEVELOPER_DIR}"
for ARCH in ${IOS_ARCHS}; do
log_title "$ARCH"
local PLATFORM="iPhoneOS"
local COMPILER="iphoneos-cross"
if [[ "$ARCH" == "arm64" || "$ARCH" == "arm64e" ]]; then
COMPILER="ios64-cross"
ADDITIONAL_CC_ARGUMENTS="-miphoneos-version-min=${MIN_IOS}"
fi
if [[ "$ARCH" == "i386" || "$ARCH" == "x86_64" || "$ARCH" == "sim_arm64" ]]; then
PLATFORM="iPhoneSimulator"
if [[ "$ARCH" == "sim_arm64" ]]; then
ARCH="arm64"
COMPILER="iossimulator-xcrun"
ADDITIONAL_CC_ARGUMENTS="-mios-simulator-version-min=${MIN_IOS}"
fi
fi
local SRC_DIR="${BUILD_DIR}/${PLATFORM}-${ARCH}"
local LOG_FILE="${SRC_DIR}/${PLATFORM}${IOS_SDK}-${ARCH}.log"
export CROSS_TOP="${DEVELOPER_DIR}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}.sdk"
export CROSS_SYSROOT="${CROSS_TOP}/SDKs/${CROSS_SDK}"
export CC="clang -arch ${ARCH} ${ADDITIONAL_CC_ARGUMENTS} -isysroot ${CROSS_SYSROOT}"
# indicate new build
echo ">>>"
echo "Using CROSS_TOP: ${CROSS_TOP}"
echo "Using CROSS_SDK: ${CROSS_SDK}"
echo "Using CROSS_SYSROOT: ${CROSS_SYSROOT}"
# folder, zip, target, target dir
unarchive ${OPENSSL_NAME} ${OPENSSL_PATH} "${PLATFORM}-${ARCH}" ${SRC_DIR}
#if [[ "$ARCH" == "arm64" ]]; then
# local TARGET_PATCH_FILE="${SRC_DIR}/Configurations/15-ios.conf"
# echo "Patch ${TARGET_PATCH_FILE}"
# patch ${TARGET_PATCH_FILE} "./15-ios.conf.patch"
# fi
echo "Configuring ${PLATFORM}-${ARCH}..."
(cd "${SRC_DIR}"; ./Configure "${COMPILER}" ${OPENSSL_CONFIG_OPTIONS} > "${LOG_FILE}" 2>&1)
# Patch Makefile
if [[ "${ARCH}" == "x86_64" ]]; then
sed -ie "s/^CFLAG= -/CFLAG= -miphoneos-version-min=$MIN_IOS -DOPENSSL_NO_ASM -/" "$SRC_DIR/Makefile"
else
sed -ie "s/^CFLAG= -/CFLAG= -miphoneos-version-min=$MIN_IOS -/" "$SRC_DIR/Makefile"
fi
# Patch versions
#sed -ie "s/^# define OPENSSL_VERSION_NUMBER.*$/# define OPENSSL_VERSION_NUMBER $FAKE_NIBBLE/" "$SRC_DIR/crypto/opensslv.h"
#sed -ie "s/^# define OPENSSL_VERSION_TEXT.*$/# define OPENSSL_VERSION_TEXT \"$FAKE_TEXT\"/" "$SRC_DIR/crypto/opensslv.h"
echo "Building ${PLATFORM}-${ARCH}..."
(cd "${SRC_DIR}"; make >> "${LOG_FILE}" 2>&1)
unset CROSS_TOP
unset CROSS_SDK
unset CC
done
}
function distribute_ios() {
log_title "Distribute iOS"
local PLATFORM="iOS"
local NAME="${PLATFORM}"
local DIR="${DIST_DIR}/${NAME}/openssl"
local FILES="libcrypto.a libssl.a"
mkdir -p "${DIR}/include"
mkdir -p "${DIR}/lib"
#echo "$VERSION" > "$DIR/VERSION"
#cp "$BUILD_DIR/iPhoneSimulator-i386/LICENSE" "$DIR"
cp -LR "${BUILD_DIR}/iPhoneSimulator-x86_64/include/" "${DIR}/include"
# Alter rsa.h to make Swift happy
sed -i .bak 's/const BIGNUM \*I/const BIGNUM *i/g' "${DIR}/include/openssl/rsa.h"
echo "Combine library files"
for f in ${FILES}; do
local OUTPUT_FILE=${DIR}/lib/${f}
lipo -create \
"${BUILD_DIR}/iPhoneSimulator-x86_64/${f}" \
"${BUILD_DIR}/iPhoneSimulator-arm64/${f}" \
-output ${OUTPUT_FILE}
echo "Created ${OUTPUT_FILE}"
echo "Architectues: $(lipo -info ${OUTPUT_FILE})"
done
echo "Create iOS-Framework "
local FRAMEWORK_DIR=${DIST_DIR}/Framework-iOS
mkdir -p ${FRAMEWORK_DIR}/Openssl.framework/Headers
mkdir -p ${FRAMEWORK_DIR}/Ssl.framework/Headers
mkdir -p ${FRAMEWORK_DIR}/Ssl.framework/Include/openssl
mkdir -p ${FRAMEWORK_DIR}/Crypto.framework
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR}/Openssl.framework/Headers/
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR}/Ssl.framework/Headers/
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR}/Ssl.framework/Include/openssl/
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR}/Crypto.framework/Headers/
copy "${BUILD_DIR}/iPhoneOS-arm64/libssl.a" "${FRAMEWORK_DIR}/Openssl.framework/Ssl"
copy "${BUILD_DIR}/iPhoneOS-arm64/libssl.a" "${FRAMEWORK_DIR}/Ssl.framework/Ssl"
copy "${BUILD_DIR}/iPhoneOS-arm64/libcrypto.a" "${FRAMEWORK_DIR}/Openssl.framework/Crypto"
copy "${BUILD_DIR}/iPhoneOS-arm64/libcrypto.a" "${FRAMEWORK_DIR}/Crypto.framework/Crypto"
echo "Create iOS Simulator-Framework"
local FRAMEWORK_DIR_SIMULATOR=${DIST_DIR}/Framework-Simulator
mkdir -p ${FRAMEWORK_DIR_SIMULATOR}/Openssl.framework/Headers
mkdir -p ${FRAMEWORK_DIR_SIMULATOR}/Ssl.framework/Headers
mkdir -p ${FRAMEWORK_DIR_SIMULATOR}/Ssl.framework/Include/openssl
mkdir -p ${FRAMEWORK_DIR_SIMULATOR}/Crypto.framework
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR_SIMULATOR}/Openssl.framework/Headers/
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR_SIMULATOR}/Ssl.framework/Headers/
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR_SIMULATOR}/Ssl.framework/Include/openssl/
cp -LR ${DIR}/include/openssl/ ${FRAMEWORK_DIR_SIMULATOR}/Crypto.framework/Headers/
copy "${DIR}/lib/libssl.a" "${FRAMEWORK_DIR_SIMULATOR}/Openssl.framework/Ssl"
copy "${DIR}/lib/libssl.a" "${FRAMEWORK_DIR_SIMULATOR}/Ssl.framework/Ssl"
copy "${DIR}/lib/libcrypto.a" "${FRAMEWORK_DIR_SIMULATOR}/Openssl.framework/Crypto"
copy "${DIR}/lib/libcrypto.a" "${FRAMEWORK_DIR_SIMULATOR}/Crypto.framework/Crypto"
echo "Create xc-Frameworks xcodebuild"
local XCFRAMEWORK_DIR=${DIST_DIR}/Framework-XC
mkdir -p ${XCFRAMEWORK_DIR}
xcodebuild -create-xcframework -framework ${FRAMEWORK_DIR_SIMULATOR}/Ssl.framework -framework ${FRAMEWORK_DIR}/Ssl.framework -output ${XCFRAMEWORK_DIR}/Ssl.xcframework
xcodebuild -create-xcframework -framework ${FRAMEWORK_DIR_SIMULATOR}/Crypto.framework -framework ${FRAMEWORK_DIR}/Crypto.framework -output ${XCFRAMEWORK_DIR}/Crypto.xcframework
}
function copy() {
echo "Copy ${1} => ${2}"
cp $1 $2
}
## --------------------
## Build (Main)
## --------------------
build_ios
distribute_ios