From a33e856b48379008b5c0b6cfa624f790474d2859 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Thu, 2 Dec 2021 22:09:01 -0800 Subject: [PATCH] Add M1 target support to build.sh --- .gitignore | 1 + Package.swift | 4 +- bdkFFI.xcframework/Info.plist | 29 ++++----- .../Headers/bdkFFI-umbrella.h | 0 .../bdkFFI.framework/Modules/module.modulemap | 0 build.sh | 61 ++++++++++++------- 6 files changed, 57 insertions(+), 38 deletions(-) rename bdkFFI.xcframework/{macos-x86_64 => macos-arm64_x86_64}/bdkFFI.framework/Headers/bdkFFI-umbrella.h (100%) rename bdkFFI.xcframework/{macos-x86_64 => macos-arm64_x86_64}/bdkFFI.framework/Modules/module.modulemap (100%) diff --git a/.gitignore b/.gitignore index 7a7671d..cf97457 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ DerivedData/ .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata bdkFFI.xcframework.zip bdkFFI +libbdkffi.a bdkFFI.h diff --git a/Package.swift b/Package.swift index 1306bab..52cba67 100644 --- a/Package.swift +++ b/Package.swift @@ -24,8 +24,8 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages this package depends on. .binaryTarget( name: "bdkFFI", - url: "https://github.com/notmandatory/bdk-swift/releases/download/0.1.3/bdkFFI.xcframework.zip", - checksum: "c0b1e3ea09376b3f316d7d83575e1cd513fc4ad39ef8cf01120a3a1d7757fb97"), + url: "https://github.com/notmandatory/bdk-swift/releases/download/0.1.7/bdkFFI.xcframework.zip", + checksum: "dc51c5c61b78e06fba45fe7d55978726f6f6bb609c2b369f12f3f2e5c24b9ed5"), // .binaryTarget(name: "bdkFFI", path: "./bdkFFI.xcframework"), .target( name: "BitcoinDevKit", diff --git a/bdkFFI.xcframework/Info.plist b/bdkFFI.xcframework/Info.plist index 3b0157a..cda8ded 100644 --- a/bdkFFI.xcframework/Info.plist +++ b/bdkFFI.xcframework/Info.plist @@ -6,27 +6,16 @@ LibraryIdentifier - macos-x86_64 - LibraryPath - bdkFFI.framework - SupportedArchitectures - - x86_64 - - SupportedPlatform - macos - - - LibraryIdentifier - ios-arm64 + macos-arm64_x86_64 LibraryPath bdkFFI.framework SupportedArchitectures arm64 + x86_64 SupportedPlatform - ios + macos LibraryIdentifier @@ -43,6 +32,18 @@ SupportedPlatformVariant simulator + + LibraryIdentifier + ios-arm64 + LibraryPath + bdkFFI.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + CFBundlePackageType XFWK diff --git a/bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h b/bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h similarity index 100% rename from bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h rename to bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h diff --git a/bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Modules/module.modulemap b/bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Modules/module.modulemap similarity index 100% rename from bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Modules/module.modulemap rename to bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Modules/module.modulemap diff --git a/build.sh b/build.sh index c278b29..d238346 100755 --- a/build.sh +++ b/build.sh @@ -6,47 +6,64 @@ pushd bdk-ffi echo "Confirm bdk-ffi rust lib builds" cargo build --release -## build bdk-ffi rust libs for apple targets -echo "Build bdk-ffi libs for apple targets" +echo "Generate bdk-ffi swift bindings" +uniffi-bindgen generate src/bdk.udl --no-format --out-dir ../Sources/BitcoinDevKit --language swift -TARGET_TRIPLES=("x86_64-apple-darwin" "x86_64-apple-ios" "aarch64-apple-ios") +## build bdk-ffi rust libs for apple targets and add to xcframework +echo "Build bdk-ffi libs for apple targets and add to xcframework" + +TARGET_TRIPLES=("x86_64-apple-darwin" "aarch64-apple-darwin" "x86_64-apple-ios" "aarch64-apple-ios") +#XCFRAMEWORK_LIBS="" for TARGET in ${TARGET_TRIPLES[@]}; do echo "Build bdk-ffi lib for target $TARGET" cargo build --release --target $TARGET + #XCFRAMEWORK_LIBS="$XCFRAMEWORK_LIBS -library target/$TARGET/release/libbdkffi.a" done +# special build for M1 ios simulator +cargo +nightly build --release -Z build-std --target aarch64-apple-ios-sim -echo "Generate bdk-ffi swift bindings" -uniffi-bindgen generate src/bdk.udl --no-format --out-dir ../Sources/BitcoinDevKit --language swift +echo "Create lipo static libs for ios-sim to support M1" +mkdir -p target/lipo-ios-sim/release +lipo target/aarch64-apple-ios-sim/release/libbdkffi.a target/x86_64-apple-ios/release/libbdkffi.a -create -output target/lipo-ios-sim/release/libbdkffi.a + +echo "Create lipo static libs for macos to support M1" +mkdir -p target/lipo-macos/release +lipo target/aarch64-apple-darwin/release/libbdkffi.a target/x86_64-apple-darwin/release/libbdkffi.a -create -output target/lipo-macos/release/libbdkffi.a + +#echo "Create xcframework with xcodebuild" +#xcodebuild -create-xcframework \ +# -library target/lipo-ios-sim/release/libbdkffi.a \ +# -library target/lipo-macos/release/libbdkffi.a \ +# -library target/aarch64-apple-ios/release/libbdkffi.a \ +# -output ../bdkFFI.xcframework + popd # rename bdk.swift bindings to BitcoinDevKit.swift mv Sources/BitcoinDevKit/bdk.swift Sources/BitcoinDevKit/BitcoinDevKit.swift -# copy bdkFFI.h to bdkFFI.xcframework platforms -PLATFORMS=("macos-x86_64" "ios-arm64_x86_64-simulator" "ios-arm64") -for PLATFORM in ${PLATFORMS[@]}; do - cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/$PLATFORM/bdkFFI.framework/Headers +XCFRAMEWORK_LIBS=("ios-arm64" "ios-arm64_x86_64-simulator" "macos-arm64_x86_64") +for LIB in ${XCFRAMEWORK_LIBS[@]}; do + # copy possibly updated header file + cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/$LIB/bdkFFI.framework/Headers done +echo "Copy libbdkffi.a files to bdkFFI.xcframework/bdkFFI" +cp bdk-ffi/target/aarch64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64/bdkFFI.framework/bdkFFI +cp bdk-ffi/target/lipo-ios-sim/release/libbdkffi.a bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/bdkFFI +cp bdk-ffi/target/lipo-macos/release/libbdkffi.a bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/bdkFFI + # remove unneed .h and .modulemap files rm Sources/BitcoinDevKit/bdkFFI.h rm Sources/BitcoinDevkit/bdkFFI.modulemap -# add bdkFFI libs to bdkFFI.xcframework - -# macos-x86_64 platform -cp bdk-ffi/target/x86_64-apple-darwin/release/libbdkffi.a bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/bdkFFI - -# ios-arm64 platform -cp bdk-ffi/target/aarch64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64/bdkFFI.framework/bdkFFI - -# ios-arm64_x86_64-simulator, currently x86_64 only (need to make fat binary to add M1) -cp bdk-ffi/target/x86_64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/bdkFFI - # TODO add license info -# remove any existing bdkFFI.xcframework.zip -rm bdkFFI.xcframework.zip +if test -f "bdkFFI.xcframework.zip"; then + echo "Remove old bdkFFI.xcframework.zip" + rm bdkFFI.xcframework.zip +fi + # zip bdkFFI.xcframework directory into a bundle for distribution zip -9 -r bdkFFI.xcframework.zip bdkFFI.xcframework