|
1
|
#!/usr/bin/env bash |
|
2
|
set -euo pipefail |
|
3
|
|
|
4
|
ROOT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd) |
|
5
|
cd "$ROOT_DIR" |
|
6
|
|
|
7
|
DIST_DIR="$ROOT_DIR/dist/swift" |
|
8
|
PACKAGE_DIR="$DIST_DIR/Package" |
|
9
|
HEADERS_DIR="$DIST_DIR/Headers" |
|
10
|
FRAMEWORK_DIR="$DIST_DIR/OndeFramework.xcframework" |
|
11
|
ZIP_PATH="$DIST_DIR/OndeFramework.xcframework.zip" |
|
12
|
CHECKSUM_PATH="$DIST_DIR/OndeFramework.checksum.txt" |
|
13
|
VERSION_PATH="$DIST_DIR/version.txt" |
|
14
|
BINDGEN="$ROOT_DIR/uniffi-bindgen/target/release/uniffi-bindgen" |
|
15
|
|
|
16
|
IOS_DEPLOYMENT_TARGET="${IOS_DEPLOYMENT_TARGET:-16.0}" |
|
17
|
MACOS_DEPLOYMENT_TARGET="${MACOS_DEPLOYMENT_TARGET:-14.0}" |
|
18
|
TVOS_DEPLOYMENT_TARGET="${TVOS_DEPLOYMENT_TARGET:-16.0}" |
|
19
|
VISIONOS_DEPLOYMENT_TARGET="${VISIONOS_DEPLOYMENT_TARGET:-1.0}" |
|
20
|
WATCHOS_DEPLOYMENT_TARGET="${WATCHOS_DEPLOYMENT_TARGET:-9.0}" |
|
21
|
|
|
22
|
rm -rf "$FRAMEWORK_DIR" "$ZIP_PATH" "$CHECKSUM_PATH" "$VERSION_PATH" |
|
23
|
mkdir -p "$DIST_DIR" "$PACKAGE_DIR/Sources/Onde" "$HEADERS_DIR" |
|
24
|
|
|
25
|
cargo build --manifest-path uniffi-bindgen/Cargo.toml --release |
|
26
|
|
|
27
|
# Build staticlibs only. Avoid the cdylib link step; the XCFramework consumes .a slices. |
|
28
|
IPHONEOS_DEPLOYMENT_TARGET="$IOS_DEPLOYMENT_TARGET" cargo rustc --target aarch64-apple-ios --release --lib --crate-type staticlib |
|
29
|
IPHONEOS_DEPLOYMENT_TARGET="$IOS_DEPLOYMENT_TARGET" cargo rustc --target aarch64-apple-ios-sim --release --lib --crate-type staticlib |
|
30
|
MACOSX_DEPLOYMENT_TARGET="$MACOS_DEPLOYMENT_TARGET" cargo rustc --target aarch64-apple-darwin --release --lib --crate-type staticlib |
|
31
|
TVOS_DEPLOYMENT_TARGET="$TVOS_DEPLOYMENT_TARGET" cargo +nightly rustc -Z build-std --target aarch64-apple-tvos --release --lib --crate-type staticlib |
|
32
|
TVOS_DEPLOYMENT_TARGET="$TVOS_DEPLOYMENT_TARGET" cargo +nightly rustc -Z build-std --target aarch64-apple-tvos-sim --release --lib --crate-type staticlib |
|
33
|
XROS_DEPLOYMENT_TARGET="$VISIONOS_DEPLOYMENT_TARGET" cargo +nightly rustc -Z build-std --target aarch64-apple-visionos --release --lib --crate-type staticlib |
|
34
|
XROS_DEPLOYMENT_TARGET="$VISIONOS_DEPLOYMENT_TARGET" cargo +nightly rustc -Z build-std --target aarch64-apple-visionos-sim --release --lib --crate-type staticlib |
|
35
|
WATCHOS_DEPLOYMENT_TARGET="$WATCHOS_DEPLOYMENT_TARGET" cargo +nightly rustc -Z build-std --target aarch64-apple-watchos --release --lib --crate-type staticlib |
|
36
|
WATCHOS_DEPLOYMENT_TARGET="$WATCHOS_DEPLOYMENT_TARGET" cargo +nightly rustc -Z build-std --target aarch64-apple-watchos-sim --release --lib --crate-type staticlib |
|
37
|
|
|
38
|
"$BINDGEN" generate "$ROOT_DIR/target/aarch64-apple-ios/release/libonde.a" --language swift --out-dir "$PACKAGE_DIR/Sources/Onde" |
|
39
|
|
|
40
|
cp "$PACKAGE_DIR/Sources/Onde/ondeFFI.h" "$HEADERS_DIR/ondeFFI.h" |
|
41
|
cp "$PACKAGE_DIR/Sources/Onde/ondeFFI.modulemap" "$HEADERS_DIR/module.modulemap" |
|
42
|
|
|
43
|
cp "$ROOT_DIR/target/aarch64-apple-ios-sim/release/libonde.a" "$DIST_DIR/libonde-ios-sim.a" |
|
44
|
|
|
45
|
cp "$ROOT_DIR/target/aarch64-apple-tvos-sim/release/libonde.a" "$DIST_DIR/libonde-tvos-sim.a" |
|
46
|
|
|
47
|
cp "$ROOT_DIR/target/aarch64-apple-visionos-sim/release/libonde.a" "$DIST_DIR/libonde-visionos-sim.a" |
|
48
|
|
|
49
|
cp "$ROOT_DIR/target/aarch64-apple-watchos-sim/release/libonde.a" "$DIST_DIR/libonde-watchos-sim.a" |
|
50
|
|
|
51
|
cp "$ROOT_DIR/target/aarch64-apple-darwin/release/libonde.a" "$DIST_DIR/libonde-macos.a" |
|
52
|
|
|
53
|
xcodebuild -create-xcframework \ |
|
54
|
-library "$ROOT_DIR/target/aarch64-apple-ios/release/libonde.a" -headers "$HEADERS_DIR" \ |
|
55
|
-library "$DIST_DIR/libonde-ios-sim.a" -headers "$HEADERS_DIR" \ |
|
56
|
-library "$ROOT_DIR/target/aarch64-apple-tvos/release/libonde.a" -headers "$HEADERS_DIR" \ |
|
57
|
-library "$DIST_DIR/libonde-tvos-sim.a" -headers "$HEADERS_DIR" \ |
|
58
|
-library "$ROOT_DIR/target/aarch64-apple-visionos/release/libonde.a" -headers "$HEADERS_DIR" \ |
|
59
|
-library "$DIST_DIR/libonde-visionos-sim.a" -headers "$HEADERS_DIR" \ |
|
60
|
-library "$ROOT_DIR/target/aarch64-apple-watchos/release/libonde.a" -headers "$HEADERS_DIR" \ |
|
61
|
-library "$DIST_DIR/libonde-watchos-sim.a" -headers "$HEADERS_DIR" \ |
|
62
|
-library "$DIST_DIR/libonde-macos.a" -headers "$HEADERS_DIR" \ |
|
63
|
-output "$FRAMEWORK_DIR" |
|
64
|
|
|
65
|
export FRAMEWORK_DIR ZIP_PATH |
|
66
|
python3 - <<'ZIP' |
|
67
|
import os |
|
68
|
import zipfile |
|
69
|
from pathlib import Path |
|
70
|
root = Path(os.environ['FRAMEWORK_DIR']) |
|
71
|
out = Path(os.environ['ZIP_PATH']) |
|
72
|
with zipfile.ZipFile(out, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zf: |
|
73
|
for folder, _, files in os.walk(root): |
|
74
|
for name in files: |
|
75
|
path = Path(folder) / name |
|
76
|
zf.write(path, path.relative_to(root.parent)) |
|
77
|
ZIP |
|
78
|
|
|
79
|
CHECKSUM=$(swift package compute-checksum "$ZIP_PATH") |
|
80
|
printf '%s |
|
81
|
' "$CHECKSUM" > "$CHECKSUM_PATH" |
|
82
|
|
|
83
|
VERSION=$(python3 - <<'VER' |
|
84
|
from pathlib import Path |
|
85
|
import re |
|
86
|
cargo = Path('Cargo.toml').read_text() |
|
87
|
match = re.search(r'^version\s*=\s*"([^"]+)"', cargo, re.MULTILINE) |
|
88
|
if not match: |
|
89
|
raise SystemExit('Could not parse package.version from Cargo.toml') |
|
90
|
print(match.group(1)) |
|
91
|
VER |
|
92
|
) |
|
93
|
printf '%s |
|
94
|
' "$VERSION" > "$VERSION_PATH" |
|
95
|
|
|
96
|
echo "XCFramework: $FRAMEWORK_DIR" |
|
97
|
echo "Zip: $ZIP_PATH" |
|
98
|
echo "Checksum: $CHECKSUM" |
|
99
|
echo "Version: $VERSION" |