From 760c5123ab0fe0d7b0ebbc1904e578bd845b602e Mon Sep 17 00:00:00 2001 From: wrd Date: Thu, 9 Oct 2025 16:22:09 +0200 Subject: [PATCH] [ios, sdk] Optimize build Check if generated files are up-to-date to avoid cascading rebuilds. Co-authored-by: ivk --- .gitignore | 1 + tuta-sdk/ios/build-scripts/generate-swift.sh | 40 +++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index e0018b8acb..ac90c347b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build +bindings cache target build-calendar-app diff --git a/tuta-sdk/ios/build-scripts/generate-swift.sh b/tuta-sdk/ios/build-scripts/generate-swift.sh index 54108cc8c8..197de08931 100755 --- a/tuta-sdk/ios/build-scripts/generate-swift.sh +++ b/tuta-sdk/ios/build-scripts/generate-swift.sh @@ -25,12 +25,8 @@ includeArch() { } createFolderStructure() { - if [ -d "${SRC_ROOT}/target/combined" ]; then - rm -r "${SRC_ROOT}/target/combined" - fi - - mkdir "${SRC_ROOT}/target/combined/" - mkdir "${SRC_ROOT}/target/combined/${RELFLAG}" + mkdir -p "${SRC_ROOT}/target/combined/" + mkdir -p "${SRC_ROOT}/target/combined/${RELFLAG}" if [ -d "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src" ]; then rm -r "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src" @@ -42,13 +38,29 @@ createFolderStructure() { } generateLibrary() { - lipo -create $ARCH_LIST -output "${SRC_ROOT}/target/combined/${RELFLAG}/libtutasdk.a" + for arch in $ARCH_LIST; do + if [ $arch -nt "${SRC_ROOT}/target/combined/${RELFLAG}/libtutasdk.a" ]; then + echo "$arch is newer!" + echo $(date -r $arch) + echo $(date -r "${SRC_ROOT}/target/combined/${RELFLAG}/libtutasdk.a" || echo "output of lipo doesn't exist") + lipo -create $ARCH_LIST -output "${SRC_ROOT}/target/combined/${RELFLAG}/libtutasdk.a" + break + fi + done - cp "${SRC_ROOT}/target/combined/${RELFLAG}/libtutasdk.a" "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/tutasdk.a" + cp -p "${SRC_ROOT}/target/combined/${RELFLAG}/libtutasdk.a" "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/tutasdk.a" - mv $SRC_ROOT/bindings/*.h "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/headers/" - mv $SRC_ROOT/bindings/*.modulemap "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/headers/" - mv $SRC_ROOT/bindings/*.swift "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/Sources/" + cp -p $SRC_ROOT/bindings/*.h "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/headers/" + cp -p $SRC_ROOT/bindings/*.modulemap "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/headers/" + cp -p $SRC_ROOT/bindings/*.swift "${SRC_ROOT}/tuta-sdk/ios/tutasdk/generated-src/Sources/" +} + +genSwiftIfNeeded() { + if [ "${SRC_ROOT}/target/$1/${RELFLAG}/libtutasdk.dylib" -nt "$SRC_ROOT/bindings/tutasdk.swift" ]; then + cargo run --package uniffi-bindgen -- generate --library "${SRC_ROOT}/target/$1/${RELFLAG}/libtutasdk.dylib" --out-dir "$SRC_ROOT/bindings" --language=swift + else + echo "File $SRC_ROOT/bindings/tutasdk.swift is up to date, no need to rengenerate" + fi } cd $SRC_ROOT @@ -66,18 +78,18 @@ for arch in $ARCHS; do fi # Intel iOS simulator - cargo run --package uniffi-bindgen -- generate --library "${SRC_ROOT}/target/x86_64-apple-ios/${RELFLAG}/libtutasdk.dylib" --out-dir "$SRC_ROOT/bindings" --language=swift + genSwiftIfNeeded x86_64-apple-ios includeArch "${SRC_ROOT}/target/x86_64-apple-ios/${RELFLAG}/libtutasdk.a"; ;; arm64) if [ $IS_SIMULATOR -eq 0 ]; then # Hardware iOS targets - cargo run --package uniffi-bindgen -- generate --library "${SRC_ROOT}/target/aarch64-apple-ios/${RELFLAG}/libtutasdk.dylib" --out-dir "$SRC_ROOT/bindings" --language=swift + genSwiftIfNeeded aarch64-apple-ios includeArch "${SRC_ROOT}/target/aarch64-apple-ios/${RELFLAG}/libtutasdk.a"; else # M1 iOS simulator - cargo run --package uniffi-bindgen -- generate --library "${SRC_ROOT}/target/aarch64-apple-ios-sim/${RELFLAG}/libtutasdk.dylib" --out-dir "$SRC_ROOT/bindings" --language=swift + genSwiftIfNeeded aarch64-apple-ios-sim includeArch "${SRC_ROOT}/target/aarch64-apple-ios-sim/${RELFLAG}/libtutasdk.a"; fi esac