#!/usr/bin/env bash # Compila a versao web do Zoridor (jogo de tabuleiro de corrida e paredes da Ringtail Software Ltd., MIT; Zig) em # WebAssembly, a partir do commit 960df4f de github.com/ringtailsoftware/zoridor. O build.zig do autor ("zig build # -Dweb=true") e da era do Zig 0.13, cujo executor de build nao liga no macOS atual, e baixa dependencias que so a # versao de terminal e o servidor de teste usam; por isso o mesmo passo e feito direto com "zig build-exe" do Zig 0.13.0 # oficial (artifacts/tools/zig-0.13.0, tarball conferido pelo sha256): src/webmain.zig para wasm32-freestanding, # ReleaseSmall, -rdynamic e o modulo buildopts com web = true (o que o build.zig gera). O codigo do jogo nao muda; # o zoridor.js do repositorio vai sem mudanca e a pagina (zoridor/index.html) e nossa, derivada da do autor. Os outros # arquivos da pasta web do autor (cart.wasm/wasm4.js da versao WASM-4, live.js) ficam de fora. # # src/FredGames.Bundler/Builds/build-zoridor.sh # # Saida: artifacts/build/zoridor-960df4f/{zoridor-960df4f-dist.tar.gz,licenses.txt}; o .tar.gz sai igual em dois builds. set -euo pipefail COMMIT=960df4f73236654226bf8fad1f578d379c6b23a8 SHA256=5e870343a2960bb3cc48c46954c3dc61a5942ae20628e2b78cd1fd5b12ebfc97 ZIG_VERSION=0.13.0 ZIG_SHA256=46fae219656545dfaf4dce12fb4e8685cec5b51d721beee9389ab4194d43394c here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" cache="$root/artifacts/build/cache" zig_dir="$root/artifacts/tools/zig-$ZIG_VERSION" short="${COMMIT:0:7}" out="$root/artifacts/build/zoridor-$short" mkdir -p "$cache" fetch() { # url arquivo sha256 [ -f "$cache/$2" ] || { curl -fsSL --retry 4 "$1" -o "$cache/$2.partial"; mv "$cache/$2.partial" "$cache/$2"; } echo "$3 $cache/$2" | shasum -a 256 -c - >/dev/null } fetch "https://github.com/ringtailsoftware/zoridor/archive/$COMMIT.tar.gz" "zoridor-$short.tar.gz" "$SHA256" if [ ! -x "$zig_dir/zig" ]; then fetch "https://ziglang.org/download/$ZIG_VERSION/zig-macos-aarch64-$ZIG_VERSION.tar.xz" "zig-macos-aarch64-$ZIG_VERSION.tar.xz" "$ZIG_SHA256" mkdir -p "$zig_dir"; tar -xJf "$cache/zig-macos-aarch64-$ZIG_VERSION.tar.xz" -C "$zig_dir" --strip-components 1 fi rm -rf "$out"; mkdir -p "$out/tree" "$out/dist" tar -xzf "$cache/zoridor-$short.tar.gz" -C "$out/tree" --strip-components 1 tree="$out/tree" printf 'pub const web: bool = true;\n' > "$out/buildopts.zig" ( cd "$tree" ZIG_GLOBAL_CACHE_DIR="$out/zig-cache" ZIG_LOCAL_CACHE_DIR="$out/zig-cache" \ "$zig_dir/zig" build-exe -target wasm32-freestanding -O ReleaseSmall -fno-entry -rdynamic \ --dep buildopts -Mroot=src/webmain.zig -Mbuildopts="$out/buildopts.zig" --name zoridor -femit-bin="$out/dist/zoridor.wasm" ) rm -f "$out/dist/zoridor.wasm.o" # objeto intermediario que o zig deixa ao lado do .wasm cp "$tree/src/zoridor.js" "$out/dist/zoridor.js" cp "$here/zoridor/index.html" "$out/dist/index.html" { echo "== Zoridor (LICENSE.md do repositorio, MIT)" cat "$tree/LICENSE.md" echo echo "== Biblioteca padrao do Zig $ZIG_VERSION (parte dela entra no .wasm; lib/ e LICENSE do tarball oficial, MIT)" cat "$zig_dir/LICENSE" } > "$out/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 > "zoridor-$short-dist.tar.gz" && rm files.txt ) rm -rf "$tree" "$out/zig-cache" "$out/buildopts.zig" ls -l "$out/zoridor-$short-dist.tar.gz" shasum -a 256 "$out/zoridor-$short-dist.tar.gz" "$out/licenses.txt"