#!/usr/bin/env bash # Compila o Zemeroth (Andrey Lesnikov; Rust + macroquad 0.3.7; MIT ou Apache-2.0) para WebAssembly, no commit fae7d89, # como o utils/wasm/build.sh do autor: # cargo build --locked --release --target wasm32-unknown-unknown (Cargo.lock do autor, Rust 1.74.1) # Os sprites (assets/img) nao estao no repositorio: saem de assets_src/atlas.svg com o resvg, como o # utils/assets_export.sh (resvg 0.20.0, --zoom=12; o resvg 0.45 ignora a posicao do objeto com --zoom e gera PNG vazio). # A pagina (zemeroth/index.html, start.js) e nossa: no lugar do index.html do autor, que busca o gl.js num site de # terceiros, ela usa o gl.js do proprio crate sapp-wasm 0.1.26 (o mesmo que o miniquad-samples serve). O logotipo # zemeroth.svg do repositorio (baseado na fonte "Old London", licenca incerta) nao entra. O codigo do jogo nao muda. # # src/FredGames.Bundler/Builds/build-zemeroth.sh # # Saida: artifacts/build/zemeroth/{dist/, zemeroth--dist.tar.gz, zemeroth-licenses.txt}. # O .tar.gz tem que sair igual em dois builds seguidos (CODEGEN_UNITS=1 e caminhos remapeados). set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" mkdir -p "$cache" export RUSTUP_HOME="$tools/rustup" CARGO_HOME="$tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" TOOLCHAIN=1.74.1 RESVG=0.20.0 COMMIT=fae7d89abe9702b25729453395e46fce105debbd SHA256=c1a74bf0c1fa3339581df0f09f0d53960c9b7556a3fc3ba59d3204ac1db54a2f fetch() { # url arquivo sha256 if [ ! -f "$cache/$2" ]; then curl -fsSL --retry 4 "$1" -o "$cache/$2.partial" && mv "$cache/$2.partial" "$cache/$2" fi echo "$3 $cache/$2" | shasum -a 256 -c - >/dev/null } slug=zemeroth out="$root/artifacts/build/$slug" tree="$root/artifacts/build/$slug/tree" fetch "https://github.com/ozkriff/zemeroth/archive/$COMMIT.tar.gz" "$slug-${COMMIT:0:7}.tar.gz" "$SHA256" rustup toolchain install "$TOOLCHAIN" --profile minimal --target wasm32-unknown-unknown >/dev/null 2>&1 export RUSTUP_TOOLCHAIN="$TOOLCHAIN" if [ ! -x "$tools/resvg-$RESVG/bin/resvg" ]; then cargo install --locked "resvg@$RESVG" --root "$tools/resvg-$RESVG" >/dev/null 2>&1 fi rm -rf "$out"; mkdir -p "$tree" "$out/dist" tar -xzf "$cache/$slug-${COMMIT:0:7}.tar.gz" -C "$tree" --strip-components 1 ( cd "$tree" PATH="$tools/resvg-$RESVG/bin:$PATH" sh utils/assets_export.sh >/dev/null 2>&1 CARGO_INCREMENTAL=0 CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 \ RUSTFLAGS="--remap-path-prefix=$tree=/src --remap-path-prefix=$CARGO_HOME=/cargo" \ cargo build --locked --release --target wasm32-unknown-unknown 2> "$out/cargo.log" \ || { tail -40 "$out/cargo.log"; exit 1; } cp target/wasm32-unknown-unknown/release/zemeroth.wasm "$out/dist/" cargo metadata --locked --format-version 1 --filter-platform wasm32-unknown-unknown 2>/dev/null > "$out/metadata.json" gl="$(python3 -I -c " import json,sys,os m=json.load(open('$out/metadata.json')) p=next(p for p in m['packages'] if p['name']=='sapp-wasm') print(os.path.join(os.path.dirname(p['manifest_path']),'js','gl.js'))")" cp "$gl" "$out/dist/gl.js" python3 -I "$here/gridbugs/rust-licenses.py" zemeroth "$out/crates.txt" < "$out/metadata.json" ) mkdir -p "$out/dist/assets/img" cp "$tree"/assets/*.ron "$tree/assets/OpenSans-Regular.ttf" "$out/dist/assets/" cp "$tree"/assets/img/*.png "$out/dist/assets/img/" cp "$here/zemeroth/index.html" "$here/zemeroth/start.js" "$out/dist/" { echo "Zemeroth - licences of the build" echo "================================" echo echo "Source: https://github.com/ozkriff/zemeroth at commit $COMMIT, licensed under the MIT License or the Apache License 2.0," echo "at the user's option (LICENSE-MIT, LICENSE-APACHE). The pictures are drawn by the author (assets_src/atlas.svg) and" echo "exported by the build; the text font is Open Sans (Apache License 2.0)." echo for f in LICENSE-MIT LICENSE-APACHE; do echo "------------------------------------------------------------------------" echo "$f" echo "------------------------------------------------------------------------" cat "$tree/$f"; echo done echo "========================================================================" cat "$out/crates.txt" } > "$out/$slug-licenses.txt" find "$out/dist" -exec touch -t 202511010000 {} + ( cd "$out" && find dist -type f | LC_ALL=C sort > files.txt \ && COPYFILE_DISABLE=1 tar --format=ustar --uid 0 --gid 0 --uname root --gname root -n -cf - -T files.txt \ | gzip -n -9 > "$slug-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$tree" "$out/metadata.json" ls -l "$out/$slug-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/$slug-${COMMIT:0:7}-dist.tar.gz" "$out/$slug-licenses.txt" "$out/dist/zemeroth.wasm"