2026-06-11 13:54:32 +00:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
# Rebuild the vendored BLAKE3 WASM module (static/js/vendors/hash-wasm/).
|
|
|
|
|
|
#
|
|
|
|
|
|
# The generated artifacts ARE committed — like the other vendored modules
|
|
|
|
|
|
# (pdf.js) — so regular frontend/backend builds never need the wasm
|
|
|
|
|
|
# toolchain. Re-run this script only when wasm/oxicloud-hash/ changes
|
|
|
|
|
|
# (e.g. bumping the blake3 crate, or adding FastCDC for the delta-sync
|
|
|
|
|
|
# client) and commit the regenerated files.
|
|
|
|
|
|
#
|
|
|
|
|
|
# Requirements (one-time):
|
|
|
|
|
|
# rustup target add wasm32-unknown-unknown
|
|
|
|
|
|
# cargo install wasm-bindgen-cli --locked
|
|
|
|
|
|
#
|
|
|
|
|
|
# wasm-bindgen-cli's version must match the crate's `wasm-bindgen`
|
|
|
|
|
|
# dependency; cargo prints a clear error when they drift.
|
|
|
|
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
|
|
|
|
|
|
|
|
CRATE=wasm/oxicloud-hash
|
|
|
|
|
|
OUT=static/js/vendors/hash-wasm
|
|
|
|
|
|
|
2026-06-15 15:53:43 +02:00
|
|
|
|
if ! ( rustup target list --installed | grep -q wasm32-unknown-unknown )
|
|
|
|
|
|
then
|
|
|
|
|
|
echo -e "install first wasm32-unknown-unknown via:\n\trustup target add wasm32-unknown-unknown"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if ! which wasm-bindgen >/dev/null 2>/dev/null
|
|
|
|
|
|
then
|
|
|
|
|
|
WASM_BINDGEN_VERSION=$(grep -A1 'name = "wasm-bindgen"' $CREATE/Cargo.lock | head -2 | grep version | sed 's/version = //')
|
|
|
|
|
|
echo -e "wasm-bindgen not found, install it via:\n\tcargo install wasm-bindgen-cli --version $WASM_BINDGEN_VERSION"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2026-06-11 13:54:32 +00:00
|
|
|
|
# SIMD128 is baseline in every evergreen browser (Chrome 91+, Firefox 89+,
|
|
|
|
|
|
# Safari 16.4+) and is worth ~3-4× in hashing throughput. Browsers without
|
|
|
|
|
|
# it fail instantiation; the frontend detects that and falls back to a
|
|
|
|
|
|
# plain byte upload.
|
|
|
|
|
|
RUSTFLAGS="-C target-feature=+simd128" \
|
|
|
|
|
|
cargo build \
|
|
|
|
|
|
--manifest-path "$CRATE/Cargo.toml" \
|
|
|
|
|
|
--target wasm32-unknown-unknown \
|
|
|
|
|
|
--release
|
|
|
|
|
|
|
|
|
|
|
|
wasm-bindgen \
|
|
|
|
|
|
--target web \
|
|
|
|
|
|
--no-typescript \
|
|
|
|
|
|
--out-dir "$OUT" \
|
|
|
|
|
|
"$CRATE/target/wasm32-unknown-unknown/release/oxicloud_hash_wasm.wasm"
|
|
|
|
|
|
|
|
|
|
|
|
echo "Vendored: $(ls -la "$OUT" | tail -n +2 | awk '{print $9, "("$5" bytes)"}' | xargs)"
|