v1.0.7-r001: Cross-platform builds, FFI expansion, license, and bug fixes
- Version all crates at 1.0.7-r001 (tracking Salvium C++ 1.0.7)
- Source-available license: free for author/designees and non-commercial
use; annual commercial license required for any revenue-generating use
- Build scripts for Android/iOS/Linux/macOS/Windows producing both
libsalvium_crypto and libsalvium_ffi
- CI workflow publishes platform archives to salvium-rs-releases
- 23 new FFI functions: storage ops, address book, tx notes, attributes,
staked balance, key derivation, mnemonic
- Fix stake detection: count owned outputs regardless of spent state
- Auto-resume testnet integration tests from current chain height
This commit is contained in:
+39
-14
@@ -1,20 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
# Build libsalvium_crypto.so for Android (arm64, armv7, x86_64)
|
||||
# Build Salvium shared libraries for Android (arm64, armv7, x86_64)
|
||||
#
|
||||
# Produces:
|
||||
# prebuilt/android/arm64-v8a/libsalvium_crypto.so
|
||||
# prebuilt/android/arm64-v8a/libsalvium_ffi.so
|
||||
# prebuilt/android/armeabi-v7a/libsalvium_crypto.so
|
||||
# prebuilt/android/armeabi-v7a/libsalvium_ffi.so
|
||||
# prebuilt/android/x86_64/libsalvium_crypto.so
|
||||
# prebuilt/android/x86_64/libsalvium_ffi.so
|
||||
#
|
||||
# Prerequisites:
|
||||
# rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
|
||||
# Set ANDROID_NDK_HOME to your NDK path (e.g. ~/Android/Sdk/ndk/26.1.10909125)
|
||||
#
|
||||
# Produces:
|
||||
# prebuilt/android/arm64-v8a/libsalvium_crypto.so
|
||||
# prebuilt/android/armeabi-v7a/libsalvium_crypto.so
|
||||
# prebuilt/android/x86_64/libsalvium_crypto.so
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
ROOT_DIR="$SCRIPT_DIR/.."
|
||||
CRATE_DIR="$ROOT_DIR/crates/salvium-crypto"
|
||||
OUT_DIR="$ROOT_DIR/prebuilt/android"
|
||||
|
||||
if [ -z "${ANDROID_NDK_HOME:-}" ]; then
|
||||
@@ -40,38 +42,61 @@ declare -A TARGET_CC=(
|
||||
# Find the NDK toolchain bin directory
|
||||
TOOLCHAIN="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||
if [ ! -d "$TOOLCHAIN" ]; then
|
||||
# Try macOS path
|
||||
TOOLCHAIN="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-x86_64/bin"
|
||||
fi
|
||||
if [ ! -d "$TOOLCHAIN" ]; then
|
||||
TOOLCHAIN="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/darwin-aarch64/bin"
|
||||
fi
|
||||
if [ ! -d "$TOOLCHAIN" ]; then
|
||||
echo "Error: Cannot find NDK toolchain in $ANDROID_NDK_HOME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> Building salvium-crypto for Android targets..."
|
||||
# Crates to build (order matters: ffi depends on crypto, but cargo handles that)
|
||||
CRATES=("salvium-crypto" "salvium-ffi")
|
||||
|
||||
echo "==> Building Salvium libraries for Android"
|
||||
echo " NDK: $ANDROID_NDK_HOME"
|
||||
echo " Crates: ${CRATES[*]}"
|
||||
echo ""
|
||||
|
||||
for target in "${!TARGET_ABI[@]}"; do
|
||||
abi="${TARGET_ABI[$target]}"
|
||||
cc="${TARGET_CC[$target]}"
|
||||
echo " -> $target ($abi)"
|
||||
echo " ── $target ($abi) ──"
|
||||
|
||||
# Set linker for this target via CARGO_TARGET env vars
|
||||
# Set linker/compiler for this target via CARGO_TARGET env vars
|
||||
target_upper="${target//-/_}"
|
||||
target_upper="${target_upper^^}"
|
||||
export "CARGO_TARGET_${target_upper}_LINKER=$TOOLCHAIN/$cc"
|
||||
export "CC_${target//-/_}=$TOOLCHAIN/$cc"
|
||||
export "AR_${target//-/_}=$TOOLCHAIN/llvm-ar"
|
||||
|
||||
cargo build --release --target "$target" --manifest-path "$CRATE_DIR/Cargo.toml"
|
||||
for crate in "${CRATES[@]}"; do
|
||||
echo " Building $crate..."
|
||||
cargo build --release \
|
||||
--target "$target" \
|
||||
-p "$crate" \
|
||||
--manifest-path "$ROOT_DIR/Cargo.toml"
|
||||
done
|
||||
|
||||
# Copy built .so files to prebuilt directory
|
||||
mkdir -p "$OUT_DIR/$abi"
|
||||
cp "$CRATE_DIR/target/$target/release/libsalvium_crypto.so" \
|
||||
|
||||
# salvium-crypto -> libsalvium_crypto.so
|
||||
cp "$ROOT_DIR/target/$target/release/libsalvium_crypto.so" \
|
||||
"$OUT_DIR/$abi/libsalvium_crypto.so"
|
||||
|
||||
# salvium-ffi -> libsalvium_ffi.so
|
||||
cp "$ROOT_DIR/target/$target/release/libsalvium_ffi.so" \
|
||||
"$OUT_DIR/$abi/libsalvium_ffi.so"
|
||||
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "==> Done. Libraries:"
|
||||
for target in "${!TARGET_ABI[@]}"; do
|
||||
abi="${TARGET_ABI[$target]}"
|
||||
ls -lh "$OUT_DIR/$abi/libsalvium_crypto.so"
|
||||
echo " $abi:"
|
||||
ls -lh "$OUT_DIR/$abi/"*.so
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user