# Pecas comuns dos jogos em Rust compilados para wasm32-unknown-unknown sem wasm-bindgen (macroquad e pagurus): # baixar o tarball do commit (sha256), compilar com o Cargo.lock (do autor ou o nosso) e "--locked", juntar as # licencas dos crates e empacotar dist/ num tar.gz deterministico. Usado com "source" pelos Builds/build-.sh. # # Variaveis que o script do jogo define antes de "mq_init": SLUG, REPO (dono/nome), COMMIT, SHA256, TOOLCHAIN. # Depois de mq_init: $out (artifacts/build/-), $tree (fonte extraido), $here, $root. set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" export RUSTUP_HOME="$tools/rustup" CARGO_HOME="$tools/cargo" export PATH="$CARGO_HOME/bin:$PATH" mq_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 } mq_init() { short="${COMMIT:0:7}" out="$root/artifacts/build/$SLUG-$short" mkdir -p "$cache" mq_fetch "https://github.com/$REPO/archive/$COMMIT.tar.gz" "$SLUG-$short.tar.gz" "$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/$SLUG-$short.tar.gz" -C "$out/tree" --strip-components 1 tree="$out/tree" } mq_patch() { # arquivo.patch patch -s -p1 -d "$tree" < "$1" } mq_cargo() { # nome-do-pacote-raiz ( cd "$tree" 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; } cargo metadata --locked --format-version 1 --filter-platform wasm32-unknown-unknown 2>/dev/null \ | python3 -I "$here/gridbugs/rust-licenses.py" "$1" "$out/crates.txt" ) } mq_js() { # versao-do-macroquad sha256: copia o mq_js_bundle.js que o proprio crate publica local f f="$(ls "$CARGO_HOME"/registry/src/*/macroquad-$1/js/mq_js_bundle.js | head -1)" echo "$2 $f" | shasum -a 256 -c - >/dev/null cp "$f" "$out/dist/mq_js_bundle.js" } mq_pack() { # escreve $out/--dist.tar.gz e imprime os sha256 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-$short-dist.tar.gz" && rm files.txt ) rm -rf "$tree" ls -l "$out/$SLUG-$short-dist.tar.gz" shasum -a 256 "$out/$SLUG-$short-dist.tar.gz" "$out/licenses.txt" }