From cae484b9bda58642d6371eb52ee97a24bc7cabf6 Mon Sep 17 00:00:00 2001 From: Miroslav Kovar Date: Fri, 11 Jun 2021 15:40:11 +0200 Subject: [PATCH 1/2] Fix iOS build Signed-off-by: Miroslav Kovar --- .../build_scripts/ios/mac/mac.build.sh | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100755 libsovtoken/build_scripts/ios/mac/mac.build.sh diff --git a/libsovtoken/build_scripts/ios/mac/mac.build.sh b/libsovtoken/build_scripts/ios/mac/mac.build.sh new file mode 100755 index 00000000..451439a3 --- /dev/null +++ b/libsovtoken/build_scripts/ios/mac/mac.build.sh @@ -0,0 +1,139 @@ +#!/bin/sh +set -xev + +export PKG_CONFIG_ALLOW_CROSS=1 +export CARGO_INCREMENTAL=1 +export RUST_LOG=indy=trace +export RUST_TEST_THREADS=1 +export INDY_VERSION=v1.16.0 +export IOS_TARGETS="aarch64-apple-ios x86_64-apple-ios" +export WORK_DIR="${PWD}/../../../.macosbuild" +export LIBSOV_DIR="${PWD}/../../.." +export INDY_SDK_DIR=$WORK_DIR/sovtoken-indy-sdk +export LIBS_DIR=$WORK_DIR/libs + +mkdir -p ${WORK_DIR} +mkdir -p ${LIBS_DIR} + +prepare_openssl_dir() { + OPENSSL_BASE_DIR=$(brew --cellar openssl) + for f in $(ls -t "$OPENSSL_BASE_DIR"); do + local ABSOLUTE_FILE_PATH="${OPENSSL_BASE_DIR}/${f}" + if [ -d "$ABSOLUTE_FILE_PATH" ] && [ -d "$ABSOLUTE_FILE_PATH/lib" ]; then + export OPENSSL_VERSION=$f + export OPENSSL_DIR=$ABSOLUTE_FILE_PATH + break + fi + done + if [ -z "$OPENSSL_VERSION" ]; then + echo >&2 "Error: Failed to find an OpenSSL installation in $OPENSSL_BASE_DIR" + exit 1 + else + echo "Found OpenSSL version $OPENSSL_VERSION" + fi +} + +extract_arch() { + case $1 in + aarch64-apple-ios) echo "arm64" ;; + x86_64-apple-ios) echo "x86_64" ;; + \?) exit 1 + esac +} + +build_crypto() { + if [ ! -d $WORK_DIR/OpenSSL-for-iPhone ]; then + git clone https://github.com/x2on/OpenSSL-for-iPhone.git $WORK_DIR/OpenSSL-for-iPhone + fi + + if [ ! -d $WORK_DIR/OpenSSL-for-iPhone/lib ]; then + pushd $WORK_DIR/OpenSSL-for-iPhone + ./build-libssl.sh --version=$OPENSSL_VERSION + export OPENSSL_LOCAL_CONFIG_DIR="$PWD/config" + popd + fi +} + +extract_architectures() { + FILE_PATH=$1 + LIB_FILE_NAME=$2 + LIB_NAME=$3 + + pushd $LIBS_DIR + for TARGET in ${IOS_TARGETS[*]}; do + ARCH=$(extract_arch $TARGET) + DESTINATION=${LIB_NAME}/${ARCH} + + mkdir -p $DESTINATION + lipo -extract ${ARCH} $FILE_PATH -o $DESTINATION/$LIB_FILE_NAME-fat.a + lipo $DESTINATION/$LIB_FILE_NAME-fat.a -thin $ARCH -output $DESTINATION/$LIB_FILE_NAME.a + rm $DESTINATION/$LIB_FILE_NAME-fat.a + done + popd +} + +checkout_indy_sdk() { + if [ ! -d $INDY_SDK_DIR ]; then + git clone https://github.com/hyperledger/indy-sdk $INDY_SDK_DIR + fi + + pushd $INDY_SDK_DIR + git fetch --all + git checkout $INDY_VERSION + popd +} + +build_libindy() { + pushd $INDY_SDK_DIR/libindy + cargo lipo --release --targets="aarch64-apple-ios,x86_64-apple-ios" + popd +} + +copy_libindy_architectures() { + for TARGET in ${IOS_TARGETS[*]}; do + ARCH=$(extract_arch $TARGET) + + mkdir -p $LIBS_DIR/indy/$ARCH + cp -v $INDY_SDK_DIR/libindy/target/$TARGET/release/libindy.a $LIBS_DIR/indy/$ARCH/libindy.a + done +} + +build_libsovtoken() { + pushd $LIBSOV_DIR + to_combine="" + for TARGET in ${IOS_TARGETS[*]} + do + export LIBINDY_DIR=${LIBS_DIR}/indy/$(extract_arch $TARGET) + cargo lipo --release --verbose --targets="${TARGET}" + + mv ./target/$TARGET/release/libsovtoken.a ./target/$TARGET/libsovtoken-unstripped.a + strip -S -x -o ./target/$TARGET/libsovtoken.a -r ./target/$TARGET/libsovtoken-unstripped.a + + to_combine="${to_combine} ./target/${TARGET}/libsovtoken.a" + + mkdir -p ./target/universal/release + lipo -create $to_combine -o ./target/universal/release/libsovtoken.a + cp ./target/universal/release/libsovtoken.a ./target/universal/libsovtoken-unstripped.a + strip -S -x -o ./target/universal/libsovtoken.a -r ./target/universal/libsovtoken-unstripped.a + + BUILD_TIME=$(date -u "+%Y%m%d%H%M") + GIT_REV=$(git rev-parse --short HEAD) + LIBSOVTOKEN_VER=$(grep ^version Cargo.toml | head -n 1 | cut -d '"' -f 2) + mv target libsovtoken + 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'` + mv libsovtoken target + done + popd +} + +prepare_openssl_dir +build_crypto + +extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libssl.a libssl openssl +extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libcrypto.a libcrypto openssl + +checkout_indy_sdk +build_libindy +copy_libindy_architectures + +build_libsovtoken From 53a7c00883c68ddcf9b124296816feb0f9be31c1 Mon Sep 17 00:00:00 2001 From: Miroslav Kovar Date: Fri, 11 Jun 2021 16:11:49 +0200 Subject: [PATCH 2/2] Replace the original file Signed-off-by: Miroslav Kovar --- .../ios/mac/mac.14.libsovtoken.build.sh | 192 ++++++++++++------ .../build_scripts/ios/mac/mac.build.sh | 139 ------------- 2 files changed, 125 insertions(+), 206 deletions(-) delete mode 100755 libsovtoken/build_scripts/ios/mac/mac.build.sh diff --git a/libsovtoken/build_scripts/ios/mac/mac.14.libsovtoken.build.sh b/libsovtoken/build_scripts/ios/mac/mac.14.libsovtoken.build.sh index 12e4ac89..451439a3 100755 --- a/libsovtoken/build_scripts/ios/mac/mac.14.libsovtoken.build.sh +++ b/libsovtoken/build_scripts/ios/mac/mac.14.libsovtoken.build.sh @@ -1,7 +1,39 @@ #!/bin/sh +set -xev + +export PKG_CONFIG_ALLOW_CROSS=1 +export CARGO_INCREMENTAL=1 +export RUST_LOG=indy=trace +export RUST_TEST_THREADS=1 +export INDY_VERSION=v1.16.0 +export IOS_TARGETS="aarch64-apple-ios x86_64-apple-ios" +export WORK_DIR="${PWD}/../../../.macosbuild" +export LIBSOV_DIR="${PWD}/../../.." +export INDY_SDK_DIR=$WORK_DIR/sovtoken-indy-sdk +export LIBS_DIR=$WORK_DIR/libs -set -xv -function extract_target() { +mkdir -p ${WORK_DIR} +mkdir -p ${LIBS_DIR} + +prepare_openssl_dir() { + OPENSSL_BASE_DIR=$(brew --cellar openssl) + for f in $(ls -t "$OPENSSL_BASE_DIR"); do + local ABSOLUTE_FILE_PATH="${OPENSSL_BASE_DIR}/${f}" + if [ -d "$ABSOLUTE_FILE_PATH" ] && [ -d "$ABSOLUTE_FILE_PATH/lib" ]; then + export OPENSSL_VERSION=$f + export OPENSSL_DIR=$ABSOLUTE_FILE_PATH + break + fi + done + if [ -z "$OPENSSL_VERSION" ]; then + echo >&2 "Error: Failed to find an OpenSSL installation in $OPENSSL_BASE_DIR" + exit 1 + else + echo "Found OpenSSL version $OPENSSL_VERSION" + fi +} + +extract_arch() { case $1 in aarch64-apple-ios) echo "arm64" ;; x86_64-apple-ios) echo "x86_64" ;; @@ -9,73 +41,99 @@ function extract_target() { esac } -source ./shared.functions.sh - -START_DIR=${PWD} -WORK_DIR=$(get_work_dir) -mkdir -p ${WORK_DIR} +build_crypto() { + if [ ! -d $WORK_DIR/OpenSSL-for-iPhone ]; then + git clone https://github.com/x2on/OpenSSL-for-iPhone.git $WORK_DIR/OpenSSL-for-iPhone + fi -source ./mac.02.libindy.env.sh + if [ ! -d $WORK_DIR/OpenSSL-for-iPhone/lib ]; then + pushd $WORK_DIR/OpenSSL-for-iPhone + ./build-libssl.sh --version=$OPENSSL_VERSION + export OPENSSL_LOCAL_CONFIG_DIR="$PWD/config" + popd + fi +} -mkdir -p ${WORK_DIR}/sovtoken-indy-sdk +extract_architectures() { + FILE_PATH=$1 + LIB_FILE_NAME=$2 + LIB_NAME=$3 + + pushd $LIBS_DIR + for TARGET in ${IOS_TARGETS[*]}; do + ARCH=$(extract_arch $TARGET) + DESTINATION=${LIB_NAME}/${ARCH} + + mkdir -p $DESTINATION + lipo -extract ${ARCH} $FILE_PATH -o $DESTINATION/$LIB_FILE_NAME-fat.a + lipo $DESTINATION/$LIB_FILE_NAME-fat.a -thin $ARCH -output $DESTINATION/$LIB_FILE_NAME.a + rm $DESTINATION/$LIB_FILE_NAME-fat.a + done + popd +} -if [ ! -f "${WORK_DIR}/sovtoken-indy-sdk/libindy.a" ] ; then - command pushd ${WORK_DIR}/sovtoken-indy-sdk > /dev/null - curl -sSLO ${LIBINDY_IOS_BUILD_URL} - tar -xf ${LIBINDY_FILE} - command popd > /dev/null +checkout_indy_sdk() { + if [ ! -d $INDY_SDK_DIR ]; then + git clone https://github.com/hyperledger/indy-sdk $INDY_SDK_DIR fi -if [ ! -d "${WORK_DIR}/sovtoken-indy-sdk" ]; then - echo STDERR "Unable to find ${WORK_DIR}/sovtoken-indy-sdk directory" - exit 1 -fi - -IOS_TARGETS="aarch64-apple-ios,x86_64-apple-ios" -if [ ! -z "$2" ]; then - IOS_TARGETS=$2 -fi - -######################################################################################################################### -# Now build libsovtoken -######################################################################################################################### -cd $(get_sovtoken_dir) - -if [ "$DEBUG_SYMBOLS" = "debuginfo" ]; then - cat $START_DIR/cargo.toml.add.debug.txt >> Cargo.toml -fi - -bkpIFS="$IFS" -IFS=',()][' read -r -a targets <<<"${IOS_TARGETS}" -echo "Building targets: ${targets[@]}" -IFS="$bkpIFS" - -to_combine="" -for target in ${targets[*]} -do - LIBINDY=${WORK_DIR}/sovtoken-indy-sdk - export LIBINDY_DIR=${LIBINDY}/${target} - mkdir -p ${LIBINDY_DIR} - etarget=$(extract_target $target) - - echo "LIBINDY_DIR=${LIBINDY_DIR}" - lipo -thin $etarget $LIBINDY/libindy.a -o $LIBINDY_DIR/libindy.a - cargo lipo --release --verbose --targets="${target}" - mv ./target/$target/release/libsovtoken.a ./target/$target/libsovtoken-unstripped.a - strip -S -x -o ./target/$target/libsovtoken.a -r ./target/$target/libsovtoken-unstripped.a - - to_combine="${to_combine} ./target/${target}/libsovtoken.a" - -done - -mkdir -p ./target/universal/release -lipo -create $to_combine -o ./target/universal/release/libsovtoken.a -cp ./target/universal/release/libsovtoken.a ./target/universal/libsovtoken-unstripped.a -strip -S -x -o ./target/universal/libsovtoken.a -r ./target/universal/libsovtoken-unstripped.a - -BUILD_TIME=$(date -u "+%Y%m%d%H%M") -GIT_REV=$(git rev-parse --short HEAD) -LIBSOVTOKEN_VER=$(grep ^version Cargo.toml | head -n 1 | cut -d '"' -f 2) -mv target libsovtoken -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'` -mv libsovtoken target + pushd $INDY_SDK_DIR + git fetch --all + git checkout $INDY_VERSION + popd +} + +build_libindy() { + pushd $INDY_SDK_DIR/libindy + cargo lipo --release --targets="aarch64-apple-ios,x86_64-apple-ios" + popd +} + +copy_libindy_architectures() { + for TARGET in ${IOS_TARGETS[*]}; do + ARCH=$(extract_arch $TARGET) + + mkdir -p $LIBS_DIR/indy/$ARCH + cp -v $INDY_SDK_DIR/libindy/target/$TARGET/release/libindy.a $LIBS_DIR/indy/$ARCH/libindy.a + done +} + +build_libsovtoken() { + pushd $LIBSOV_DIR + to_combine="" + for TARGET in ${IOS_TARGETS[*]} + do + export LIBINDY_DIR=${LIBS_DIR}/indy/$(extract_arch $TARGET) + cargo lipo --release --verbose --targets="${TARGET}" + + mv ./target/$TARGET/release/libsovtoken.a ./target/$TARGET/libsovtoken-unstripped.a + strip -S -x -o ./target/$TARGET/libsovtoken.a -r ./target/$TARGET/libsovtoken-unstripped.a + + to_combine="${to_combine} ./target/${TARGET}/libsovtoken.a" + + mkdir -p ./target/universal/release + lipo -create $to_combine -o ./target/universal/release/libsovtoken.a + cp ./target/universal/release/libsovtoken.a ./target/universal/libsovtoken-unstripped.a + strip -S -x -o ./target/universal/libsovtoken.a -r ./target/universal/libsovtoken-unstripped.a + + BUILD_TIME=$(date -u "+%Y%m%d%H%M") + GIT_REV=$(git rev-parse --short HEAD) + LIBSOVTOKEN_VER=$(grep ^version Cargo.toml | head -n 1 | cut -d '"' -f 2) + mv target libsovtoken + 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'` + mv libsovtoken target + done + popd +} + +prepare_openssl_dir +build_crypto + +extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libssl.a libssl openssl +extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libcrypto.a libcrypto openssl + +checkout_indy_sdk +build_libindy +copy_libindy_architectures + +build_libsovtoken diff --git a/libsovtoken/build_scripts/ios/mac/mac.build.sh b/libsovtoken/build_scripts/ios/mac/mac.build.sh deleted file mode 100755 index 451439a3..00000000 --- a/libsovtoken/build_scripts/ios/mac/mac.build.sh +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/sh -set -xev - -export PKG_CONFIG_ALLOW_CROSS=1 -export CARGO_INCREMENTAL=1 -export RUST_LOG=indy=trace -export RUST_TEST_THREADS=1 -export INDY_VERSION=v1.16.0 -export IOS_TARGETS="aarch64-apple-ios x86_64-apple-ios" -export WORK_DIR="${PWD}/../../../.macosbuild" -export LIBSOV_DIR="${PWD}/../../.." -export INDY_SDK_DIR=$WORK_DIR/sovtoken-indy-sdk -export LIBS_DIR=$WORK_DIR/libs - -mkdir -p ${WORK_DIR} -mkdir -p ${LIBS_DIR} - -prepare_openssl_dir() { - OPENSSL_BASE_DIR=$(brew --cellar openssl) - for f in $(ls -t "$OPENSSL_BASE_DIR"); do - local ABSOLUTE_FILE_PATH="${OPENSSL_BASE_DIR}/${f}" - if [ -d "$ABSOLUTE_FILE_PATH" ] && [ -d "$ABSOLUTE_FILE_PATH/lib" ]; then - export OPENSSL_VERSION=$f - export OPENSSL_DIR=$ABSOLUTE_FILE_PATH - break - fi - done - if [ -z "$OPENSSL_VERSION" ]; then - echo >&2 "Error: Failed to find an OpenSSL installation in $OPENSSL_BASE_DIR" - exit 1 - else - echo "Found OpenSSL version $OPENSSL_VERSION" - fi -} - -extract_arch() { - case $1 in - aarch64-apple-ios) echo "arm64" ;; - x86_64-apple-ios) echo "x86_64" ;; - \?) exit 1 - esac -} - -build_crypto() { - if [ ! -d $WORK_DIR/OpenSSL-for-iPhone ]; then - git clone https://github.com/x2on/OpenSSL-for-iPhone.git $WORK_DIR/OpenSSL-for-iPhone - fi - - if [ ! -d $WORK_DIR/OpenSSL-for-iPhone/lib ]; then - pushd $WORK_DIR/OpenSSL-for-iPhone - ./build-libssl.sh --version=$OPENSSL_VERSION - export OPENSSL_LOCAL_CONFIG_DIR="$PWD/config" - popd - fi -} - -extract_architectures() { - FILE_PATH=$1 - LIB_FILE_NAME=$2 - LIB_NAME=$3 - - pushd $LIBS_DIR - for TARGET in ${IOS_TARGETS[*]}; do - ARCH=$(extract_arch $TARGET) - DESTINATION=${LIB_NAME}/${ARCH} - - mkdir -p $DESTINATION - lipo -extract ${ARCH} $FILE_PATH -o $DESTINATION/$LIB_FILE_NAME-fat.a - lipo $DESTINATION/$LIB_FILE_NAME-fat.a -thin $ARCH -output $DESTINATION/$LIB_FILE_NAME.a - rm $DESTINATION/$LIB_FILE_NAME-fat.a - done - popd -} - -checkout_indy_sdk() { - if [ ! -d $INDY_SDK_DIR ]; then - git clone https://github.com/hyperledger/indy-sdk $INDY_SDK_DIR - fi - - pushd $INDY_SDK_DIR - git fetch --all - git checkout $INDY_VERSION - popd -} - -build_libindy() { - pushd $INDY_SDK_DIR/libindy - cargo lipo --release --targets="aarch64-apple-ios,x86_64-apple-ios" - popd -} - -copy_libindy_architectures() { - for TARGET in ${IOS_TARGETS[*]}; do - ARCH=$(extract_arch $TARGET) - - mkdir -p $LIBS_DIR/indy/$ARCH - cp -v $INDY_SDK_DIR/libindy/target/$TARGET/release/libindy.a $LIBS_DIR/indy/$ARCH/libindy.a - done -} - -build_libsovtoken() { - pushd $LIBSOV_DIR - to_combine="" - for TARGET in ${IOS_TARGETS[*]} - do - export LIBINDY_DIR=${LIBS_DIR}/indy/$(extract_arch $TARGET) - cargo lipo --release --verbose --targets="${TARGET}" - - mv ./target/$TARGET/release/libsovtoken.a ./target/$TARGET/libsovtoken-unstripped.a - strip -S -x -o ./target/$TARGET/libsovtoken.a -r ./target/$TARGET/libsovtoken-unstripped.a - - to_combine="${to_combine} ./target/${TARGET}/libsovtoken.a" - - mkdir -p ./target/universal/release - lipo -create $to_combine -o ./target/universal/release/libsovtoken.a - cp ./target/universal/release/libsovtoken.a ./target/universal/libsovtoken-unstripped.a - strip -S -x -o ./target/universal/libsovtoken.a -r ./target/universal/libsovtoken-unstripped.a - - BUILD_TIME=$(date -u "+%Y%m%d%H%M") - GIT_REV=$(git rev-parse --short HEAD) - LIBSOVTOKEN_VER=$(grep ^version Cargo.toml | head -n 1 | cut -d '"' -f 2) - mv target libsovtoken - 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'` - mv libsovtoken target - done - popd -} - -prepare_openssl_dir -build_crypto - -extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libssl.a libssl openssl -extract_architectures $WORK_DIR/OpenSSL-for-iPhone/lib/libcrypto.a libcrypto openssl - -checkout_indy_sdk -build_libindy -copy_libindy_architectures - -build_libsovtoken