#!/usr/bin/env bash # Compila o ACID RAIN (roguelite para WASM-4 de Mathieu Dombrock, GPL-3.0) a partir do fonte, num commit # fixo. O cartucho do wasm4.org nao serve (o arquivo de cartuchos de la e CC BY-NC-SA); este sai do fonte # sem nenhuma mudanca, como no pkg.sh do autor: "cargo build --release" (com o Cargo.lock dele, --locked, # e as flags do .cargo/config.toml) seguido do wasm-strip do wabt. Por ser GPL, o site hospeda junto o # tarball do commit e este script. # # src/FredGames.Bundler/Builds/build-acid-rain.sh # # O Rust fica em artifacts/tools/ (stable com versao fixa, a da epoca do commit; o rustup e instalado ali # se faltar) e o wabt em artifacts/tools/wabt-/. O repositorio nao tem rust-toolchain. # # Saida: artifacts/build/acid-rain/acid-rain.wasm set -euo pipefail COMMIT=025899dbfbdb4bde5aaf50912b1529b09d3060cc SHA256=2d4579e6a9072b4080aa6a0ece4e3c5db0b8349c398077ed7bb4c240cfcd029c TOOLCHAIN=1.92.0 TARGET=wasm32-unknown-unknown WABT=1.0.39 WABT_SHA256=168a83f22125a77d96ecb230341ed0e2b06b970aadb57eb89d2ed06f9b7f8aca here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/acid-rain" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" 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 export RUSTUP_TOOLCHAIN="$TOOLCHAIN" 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/matdombrock/acidrain/archive/$COMMIT.tar.gz" "acidrain-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://github.com/WebAssembly/wabt/releases/download/$WABT/wabt-$WABT-macos-arm64.tar.gz" \ "wabt-$WABT-macos-arm64.tar.gz" "$WABT_SHA256" if [ ! -x "$tools/wabt-$WABT/bin/wasm-strip" ]; then tar -xzf "$cache/wabt-$WABT-macos-arm64.tar.gz" -C "$tools" fi rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/acidrain-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 # As flags do .cargo/config.toml do jogo (o RUSTFLAGS as substitui, por isso vao repetidas), mais o # remapeamento de caminhos: as mensagens de panic guardam o caminho dos fontes, e sem isso o .wasm # mudaria conforme a pasta do repositorio. export CARGO_TARGET_DIR="$out/target" 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=acidrain --remap-path-prefix=$CARGO_HOME=cargo \ --remap-path-prefix=$RUSTUP_HOME=rustup" (cd "$out/tree" && cargo build --release --locked --target "$TARGET") cp "$CARGO_TARGET_DIR/$TARGET/release/cart.wasm" "$out/acid-rain.wasm" "$tools/wabt-$WABT/bin/wasm-strip" "$out/acid-rain.wasm" shasum -a 256 "$out/acid-rain.wasm"