#!/usr/bin/env bash # Compila o Scorch (artilharia por turnos de Volodymyr Shcherbinin, MIT; Rust + macroquad 0.4.16) em WebAssembly a partir do # commit 2fda9ff de github.com/vovinacci/scorch-game: cargo build --release --locked --no-default-features (sem o # auto-update) --target wasm32-unknown-unknown (Cargo.lock do autor mais o patch, Rust 1.92.0 de artifacts/tools). Os sons # sao sintetizados em tempo de execucao e a fonte (ScorchMono, OFL) entra no .wasm; nao ha arquivos de dados. # # Mudancas (scorch/scorch-wasm.patch): saves em localStorage (quad-storage, chaves "scorch.run.json" e "scorch.profile.json") em # vez de arquivos; sem sys-locale/dirs no navegador (idioma inicial = ingles); sem o gancho de relatorio de crash (grava arquivo # e usa SystemTime); o item "Quit" do menu some e "salvar e sair" volta ao menu. Cargo.lock acompanha o patch. # A pagina (scorch/index.html) e nossa; mq_js_bundle.js e o do crate macroquad 0.4.16 (a pagina declara a global register_plugin, que o bundle atribui sem # declarar), sapp_jsutils.js o do sapp-jsutils 0.1.5 (o quad-storage.js usa o js_object global dele) e quad-storage.js o do commit a359374 de optozorax/quad-storage (plugin 0.1.2, o do quad-storage-sys 0.1.0). # # src/FredGames.Bundler/Builds/build-scorch.sh # # Saida: artifacts/build/scorch-2fda9ff/{scorch-2fda9ff-dist.tar.gz,licenses.txt}; o tar.gz tem que sair igual em dois builds. set -euo pipefail COMMIT=2fda9ffc2a8eb21250e786be856328ef79259adb SHA256=af7bb5b808bc0a79fe05287fc54900ee510eb57eaf6c63dcd82d911f6264b880 QS_COMMIT=a359374b4ced54ba6b272ca3f9e40d1d9051211e QS_SHA256=8f6a4e2bf818d00685d6d1ef1010ec9bb1c84a30401c253b353c09dec6c883d4 MQ_JS_SHA256=4bf663a44a06c113bed92e0596c58139cd9db7f0d67ef2cc49ca06016e0b5ea0 TOOLCHAIN=1.92.0 # self_cell: Apache-2.0 OR GPL-2.0-only; usamos a Apache-2.0 (RUST_LICENSES_ALLOW abaixo). here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/scorch-${COMMIT:0:7}" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" export RUSTUP_HOME="$tools/rustup" CARGO_HOME="$tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" mkdir -p "$cache" 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 } fetch "https://github.com/vovinacci/scorch-game/archive/$COMMIT.tar.gz" "scorch-${COMMIT:0:7}.tar.gz" "$SHA256" fetch "https://raw.githubusercontent.com/optozorax/quad-storage/$QS_COMMIT/js/quad-storage.js" "quad-storage-${QS_COMMIT:0:7}.js" "$QS_SHA256" rustup toolchain install "$TOOLCHAIN" --profile minimal --target wasm32-unknown-unknown >/dev/null 2>&1 export RUSTUP_TOOLCHAIN="$TOOLCHAIN" rm -rf "$out"; mkdir -p "$out/tree" "$out/dist" tar -xzf "$cache/scorch-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 tree="$out/tree" patch -d "$tree" -p1 -s < "$here/scorch/scorch-wasm.patch" ( cd "$tree" SCORCH_BUILD_VERSION="0.4.1+g${COMMIT:0:7}" 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 --no-default-features --target wasm32-unknown-unknown 2> "$out/cargo.log" \ || { tail -40 "$out/cargo.log"; exit 1; } cargo metadata --locked --no-default-features --format-version 1 --filter-platform wasm32-unknown-unknown 2>/dev/null \ | RUST_LICENSES_ALLOW=self_cell python3 -I "$here/gridbugs/rust-licenses.py" scorch "$out/crates.txt" ) reg="$(dirname "$(ls -d "$CARGO_HOME"/registry/src/index.crates.io-*/macroquad-0.4.16 | head -1)")" mq_js="$reg/macroquad-0.4.16/js/mq_js_bundle.js" echo "$MQ_JS_SHA256 $mq_js" | shasum -a 256 -c - cp "$tree/target/wasm32-unknown-unknown/release/scorch.wasm" "$mq_js" "$reg/sapp-jsutils-0.1.5/js/sapp_jsutils.js" "$out/dist/" cp "$cache/quad-storage-${QS_COMMIT:0:7}.js" "$out/dist/quad-storage.js" cp "$here/scorch/index.html" "$out/dist/index.html" { echo "== Scorch (LICENSE do repositorio, MIT)" cat "$tree/LICENSE" echo echo "== ScorchMono.ttf (assets/fonts/README.md e LICENSE-OFL.txt do repositorio)" cat "$tree/assets/fonts/README.md" echo cat "$tree/assets/fonts/LICENSE-OFL.txt" echo echo "== quad-storage.js (optozorax/quad-storage, $QS_COMMIT): LICENSE-MIT" curl -fsSL "https://raw.githubusercontent.com/optozorax/quad-storage/$QS_COMMIT/LICENSE-MIT" echo echo "========================================================================" cat "$out/crates.txt" } > "$out/licenses.txt" find "$out/dist" -exec touch -t 202611080000 {} + ( 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 > "scorch-${COMMIT:0:7}-dist.tar.gz" && rm files.txt ) rm -rf "$tree" ls -l "$out/scorch-${COMMIT:0:7}-dist.tar.gz" shasum -a 256 "$out/scorch-${COMMIT:0:7}-dist.tar.gz" "$out/licenses.txt"