Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/xcframework.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
name: XCFramework

# Builds NemoTextProcessing.xcframework (macOS universal + iOS device + iOS
# simulator) so Apple consumers (e.g. FluidAudio) can link the native FFI via
# a SwiftPM `.binaryTarget(url:checksum:)` instead of hand-linking the lib.
# simulator universal + Mac Catalyst universal) so Apple consumers (e.g.
# FluidAudio) can link the native FFI via a SwiftPM `.binaryTarget(url:checksum:)`
# instead of hand-linking the lib.
on:
push:
tags: ["v*"]
Expand All @@ -27,7 +28,7 @@ jobs:

- uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin,x86_64-apple-darwin,aarch64-apple-ios,aarch64-apple-ios-sim
targets: aarch64-apple-darwin,x86_64-apple-darwin,aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios,aarch64-apple-ios-macabi,x86_64-apple-ios-macabi

- name: Build xcframework
run: ./build-xcframework.sh
Expand Down
34 changes: 32 additions & 2 deletions build-xcframework.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
set -e

# Build universal static library for Apple platforms
# Outputs: NemoTextProcessing.xcframework
# Outputs: NemoTextProcessing.xcframework with slices for macOS (arm64 +
# x86_64), iOS device (arm64), iOS Simulator (arm64 + x86_64) and Mac Catalyst
# (arm64 + x86_64). Rust targets required (rustup target add ...):
# aarch64-apple-darwin x86_64-apple-darwin aarch64-apple-ios
# aarch64-apple-ios-sim x86_64-apple-ios
# aarch64-apple-ios-macabi x86_64-apple-ios-macabi

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
BUILD_DIR="$SCRIPT_DIR/build"
Expand All @@ -23,13 +28,36 @@ cargo build --release --features "ffi,fst-engine" --target aarch64-apple-ios
echo "Building for iOS Simulator (arm64)..."
cargo build --release --features "ffi,fst-engine" --target aarch64-apple-ios-sim

echo "Building for iOS Simulator (x86_64)..."
cargo build --release --features "ffi,fst-engine" --target x86_64-apple-ios

echo "Building for Mac Catalyst (arm64)..."
cargo build --release --features "ffi,fst-engine" --target aarch64-apple-ios-macabi

echo "Building for Mac Catalyst (x86_64)..."
cargo build --release --features "ffi,fst-engine" --target x86_64-apple-ios-macabi

echo "Creating universal macOS library..."
mkdir -p "$BUILD_DIR/macos"
lipo -create \
target/aarch64-apple-darwin/release/libtext_processing_rs.a \
target/x86_64-apple-darwin/release/libtext_processing_rs.a \
-output "$BUILD_DIR/macos/libtext_processing_rs.a"

echo "Creating universal iOS Simulator library..."
mkdir -p "$BUILD_DIR/ios-simulator"
lipo -create \
target/aarch64-apple-ios-sim/release/libtext_processing_rs.a \
target/x86_64-apple-ios/release/libtext_processing_rs.a \
-output "$BUILD_DIR/ios-simulator/libtext_processing_rs.a"

echo "Creating universal Mac Catalyst library..."
mkdir -p "$BUILD_DIR/maccatalyst"
lipo -create \
target/aarch64-apple-ios-macabi/release/libtext_processing_rs.a \
target/x86_64-apple-ios-macabi/release/libtext_processing_rs.a \
-output "$BUILD_DIR/maccatalyst/libtext_processing_rs.a"

echo "Creating XCFramework..."
# NOTE: headers live in swift/include/CNemoTextProcessing/ so each slice gets
# Headers/CNemoTextProcessing/module.modulemap. Xcode's ProcessXCFramework copies
Expand All @@ -43,7 +71,9 @@ xcodebuild -create-xcframework \
-headers swift/include \
-library target/aarch64-apple-ios/release/libtext_processing_rs.a \
-headers swift/include \
-library target/aarch64-apple-ios-sim/release/libtext_processing_rs.a \
-library "$BUILD_DIR/ios-simulator/libtext_processing_rs.a" \
-headers swift/include \
-library "$BUILD_DIR/maccatalyst/libtext_processing_rs.a" \
-headers swift/include \
-output "$OUTPUT_DIR/NemoTextProcessing.xcframework"

Expand Down
Loading