diff --git a/android/src/main/jniLibs/arm64-v8a/libsql_experimental.so b/android/src/main/jniLibs/arm64-v8a/libsql_experimental.so index 96e501fc..069440c6 100755 Binary files a/android/src/main/jniLibs/arm64-v8a/libsql_experimental.so and b/android/src/main/jniLibs/arm64-v8a/libsql_experimental.so differ diff --git a/android/src/main/jniLibs/armeabi-v7a/libsql_experimental.so b/android/src/main/jniLibs/armeabi-v7a/libsql_experimental.so index 1863f840..1a231e99 100755 Binary files a/android/src/main/jniLibs/armeabi-v7a/libsql_experimental.so and b/android/src/main/jniLibs/armeabi-v7a/libsql_experimental.so differ diff --git a/android/src/main/jniLibs/x86/libsql_experimental.so b/android/src/main/jniLibs/x86/libsql_experimental.so index fb08a3db..7e0bbd8b 100755 Binary files a/android/src/main/jniLibs/x86/libsql_experimental.so and b/android/src/main/jniLibs/x86/libsql_experimental.so differ diff --git a/android/src/main/jniLibs/x86_64/libsql_experimental.so b/android/src/main/jniLibs/x86_64/libsql_experimental.so index ba23e4f1..14240db5 100755 Binary files a/android/src/main/jniLibs/x86_64/libsql_experimental.so and b/android/src/main/jniLibs/x86_64/libsql_experimental.so differ diff --git a/ios/libsql_experimental.xcframework/ios-arm64/libsql_experimental.framework/libsql_experimental b/ios/libsql_experimental.xcframework/ios-arm64/libsql_experimental.framework/libsql_experimental index c2612ae9..760419e5 100755 Binary files a/ios/libsql_experimental.xcframework/ios-arm64/libsql_experimental.framework/libsql_experimental and b/ios/libsql_experimental.xcframework/ios-arm64/libsql_experimental.framework/libsql_experimental differ diff --git a/ios/libsql_experimental.xcframework/ios-arm64_x86_64-simulator/libsql_experimental.framework/libsql_experimental b/ios/libsql_experimental.xcframework/ios-arm64_x86_64-simulator/libsql_experimental.framework/libsql_experimental index f80a7532..6ab35285 100755 Binary files a/ios/libsql_experimental.xcframework/ios-arm64_x86_64-simulator/libsql_experimental.framework/libsql_experimental and b/ios/libsql_experimental.xcframework/ios-arm64_x86_64-simulator/libsql_experimental.framework/libsql_experimental differ diff --git a/scripts/build-libsql.sh b/scripts/build-libsql.sh new file mode 100755 index 00000000..1c6cc49b --- /dev/null +++ b/scripts/build-libsql.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" + +if [ -d "$ROOT_DIR/../libsql" ]; then + LIBSQL_DIR="$ROOT_DIR/../libsql" +elif [ -d "$ROOT_DIR/libsql" ]; then + LIBSQL_DIR="$ROOT_DIR/libsql" +else + echo "[op-sqlite] libsql checkout not found. Expected at ../libsql or ./libsql" + exit 1 +fi + +if [ -d "$LIBSQL_DIR/bindings/c" ]; then + BINDINGS_DIR="$LIBSQL_DIR/bindings/c" +elif [ -d "$LIBSQL_DIR/bindings/experimental/c" ]; then + BINDINGS_DIR="$LIBSQL_DIR/bindings/experimental/c" +else + echo "[op-sqlite] libsql C bindings directory not found under $LIBSQL_DIR/bindings" + exit 1 +fi + +GENERATED_DIR="$BINDINGS_DIR/generated" +IOS_SOURCE_DIR="$GENERATED_DIR/libsql_experimental.xcframework" +ANDROID_SOURCE_DIR="$GENERATED_DIR/jniLibs" +IOS_TARGET_DIR="$ROOT_DIR/ios/libsql_experimental.xcframework" +ANDROID_TARGET_DIR="$ROOT_DIR/android/src/main/jniLibs" +ANDROID_ABIS=(arm64-v8a armeabi-v7a x86 x86_64 include) + +require_cmd() { + if ! command -v "$1" >/dev/null 2>&1; then + echo "[op-sqlite] Missing required command: $1" + exit 1 + fi +} + +resolve_android_ndk() { + local candidate="" + local sdk_root="" + local search_roots=() + local ndk_dirs=() + + for candidate in "${ANDROID_NDK_HOME-}" "${ANDROID_NDK_ROOT-}"; do + if [ -n "$candidate" ] && [ -d "$candidate" ]; then + printf '%s\n' "$candidate" + return 0 + fi + done + + for sdk_root in "${ANDROID_SDK_ROOT-}" "${ANDROID_HOME-}" "$HOME/Library/Android/sdk"; do + if [ -n "$sdk_root" ] && [ -d "$sdk_root" ]; then + search_roots+=("$sdk_root") + fi + done + + shopt -s nullglob + for sdk_root in "${search_roots[@]}"; do + ndk_dirs=("$sdk_root"/ndk/*) + if [ "${#ndk_dirs[@]}" -gt 0 ]; then + printf '%s\n' "${ndk_dirs[@]}" | sort | tail -n 1 + shopt -u nullglob + return 0 + fi + done + shopt -u nullglob + + return 1 +} + +echo "[op-sqlite] Using libsql checkout at: $LIBSQL_DIR" +echo "[op-sqlite] Using bindings directory at: $BINDINGS_DIR" + +require_cmd make +require_cmd cargo + +if ! command -v cargo-ndk >/dev/null 2>&1; then + echo "[op-sqlite] Missing cargo-ndk. Install with: cargo install cargo-ndk" + exit 1 +fi + +if ANDROID_NDK_DIR="$(resolve_android_ndk)"; then + export ANDROID_NDK_HOME="$ANDROID_NDK_DIR" + export ANDROID_NDK_ROOT="$ANDROID_NDK_DIR" + echo "[op-sqlite] Using Android NDK at: $ANDROID_NDK_DIR" +else + echo "[op-sqlite] Android NDK not found. Install one under \$ANDROID_SDK_ROOT/ndk or set ANDROID_NDK_HOME" + exit 1 +fi + +echo "[op-sqlite] Building Android libsql binaries" +make -C "$BINDINGS_DIR" android + +echo "[op-sqlite] Building iOS libsql binaries" +make -C "$BINDINGS_DIR" ios + +if [ ! -d "$IOS_SOURCE_DIR" ]; then + echo "[op-sqlite] Missing generated iOS artifacts at: $IOS_SOURCE_DIR" + exit 1 +fi + +if [ ! -d "$ANDROID_SOURCE_DIR" ]; then + echo "[op-sqlite] Missing generated Android artifacts at: $ANDROID_SOURCE_DIR" + exit 1 +fi + +echo "[op-sqlite] Installing iOS XCFramework" +rm -rf "$IOS_TARGET_DIR" +mkdir -p "$(dirname "$IOS_TARGET_DIR")" +cp -R "$IOS_SOURCE_DIR" "$IOS_TARGET_DIR" + +echo "[op-sqlite] Installing Android JNI libraries" +mkdir -p "$ANDROID_TARGET_DIR" +for abi in "${ANDROID_ABIS[@]}"; do + if [ ! -e "$ANDROID_SOURCE_DIR/$abi" ]; then + echo "[op-sqlite] Missing generated Android artifact: $ANDROID_SOURCE_DIR/$abi" + exit 1 + fi + + rm -rf "$ANDROID_TARGET_DIR/$abi" + cp -R "$ANDROID_SOURCE_DIR/$abi" "$ANDROID_TARGET_DIR/$abi" +done + +echo "[op-sqlite] libsql binaries installed:" +echo " - iOS: $IOS_TARGET_DIR" +echo " - Android: $ANDROID_TARGET_DIR" \ No newline at end of file diff --git a/scripts/gen-sqlcipher.sh b/scripts/build-sqlcipher.sh similarity index 100% rename from scripts/gen-sqlcipher.sh rename to scripts/build-sqlcipher.sh diff --git a/scripts/update-sqlitevec.sh b/scripts/build-sqlitevec.sh similarity index 100% rename from scripts/update-sqlitevec.sh rename to scripts/build-sqlitevec.sh