123 lines
3.3 KiB
Bash
Executable File
123 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build script for Delta-Behavior WASM bindings
|
|
# This script builds the Rust code to WebAssembly using wasm-pack
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
echo "=== Delta-Behavior WASM Build ==="
|
|
echo "Project directory: $PROJECT_DIR"
|
|
echo ""
|
|
|
|
# Check for wasm-pack
|
|
if ! command -v wasm-pack &> /dev/null; then
|
|
echo "wasm-pack not found. Installing..."
|
|
cargo install wasm-pack
|
|
fi
|
|
|
|
# Check for wasm32 target
|
|
if ! rustup target list --installed | grep -q wasm32-unknown-unknown; then
|
|
echo "Adding wasm32-unknown-unknown target..."
|
|
rustup target add wasm32-unknown-unknown
|
|
fi
|
|
|
|
cd "$PROJECT_DIR"
|
|
|
|
# Parse arguments
|
|
TARGET="web"
|
|
PROFILE="release"
|
|
OUT_DIR="wasm/pkg"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--target)
|
|
TARGET="$2"
|
|
shift 2
|
|
;;
|
|
--dev)
|
|
PROFILE="dev"
|
|
shift
|
|
;;
|
|
--release)
|
|
PROFILE="release"
|
|
shift
|
|
;;
|
|
--out-dir)
|
|
OUT_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--help|-h)
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --target <TARGET> Build target: web, nodejs, bundler (default: web)"
|
|
echo " --dev Build in development mode"
|
|
echo " --release Build in release mode (default)"
|
|
echo " --out-dir <DIR> Output directory (default: wasm/pkg)"
|
|
echo " --help, -h Show this help message"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 # Build for web in release mode"
|
|
echo " $0 --target nodejs # Build for Node.js"
|
|
echo " $0 --dev # Build in development mode"
|
|
echo " $0 --target bundler # Build for bundlers (webpack, etc.)"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "Building with:"
|
|
echo " Target: $TARGET"
|
|
echo " Profile: $PROFILE"
|
|
echo " Output: $OUT_DIR"
|
|
echo ""
|
|
|
|
# Build options
|
|
BUILD_OPTS="--target $TARGET --out-dir $OUT_DIR"
|
|
|
|
if [ "$PROFILE" = "dev" ]; then
|
|
BUILD_OPTS="$BUILD_OPTS --dev"
|
|
else
|
|
BUILD_OPTS="$BUILD_OPTS --release"
|
|
fi
|
|
|
|
# Run wasm-pack build
|
|
echo "Running: wasm-pack build $BUILD_OPTS"
|
|
wasm-pack build $BUILD_OPTS
|
|
|
|
# Post-build: Copy TypeScript declarations
|
|
if [ -f "wasm/index.d.ts" ]; then
|
|
echo ""
|
|
echo "Copying TypeScript declarations..."
|
|
cp wasm/index.d.ts "$OUT_DIR/"
|
|
fi
|
|
|
|
# Calculate sizes
|
|
if [ -f "$OUT_DIR/delta_behavior_bg.wasm" ]; then
|
|
WASM_SIZE=$(wc -c < "$OUT_DIR/delta_behavior_bg.wasm")
|
|
WASM_SIZE_KB=$((WASM_SIZE / 1024))
|
|
echo ""
|
|
echo "=== Build Complete ==="
|
|
echo "WASM size: ${WASM_SIZE_KB}KB ($WASM_SIZE bytes)"
|
|
fi
|
|
|
|
# List output files
|
|
echo ""
|
|
echo "Output files in $OUT_DIR:"
|
|
ls -la "$OUT_DIR/"
|
|
|
|
echo ""
|
|
echo "To use in a web project:"
|
|
echo " import init, { WasmCoherence, WasmEventHorizon } from './$OUT_DIR/delta_behavior.js';"
|
|
echo " await init();"
|
|
echo ""
|
|
echo "To use in Node.js (if built with --target nodejs):"
|
|
echo " const { WasmCoherence, WasmEventHorizon } = require('./$OUT_DIR/delta_behavior.js');"
|
|
echo ""
|