gioser

tawasuyu/brahman

Rust 582TOML 222Markdown 73JSON 198635 Definiciones

⎇ main scripts/build-gioser-web.sh Shell · 83 líneas · 2.5 KB Historia crudo

pruebas 7f43d4e99 · sergio ·

1#!/usr/bin/env bash
2# build-gioser-web.sh — wrapper para compilar gioser-web a WASM
3# y generar los bindings JS via wasm-bindgen.
4#
5# Uso:
6#   ./scripts/build-gioser-web.sh [dev|release]   (default: release)
7#
8# Output:
9#   crates/apps/gioser-web/pkg/{gioser_web.js, gioser_web_bg.wasm, ...}
10
11set -euo pipefail
12
13MODE="${1:-release}"
14case "$MODE" in
15    dev)
16        PROFILE_FLAG=""
17        PROFILE_DIR="debug"
18        ;;
19    release)
20        PROFILE_FLAG="--release"
21        PROFILE_DIR="release"
22        ;;
23    *)
24        echo "Uso: $0 [dev|release]" >&2
25        exit 1
26        ;;
27esac
28
29REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
30cd "$REPO_ROOT"
31
32# Sanity check: target wasm32-unknown-unknown disponible.
33if ! ls /usr/lib/rustlib/wasm32-unknown-unknown >/dev/null 2>&1 \
34   && ! (command -v rustup >/dev/null 2>&1 \
35         && rustup target list --installed 2>/dev/null | grep -q wasm32-unknown-unknown); then
36    echo "✗ falta el target wasm32-unknown-unknown" >&2
37    echo "  con rustup: rustup target add wasm32-unknown-unknown" >&2
38    echo "  en Artix/Arch suele venir con el paquete rust base" >&2
39    exit 1
40fi
41
42# Sanity check: wasm-bindgen-cli disponible.
43if ! command -v wasm-bindgen >/dev/null 2>&1; then
44    echo "✗ falta wasm-bindgen-cli" >&2
45    echo "  instalar con: cargo install wasm-bindgen-cli --version 0.2.99" >&2
46    echo "  (la versión debe coincidir con la del Cargo.lock — buscá la entrada"  >&2
47    echo "   [[package]] name = \"wasm-bindgen\")" >&2
48    exit 1
49fi
50
51echo "▶ cargo build $MODE → wasm32-unknown-unknown"
52cargo build $PROFILE_FLAG --target wasm32-unknown-unknown -p gioser-web
53
54WASM_IN="target/wasm32-unknown-unknown/$PROFILE_DIR/gioser_web.wasm"
55PKG_OUT="crates/apps/gioser-web/pkg"
56
57if [[ ! -f "$WASM_IN" ]]; then
58    echo "✗ no se generó $WASM_IN" >&2
59    exit 1
60fi
61
62echo "▶ wasm-bindgen → $PKG_OUT"
63mkdir -p "$PKG_OUT"
64wasm-bindgen "$WASM_IN" --out-dir "$PKG_OUT" --target web
65
66# Reporte de tamaños.
67WASM_OUT="$PKG_OUT/gioser_web_bg.wasm"
68if [[ -f "$WASM_OUT" ]]; then
69    size_bytes=$(stat -c%s "$WASM_OUT")
70    size_kib=$(( size_bytes / 1024 ))
71    if command -v gzip >/dev/null 2>&1; then
72        gz_bytes=$(gzip -c "$WASM_OUT" | wc -c)
73        gz_kib=$(( gz_bytes / 1024 ))
74        echo "✓ $WASM_OUT — ${size_kib} KiB (~${gz_kib} KiB gzipped)"
75    else
76        echo "✓ $WASM_OUT — ${size_kib} KiB"
77    fi
78fi
79
80echo ""
81echo "Para probarlo:"
82echo "  python3 -m http.server -d crates/apps/gioser-web 8080"
83echo "  → http://localhost:8080/"