56 lines
2.3 KiB
Bash
56 lines
2.3 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Re-applies the two patches better-sqlite3 needs to load correctly under
|
||
|
|
# nodejs-mobile (Node 12.19 / Android x86_64 emulator). Required after any
|
||
|
|
# fresh `npm install` in nodejs-assets/nodejs-project, since both patches
|
||
|
|
# target files inside node_modules.
|
||
|
|
#
|
||
|
|
# Usage: ./scripts/fix-better-sqlite3-android.sh
|
||
|
|
# Run from the mobile project root, after `npm install` has already built
|
||
|
|
# better-sqlite3 once via nodejs-mobile-gyp (so build/better_sqlite3.target.mk
|
||
|
|
# and the Release/ dir already exist).
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
MOBILE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
|
PKG_DIR="$MOBILE_DIR/nodejs-assets/nodejs-project/node_modules/better-sqlite3"
|
||
|
|
LIBNODE="$MOBILE_DIR/android/app/libs/cdvnodejsmobile/libnode/bin/x86_64/libnode.so"
|
||
|
|
|
||
|
|
if [[ ! -d "$PKG_DIR" ]]; then
|
||
|
|
echo "Error: $PKG_DIR not found. Run npm install in nodejs-assets/nodejs-project first." >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 1. v8::Object::CreationContext() was removed in newer V8; nodejs-mobile's
|
||
|
|
# bundled V8 (Node 12.19) only has the old non-checked accessor.
|
||
|
|
BINDER="$PKG_DIR/src/util/binder.cpp"
|
||
|
|
if grep -q 'GetCreationContext().ToLocalChecked()' "$BINDER"; then
|
||
|
|
sed -i 's/obj->GetCreationContext().ToLocalChecked()/obj->CreationContext()/' "$BINDER"
|
||
|
|
echo "Patched $BINDER"
|
||
|
|
else
|
||
|
|
echo "$BINDER already uses CreationContext() (no patch needed)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 2. nodejs-mobile-cordova's common.gypi only adds the libnode.so NEEDED entry
|
||
|
|
# when target_arch=="x86_64", but gyp reports "x64" for 64-bit x86, so the
|
||
|
|
# rule never fires. Add it to LIBS directly so the addon can resolve V8/Node
|
||
|
|
# symbols (e.g. v8::Isolate::GetCurrent) at dlopen time on Android.
|
||
|
|
TARGET_MK="$PKG_DIR/build/better_sqlite3.target.mk"
|
||
|
|
if [[ ! -f "$TARGET_MK" ]]; then
|
||
|
|
echo "Error: $TARGET_MK not found. Run npm install to build better-sqlite3 first." >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if ! grep -q "libnode.so" "$TARGET_MK"; then
|
||
|
|
sed -i "/^\t-llog \\\\\$/a\\\\\t$LIBNODE" "$TARGET_MK"
|
||
|
|
echo "Patched $TARGET_MK"
|
||
|
|
else
|
||
|
|
echo "$TARGET_MK already references libnode.so (no patch needed)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Rebuild and relink with the patched sources/Makefile.
|
||
|
|
cd "$PKG_DIR/build"
|
||
|
|
rm -f Release/better_sqlite3.node Release/obj.target/better_sqlite3.node
|
||
|
|
make BUILDTYPE=Release better_sqlite3.node
|
||
|
|
|
||
|
|
echo "Done. Verify with: readelf -d \"$PKG_DIR/build/Release/better_sqlite3.node\" | grep libnode"
|