Skip to content

Commit cae484b

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

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
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 INDY_SDK_DIR=$WORK_DIR/sovtoken-indy-sdk
13+
export LIBS_DIR=$WORK_DIR/libs
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+
pushd $LIBS_DIR
63+
for TARGET in ${IOS_TARGETS[*]}; do
64+
ARCH=$(extract_arch $TARGET)
65+
DESTINATION=${LIB_NAME}/${ARCH}
66+
67+
mkdir -p $DESTINATION
68+
lipo -extract ${ARCH} $FILE_PATH -o $DESTINATION/$LIB_FILE_NAME-fat.a
69+
lipo $DESTINATION/$LIB_FILE_NAME-fat.a -thin $ARCH -output $DESTINATION/$LIB_FILE_NAME.a
70+
rm $DESTINATION/$LIB_FILE_NAME-fat.a
71+
done
72+
popd
73+
}
74+
75+
checkout_indy_sdk() {
76+
if [ ! -d $INDY_SDK_DIR ]; then
77+
git clone https://github.com/hyperledger/indy-sdk $INDY_SDK_DIR
78+
fi
79+
80+
pushd $INDY_SDK_DIR
81+
git fetch --all
82+
git checkout $INDY_VERSION
83+
popd
84+
}
85+
86+
build_libindy() {
87+
pushd $INDY_SDK_DIR/libindy
88+
cargo lipo --release --targets="aarch64-apple-ios,x86_64-apple-ios"
89+
popd
90+
}
91+
92+
copy_libindy_architectures() {
93+
for TARGET in ${IOS_TARGETS[*]}; do
94+
ARCH=$(extract_arch $TARGET)
95+
96+
mkdir -p $LIBS_DIR/indy/$ARCH
97+
cp -v $INDY_SDK_DIR/libindy/target/$TARGET/release/libindy.a $LIBS_DIR/indy/$ARCH/libindy.a
98+
done
99+
}
100+
101+
build_libsovtoken() {
102+
pushd $LIBSOV_DIR
103+
to_combine=""
104+
for TARGET in ${IOS_TARGETS[*]}
105+
do
106+
export LIBINDY_DIR=${LIBS_DIR}/indy/$(extract_arch $TARGET)
107+
cargo lipo --release --verbose --targets="${TARGET}"
108+
109+
mv ./target/$TARGET/release/libsovtoken.a ./target/$TARGET/libsovtoken-unstripped.a
110+
strip -S -x -o ./target/$TARGET/libsovtoken.a -r ./target/$TARGET/libsovtoken-unstripped.a
111+
112+
to_combine="${to_combine} ./target/${TARGET}/libsovtoken.a"
113+
114+
mkdir -p ./target/universal/release
115+
lipo -create $to_combine -o ./target/universal/release/libsovtoken.a
116+
cp ./target/universal/release/libsovtoken.a ./target/universal/libsovtoken-unstripped.a
117+
strip -S -x -o ./target/universal/libsovtoken.a -r ./target/universal/libsovtoken-unstripped.a
118+
119+
BUILD_TIME=$(date -u "+%Y%m%d%H%M")
120+
GIT_REV=$(git rev-parse --short HEAD)
121+
LIBSOVTOKEN_VER=$(grep ^version Cargo.toml | head -n 1 | cut -d '"' -f 2)
122+
mv target libsovtoken
123+
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'`
124+
mv libsovtoken target
125+
done
126+
popd
127+
}
128+
129+
prepare_openssl_dir
130+
build_crypto
131+
132+
extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libssl.a libssl openssl
133+
extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libcrypto.a libcrypto openssl
134+
135+
checkout_indy_sdk
136+
build_libindy
137+
copy_libindy_architectures
138+
139+
build_libsovtoken

0 commit comments

Comments
 (0)