-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathbindings.sh
executable file
·97 lines (71 loc) · 2.3 KB
/
bindings.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
#!/bin/bash
# Exit if any command fails
set -e
# Generate C bindings first as C headers needed to generate dart bindings
# Remove old headers
rm -f rust/joinstr/include/c/joinstr.h
rm -f rust/joinstr/include/cpp/joinstr.h
# C headers
cbindgen --lang c --crate joinstr -o rust/joinstr/include/c/joinstr.h
# C++ headers
cbindgen --crate joinstr -o rust/joinstr/include/cpp/joinstr.h
# Then generate dart bindings
cd dart
dart pub get
# Remove old bindings
rm -f lib/joinstr.dart
# Automated bindings using ffigen
dart run ffigen --ignore-source-errors
dart analyze
# Generate rust librairies
cd ../rust/joinstr
# Variables
RUST_LIB_NAME="joinstr"
ANDROID_OUTPUT_DIR="../../dart/android"
IOS_OUTPUT_DIR="../../dart/ios/Frameworks"
# Set default ANDROID_NDK_HOME if not provided
ANDROID_NDK_HOME="${ANDROID_NDK_HOME:-/opt/android-ndk}"
# Check if Android NDK exists
if [ ! -d "$ANDROID_NDK_HOME" ]; then
echo "Android NDK not found."
echo "Please set ANDROID_NDK_HOME or install the NDK."
exit 1
fi
export ANDROID_NDK_HOME
echo "Using Android NDK at: $ANDROID_NDK_HOME"
# Create output directories
mkdir -p $ANDROID_OUTPUT_DIR/armeabi-v7a
mkdir -p $ANDROID_OUTPUT_DIR/arm64-v8a
mkdir -p $IOS_OUTPUT_DIR
echo "Building Rust library for Android..."
# Add Android targets if not already added
rustup target add aarch64-linux-android armv7-linux-androideabi || true
# Install cargo-ndk if not installed
if ! command -v cargo-ndk &> /dev/null
then
echo "Installing cargo-ndk..."
cargo install cargo-ndk
fi
# Build for Android (32-bit and 64-bit)
cargo ndk -t armeabi-v7a -t arm64-v8a -o $ANDROID_OUTPUT_DIR build --release
echo "Android .so files built and placed in $ANDROID_OUTPUT_DIR"
# echo "Building Rust library for iOS..."
#
# # Add iOS targets if not already added
# rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim || true
#
# # Install cargo-lipo if not installed
# if ! command -v cargo-lipo &> /dev/null
# then
# echo "Installing cargo-lipo..."
# cargo install cargo-lipo
# fi
#
# # Build universal static library for iOS
# cargo lipo --release --allow-run-on-non-macos
#
# # Copy .a file to iOS output directory
# cp target/aarch64-apple-ios/release/lib${RUST_LIB_NAME}.a $IOS_OUTPUT_DIR/
#
# echo "iOS .a file built and placed in $IOS_OUTPUT_DIR"
echo "Build complete!"