clean rust

This commit is contained in:
EthanShoeDev
2025-09-13 12:34:41 -04:00
parent 6c972c8f13
commit b86371297b
71 changed files with 14 additions and 2993 deletions

View File

@@ -0,0 +1,75 @@
#!/usr/bin/env zsh
set -e
set -u
# NOTE: You MUST run this every time you make changes to the core. Unfortunately, calling this from Xcode directly
# does not work so well.
# In release mode, we create a ZIP archive of the xcframework and update Package.swift with the computed checksum.
# This is only needed when cutting a new release, not for local development.
release=false
for arg in "$@"
do
case $arg in
--release)
release=true
shift # Remove --release from processing
;;
*)
shift # Ignore other argument from processing
;;
esac
done
# Potential optimizations for the future:
#
# * Only build one simulator arch for local development (we build both since many still use Intel Macs)
# * Option to do debug builds instead for local development
fat_simulator_lib_dir="target/ios-simulator-fat/release"
generate_ffi() {
echo "Generating framework module mapping and FFI bindings"
# NOTE: Convention requires the modulemap be named module.modulemap
cargo run -p uniffi-bindgen-swift -- target/aarch64-apple-ios/release/lib$1.a target/uniffi-xcframework-staging --swift-sources --headers --modulemap --module-name $1FFI --modulemap-filename module.modulemap
mkdir -p ../apple/Sources/UniFFI/
mv target/uniffi-xcframework-staging/*.swift ../apple/Sources/UniFFI/
mv target/uniffi-xcframework-staging/module.modulemap target/uniffi-xcframework-staging/module.modulemap
}
create_fat_simulator_lib() {
echo "Creating a fat library for x86_64 and aarch64 simulators"
mkdir -p $fat_simulator_lib_dir
lipo -create target/x86_64-apple-ios/release/lib$1.a target/aarch64-apple-ios-sim/release/lib$1.a -output $fat_simulator_lib_dir/lib$1.a
}
build_xcframework() {
# Builds an XCFramework
echo "Generating XCFramework"
rm -rf target/ios # Delete the output folder so we can regenerate it
xcodebuild -create-xcframework \
-library target/aarch64-apple-ios/release/lib$1.a -headers target/uniffi-xcframework-staging \
-library target/ios-simulator-fat/release/lib$1.a -headers target/uniffi-xcframework-staging \
-output target/ios/lib$1-rs.xcframework
if $release; then
echo "Building xcframework archive"
ditto -c -k --sequesterRsrc --keepParent target/ios/lib$1-rs.xcframework target/ios/lib$1-rs.xcframework.zip
checksum=$(swift package compute-checksum target/ios/lib$1-rs.xcframework.zip)
version=$(cargo metadata --format-version 1 | jq -r --arg pkg_name "$1" '.packages[] | select(.name==$pkg_name) .version')
sed -i "" -E "s/(let releaseTag = \")[^\"]+(\")/\1$version\2/g" ../Package.swift
sed -i "" -E "s/(let releaseChecksum = \")[^\"]+(\")/\1$checksum\2/g" ../Package.swift
fi
}
basename=uniffi-russh
cargo build -p $basename --lib --release --target x86_64-apple-ios
cargo build -p $basename --lib --release --target aarch64-apple-ios-sim
cargo build -p $basename --lib --release --target aarch64-apple-ios
generate_ffi $basename
create_fat_simulator_lib $basename
build_xcframework $basename