mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 09:39:25 +00:00
* feat(macos): run the private app runtime on the OpenClaw Bun fork * fix(macos): let the bundled runtime load unsigned plugin addons * test(macos): remove obsolete worker pruning closure tests * test(macos): drop stale packaging test imports * test(macos): migrate CI scope cases to runtime paths
76 lines
2.8 KiB
Bash
Executable file
76 lines
2.8 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
MANIFEST="$ROOT_DIR/scripts/lib/sqlite-macos.json"
|
|
ARCH="${1:-}"
|
|
DESTINATION="${2:-}"
|
|
if [[ "$#" != 2 || ( "$ARCH" != arm64 && "$ARCH" != x86_64 && "$ARCH" != universal ) || -z "$DESTINATION" || "$DESTINATION" == -* ]]; then
|
|
echo "Usage: scripts/build-mac-sqlite.sh <arm64|x86_64|universal> <runtime-directory>" >&2
|
|
exit 2
|
|
fi
|
|
read -r VERSION URL ARCHIVE_SHA < <(node - "$MANIFEST" <<'JS'
|
|
const manifest = require(process.argv[2]);
|
|
console.log(manifest.version, manifest.url, manifest.sha256);
|
|
JS
|
|
)
|
|
CACHE_DIR="$ROOT_DIR/apps/macos/.build/sqlite/$VERSION"
|
|
ARCHIVE="${URL##*/}"
|
|
SOURCE_DIR="${ARCHIVE%.zip}"
|
|
mkdir -p "$CACHE_DIR"
|
|
WORK="$(mktemp -d "${TMPDIR:-/tmp}/openclaw-sqlite.XXXXXX")"
|
|
trap 'rm -rf "$WORK"' EXIT
|
|
|
|
actual=""
|
|
if [[ -f "$CACHE_DIR/$ARCHIVE" && ! -L "$CACHE_DIR/$ARCHIVE" ]]; then
|
|
actual="$(shasum -a 256 "$CACHE_DIR/$ARCHIVE" | awk '{print $1}')"
|
|
fi
|
|
if [[ "$actual" != "$ARCHIVE_SHA" ]]; then
|
|
curl --fail --location --proto '=https' --proto-redir '=https' \
|
|
--connect-timeout 15 --max-time 180 --retry 3 --retry-delay 2 \
|
|
--output "$WORK/$ARCHIVE" "$URL"
|
|
if [[ "$(shasum -a 256 "$WORK/$ARCHIVE" | awk '{print $1}')" != "$ARCHIVE_SHA" ]]; then
|
|
echo "ERROR: SQLite $ARCHIVE sha256 mismatch" >&2
|
|
exit 1
|
|
fi
|
|
mv -f "$WORK/$ARCHIVE" "$CACHE_DIR/$ARCHIVE"
|
|
fi
|
|
# Extract only the compiler input, without trusting archive paths as destinations.
|
|
unzip -p "$CACHE_DIR/$ARCHIVE" "$SOURCE_DIR/sqlite3.c" > "$WORK/sqlite3.c"
|
|
|
|
ARCH_FLAGS=(-arch "$ARCH")
|
|
ARCHS=("$ARCH")
|
|
if [[ "$ARCH" == universal ]]; then
|
|
ARCHS=(arm64 x86_64)
|
|
ARCH_FLAGS=(-arch arm64 -arch x86_64)
|
|
fi
|
|
# Match Homebrew's library features, including its session and URI support.
|
|
# JSON is built in on this SQLite line; OMIT_LOAD_EXTENSION must remain unset.
|
|
xcrun clang -O2 -dynamiclib -fPIC -mmacosx-version-min=15.0 \
|
|
"${ARCH_FLAGS[@]}" -install_name @loader_path/libsqlite3.dylib \
|
|
-DSQLITE_THREADSAFE=1 \
|
|
-DSQLITE_ENABLE_API_ARMOR=1 \
|
|
-DSQLITE_ENABLE_COLUMN_METADATA=1 \
|
|
-DSQLITE_ENABLE_DBSTAT_VTAB=1 \
|
|
-DSQLITE_ENABLE_FTS3=1 \
|
|
-DSQLITE_ENABLE_FTS3_PARENTHESIS=1 \
|
|
-DSQLITE_ENABLE_FTS5=1 \
|
|
-DSQLITE_ENABLE_GEOPOLY=1 \
|
|
-DSQLITE_ENABLE_JSON1=1 \
|
|
-DSQLITE_ENABLE_MATH_FUNCTIONS=1 \
|
|
-DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 \
|
|
-DSQLITE_ENABLE_PREUPDATE_HOOK=1 \
|
|
-DSQLITE_ENABLE_RTREE=1 \
|
|
-DSQLITE_ENABLE_SESSION=1 \
|
|
-DSQLITE_ENABLE_STAT4=1 \
|
|
-DSQLITE_ENABLE_UNLOCK_NOTIFY=1 \
|
|
-DSQLITE_MAX_VARIABLE_NUMBER=250000 \
|
|
-DSQLITE_USE_URI=1 \
|
|
"$WORK/sqlite3.c" -o "$WORK/libsqlite3.dylib"
|
|
for arch in "${ARCHS[@]}"; do
|
|
/usr/bin/lipo "$WORK/libsqlite3.dylib" -verify_arch "$arch"
|
|
done
|
|
mkdir -p "$DESTINATION/lib"
|
|
cp "$WORK/libsqlite3.dylib" "$DESTINATION/lib/libsqlite3.dylib"
|
|
chmod 0755 "$DESTINATION/lib/libsqlite3.dylib"
|
|
echo "Built SQLite $VERSION ($ARCH)"
|