-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgenerate-swift.sh
executable file
·143 lines (110 loc) · 3.92 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
132
133
134
135
136
137
138
139
140
141
142
143
#!/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
thirdArchitecture=$4
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"
elif [ -z "$thirdArchitecture" ]; then
lipo -create \
"target/$firstArchitecture/release/libintershare_sdk.a" \
"target/$secondArchitecture/release/libintershare_sdk.a" \
-output "bindings/swift/.out/$target/libintershare_sdk.a"
else
echo "$firstArchitecture $secondArchitecture $thirdArchitecture"
lipo -create \
"target/$firstArchitecture/release/libintershare_sdk.a" \
"target/$secondArchitecture/release/libintershare_sdk.a" \
"target/$thirdArchitecture/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
# macOS Xcode Previews
# buildStaticLibrary arm64e-apple-darwin
generateUniffiBindings
# createUniversalBinary "macos" "x86_64-apple-darwin" "aarch64-apple-darwin" "arm64e-apple-darwin"
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