Skip to content

Commit f88b9b2

Browse files
committed
Fix iOS build
Signed-off-by: Miroslav Kovar <[email protected]>
1 parent 50061a4 commit f88b9b2

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#!/bin/sh
2+
set -xev
3+
4+
export PKG_CONFIG_ALLOW_CROSS=1
5+
export CARGO_INCREMENTAL=1
6+
export RUST_LOG=indy=trace
7+
export RUST_TEST_THREADS=1
8+
export INDY_VERSION=v1.16.0
9+
export IOS_TARGETS="aarch64-apple-ios x86_64-apple-ios"
10+
export WORK_DIR="${PWD}/../../../.macosbuild"
11+
export LIBSOV_DIR="${PWD}/../../.."
12+
export LIBS_DIR=$WORK_DIR/libs
13+
export INDY_SDK_DIR=$WORK_DIR/sovtoken-indy-sdk
14+
15+
mkdir -p ${WORK_DIR}
16+
mkdir -p ${LIBS_DIR}
17+
18+
prepare_openssl_dir() {
19+
OPENSSL_BASE_DIR=$(brew --cellar openssl)
20+
for f in $(ls -t "$OPENSSL_BASE_DIR"); do
21+
local ABSOLUTE_FILE_PATH="${OPENSSL_BASE_DIR}/${f}"
22+
if [ -d "$ABSOLUTE_FILE_PATH" ] && [ -d "$ABSOLUTE_FILE_PATH/lib" ]; then
23+
export OPENSSL_VERSION=$f
24+
export OPENSSL_DIR=$ABSOLUTE_FILE_PATH
25+
break
26+
fi
27+
done
28+
if [ -z "$OPENSSL_VERSION" ]; then
29+
echo >&2 "Error: Failed to find an OpenSSL installation in $OPENSSL_BASE_DIR"
30+
exit 1
31+
else
32+
echo "Found OpenSSL version $OPENSSL_VERSION"
33+
fi
34+
}
35+
36+
extract_arch() {
37+
case $1 in
38+
aarch64-apple-ios) echo "arm64" ;;
39+
x86_64-apple-ios) echo "x86_64" ;;
40+
\?) exit 1
41+
esac
42+
}
43+
44+
build_crypto() {
45+
if [ ! -d $WORK_DIR/OpenSSL-for-iPhone ]; then
46+
git clone https://github.com/x2on/OpenSSL-for-iPhone.git $WORK_DIR/OpenSSL-for-iPhone
47+
fi
48+
49+
if [ ! -d $WORK_DIR/OpenSSL-for-iPhone/lib ]; then
50+
pushd $WORK_DIR/OpenSSL-for-iPhone
51+
./build-libssl.sh --version=$OPENSSL_VERSION
52+
export OPENSSL_LOCAL_CONFIG_DIR="$PWD/config"
53+
popd
54+
fi
55+
}
56+
57+
extract_architectures() {
58+
FILE_PATH=$1
59+
LIB_FILE_NAME=$2
60+
LIB_NAME=$3
61+
62+
echo FILE_PATH=$FILE_PATH
63+
echo LIB_FILE_NAME=$LIB_FILE_NAME
64+
65+
pushd $LIBS_DIR
66+
for TARGET in ${IOS_TARGETS[*]}; do
67+
ARCH=$(extract_arch $TARGET)
68+
DESTINATION=${LIB_NAME}/${ARCH}
69+
70+
mkdir -p $DESTINATION
71+
lipo -extract ${ARCH} $FILE_PATH -o $DESTINATION/$LIB_FILE_NAME-fat.a
72+
lipo $DESTINATION/$LIB_FILE_NAME-fat.a -thin $ARCH -output $DESTINATION/$LIB_FILE_NAME.a
73+
rm $DESTINATION/$LIB_FILE_NAME-fat.a
74+
done
75+
popd
76+
}
77+
78+
checkout_indy_sdk() {
79+
if [ ! -d $INDY_SDK_DIR ]; then
80+
git clone https://github.com/hyperledger/indy-sdk $INDY_SDK_DIR
81+
fi
82+
83+
pushd $INDY_SDK_DIR
84+
git fetch --all
85+
git checkout $INDY_VERSION
86+
popd
87+
}
88+
89+
build_libindy() {
90+
TRIPLETS="aarch64-apple-ios,x86_64-apple-ios"
91+
92+
pushd $INDY_SDK_DIR/libindy
93+
cargo lipo --release --targets="${TRIPLETS}"
94+
popd
95+
}
96+
97+
copy_libindy_architectures() {
98+
for TARGET in ${IOS_TARGETS[*]}; do
99+
ARCH=$(extract_arch $TARGET)
100+
101+
mkdir -p $LIBS_DIR/indy/$ARCH
102+
cp -v $INDY_SDK_DIR/libindy/target/$TARGET/release/libindy.a $LIBS_DIR/indy/$ARCH/libindy.a
103+
done
104+
}
105+
106+
build_libsovtoken() {
107+
pushd $LIBSOV_DIR
108+
to_combine=""
109+
for TARGET in ${IOS_TARGETS[*]}
110+
do
111+
export LIBINDY_DIR=${LIBS_DIR}/indy/$(extract_arch $TARGET)
112+
cargo lipo --release --verbose --targets="${TARGET}"
113+
114+
mv ./target/$TARGET/release/libsovtoken.a ./target/$TARGET/libsovtoken-unstripped.a
115+
strip -S -x -o ./target/$TARGET/libsovtoken.a -r ./target/$TARGET/libsovtoken-unstripped.a
116+
117+
to_combine="${to_combine} ./target/${TARGET}/libsovtoken.a"
118+
119+
mkdir -p ./target/universal/release
120+
lipo -create $to_combine -o ./target/universal/release/libsovtoken.a
121+
cp ./target/universal/release/libsovtoken.a ./target/universal/libsovtoken-unstripped.a
122+
strip -S -x -o ./target/universal/libsovtoken.a -r ./target/universal/libsovtoken-unstripped.a
123+
124+
BUILD_TIME=$(date -u "+%Y%m%d%H%M")
125+
GIT_REV=$(git rev-parse --short HEAD)
126+
LIBSOVTOKEN_VER=$(grep ^version Cargo.toml | head -n 1 | cut -d '"' -f 2)
127+
mv target libsovtoken
128+
zip -qq "libsovtoken_${LIBSOVTOKEN_VER}-${BUILD_TIME}-${GIT_REV}_all.zip" `find libsovtoken -type f -name "libsovtoken.a" | egrep '(ios|universal)' | egrep -v 'deps|debug|release'`
129+
mv libsovtoken target
130+
131+
done
132+
popd
133+
}
134+
135+
prepare_openssl_dir
136+
build_crypto
137+
138+
extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libssl.a libssl openssl
139+
extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libcrypto.a libcrypto openssl
140+
141+
checkout_indy_sdk
142+
build_libindy
143+
copy_libindy_architectures
144+
145+
build_libsovtoken

0 commit comments

Comments
 (0)