#!/usr/bin/env bash # Compila o Wasmanoid (WASM-4, de Claudio Mattera, MPL-2.0) a partir do fonte, num commit fixo, sem mudanca no codigo: "cargo build --release" do # proprio repositorio, mais wasm-opt, com as flags do .cargo/config.toml dele e o Cargo.lock versionado em # Content/games/wasmanoid/Cargo.lock (--locked). Rust fica em artifacts/tools/ (rustup instalado ali). # # src/FredGames.Bundler/Builds/build-wasmanoid.sh # # Saida: artifacts/build/wasmanoid/wasmanoid.wasm set -euo pipefail COMMIT=71499a0a1f44cc71e594c0d393906b842bc70a91 SHA256=13c70588524d19379c86163ab3f51ead05650201ec6bb7c9556c0630dedaf5cd TOOLCHAIN=1.92.0 TARGET=wasm32-unknown-unknown here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/wasmanoid" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" lock="$root/src/FredGames.Web/Content/games/wasmanoid/Cargo.lock" export RUSTUP_HOME="$tools/rustup" export CARGO_HOME="$tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" if [ ! -x "$CARGO_HOME/bin/rustup" ]; then curl -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal --default-toolchain none fi rustup toolchain install "$TOOLCHAIN" --profile minimal --target "$TARGET" >/dev/null mkdir -p "$cache" fetch() { [ -f "$cache/$2" ] || curl -fsSL --retry 4 "$1" -o "$cache/$2"; echo "$3 $cache/$2" | shasum -a 256 -c -; } fetch "https://github.com/claudiomattera/wasmanoid/archive/$COMMIT.tar.gz" "wasmanoid-${COMMIT:0:7}.tar.gz" "$SHA256" rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/wasmanoid-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 locked=() if [ -f "$lock" ]; then cp "$lock" "$out/tree/Cargo.lock" locked=(--locked) fi # As flags do .cargo/config.toml do jogo (o RUSTFLAGS as substitui, por isso vao repetidas), mais o # remapeamento de caminhos, para o .wasm nao mudar conforme a pasta do repositorio. export CARGO_TARGET_DIR="$out/target" export RUSTUP_TOOLCHAIN="$TOOLCHAIN" export RUSTFLAGS="-Clink-arg=--import-memory -Clink-arg=--initial-memory=65536 -Clink-arg=--max-memory=65536 \ -Clink-arg=-zstack-size=14752 --remap-path-prefix=$out/tree=wasmanoid --remap-path-prefix=$CARGO_HOME=cargo \ --remap-path-prefix=$RUSTUP_HOME=rustup" (cd "$out/tree" && cargo build --release --target "$TARGET" ${locked[@]+"${locked[@]}"} ) # wasm-opt como os outros builds de WASM-4 daqui (binaryen 101, instalado pelo build-2048.sh). wasm_opt="$tools/binaryen-version_101/bin/wasm-opt" [ -x "$wasm_opt" ] || { echo "falta $wasm_opt (rode o build-2048.sh)" >&2; exit 1; } "$wasm_opt" -Oz --strip-dwarf --strip-producers --zero-filled-memory -o "$out/wasmanoid.wasm" "$CARGO_TARGET_DIR/$TARGET/release/cartridge.wasm" [ -f "$lock" ] || echo "Cargo.lock novo: confira e copie $out/tree/Cargo.lock para $lock" ls -l "$out/wasmanoid.wasm" shasum -a 256 "$out/wasmanoid.wasm"