-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgenerate-swift.sh
executable file
·131 lines (100 loc) · 3.34 KB
/
generate-swift.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env zsh
set -e
FFI_PROJECT="src/intershare_sdk/Cargo.toml"
# Colors
CYAN="\e[36m"
RED="\e[0;31m"
GREEN="\e[32m"
ENDCOLOR="\e[0m"
function printInfo()
{
echo -e "${CYAN}$1${ENDCOLOR}"
}
function printDone()
{
echo -e " ${GREEN}Done${ENDCOLOR}"
echo ""
echo ""
}
function buildStaticLibrary()
{
target=$1
printInfo "Building for $target"
# cargo build --manifest-path $FFI_PROJECT --lib --release --target $target
RUSTFLAGS="-Zlocation-detail=none -Zfmt-debug=none" cargo +nightly build \
--manifest-path $FFI_PROJECT \
--lib \
-Z build-std=std,panic_abort \
-Z build-std-features="optimize_for_size" \
--target $target --release
printDone
}
function generateUniffiBindings()
{
printInfo "Generating bindings"
cargo build --release
cargo run --bin uniffi-bindgen generate --library target/release/libintershare_sdk.a --language swift --out-dir "bindings/swift/Sources/InterShareKit"
# cargo run --bin uniffi-bindgen generate "src/intershare_sdk_ffi/src/intershare_sdk.udl" --language swift --out-dir "bindings/swift/Sources/InterShareSDK"
pushd bindings/swift
mv Sources/InterShareKit/*.h .out/headers/
mv Sources/InterShareKit/*.modulemap .out/headers/module.modulemap
popd
printDone
}
function createUniversalBinary()
{
target=$1
firstArchitecture=$2
secondArchitecture=$3
printInfo "Generating universal binary for $target"
if [ -z "$secondArchitecture" ]
then
lipo -create \
"target/$firstArchitecture/release/libintershare_sdk.a" \
-output "bindings/swift/.out/$target/libintershare_sdk.a"
else
lipo -create \
"target/$firstArchitecture/release/libintershare_sdk.a" \
"target/$secondArchitecture/release/libintershare_sdk.a" \
-output "bindings/swift/.out/$target/libintershare_sdk.a"
fi
strip -x "bindings/swift/.out/$target/libintershare_sdk.a"
printDone
}
function generateXcFramework()
{
printInfo "Generating xc-framework"
rm -rf bindings/swift/InterShareSDKFFI.xcframework
xcodebuild -create-xcframework \
-library bindings/swift/.out/macos/libintershare_sdk.a \
-headers bindings/swift/.out/headers/ \
-library bindings/swift/.out/ios/libintershare_sdk.a \
-headers bindings/swift/.out/headers/ \
-library bindings/swift/.out/ios-simulator/libintershare_sdk.a \
-headers bindings/swift/.out/headers/ \
-output bindings/swift/InterShareSDKFFI.xcframework
printDone
}
# ======= main =======
rm -rf bindings/swift/.out
mkdir bindings/swift/.out
mkdir bindings/swift/.out/headers
mkdir bindings/swift/.out/macos
mkdir bindings/swift/.out/ios
mkdir bindings/swift/.out/ios-simulator
export MACOSX_DEPLOYMENT_TARGET=12.0
# iOS
buildStaticLibrary aarch64-apple-ios
# iOS Simulator
buildStaticLibrary aarch64-apple-ios-sim
buildStaticLibrary x86_64-apple-ios
# macOS
buildStaticLibrary x86_64-apple-darwin
buildStaticLibrary aarch64-apple-darwin
generateUniffiBindings
createUniversalBinary "macos" "x86_64-apple-darwin" "aarch64-apple-darwin"
createUniversalBinary "ios" "aarch64-apple-ios"
createUniversalBinary "ios-simulator" "x86_64-apple-ios" "aarch64-apple-ios-sim"
generateXcFramework
#zip -r InterShareSDKFFI.xcframework.zip InterShareSDKFFI.xcframework
rm -rf bindings/swift/.out