#!/usr/bin/env bash # Compila o To The Core (WASM-4, de Gertkeno, GPL-3.0) a partir do fonte, no commit 2bade22 (o HEAD, que so # acrescenta a licenca; o jogo e o do release v4.1). Com uma unica mudanca: to-the-core/welcome-text.patch # troca a primeira linha do tutorial ("Welcome to freddy\kruger dig dug!") por "Welcome to\To The Core!", # para a tela nao citar um jogo comercial. Sem o patch o resultado e identico, byte a byte, ao cart.wasm do # release v4.1 (sha256 0eb03aae...4797); o script confere isso com PATCH=0. O build.zig do autor (Zig # 0.15.2) nao roda aqui porque o executor do "zig build" nao linka no macOS atual, entao o script chama o # "zig build-exe" com as mesmas opcoes do build.zig (wasm32-freestanding, ReleaseSmall, sem entrada, # memoria importada de 64 KiB, pilha de 14752 bytes, exportando start e update). Sem wasm-opt (o autor # nao usa). Dois builds seguidos, em pastas diferentes, dao o mesmo sha256. # # src/FredGames.Bundler/Builds/build-to-the-core.sh # com o patch # PATCH=0 src/FredGames.Bundler/Builds/build-to-the-core.sh # sem o patch (confere com o release) # # O Zig fica em artifacts/tools/zig-0.15.2/ (baixado de ziglang.org se faltar). # Saida: artifacts/build/to-the-core/to-the-core.wasm set -euo pipefail COMMIT=2bade22dc963679657bc122d2c97eb6269a7b9f5 SHA256=2adc9b2a7643ae0a9a32bc5034425605ccc1d7eee4695ca6a675b20442fada4a RELEASE_CART_SHA256=0eb03aaead196c2d4fab199e2f2d9d74b10409823403127319b1f753038f4797 ZIG=0.15.2 ZIG_SHA256=3cc2bab367e185cdfb27501c4b30b1b0653c28d9f73df8dc91488e66ece5fa6b PATCH="${PATCH:-1}" 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" fetch() { [ -f "$cache/$2" ] || curl -fsSL --retry 4 "$1" -o "$cache/$2"; echo "$3 $cache/$2" | shasum -a 256 -c -; } out="$root/artifacts/build/to-the-core" fetch "https://github.com/Gertkeno/to-the-core/archive/$COMMIT.tar.gz" "to-the-core-${COMMIT:0:7}.tar.gz" "$SHA256" if [ ! -x "$tools/zig-$ZIG/zig" ]; then fetch "https://ziglang.org/download/$ZIG/zig-aarch64-macos-$ZIG.tar.xz" "zig-aarch64-macos-$ZIG.tar.xz" "$ZIG_SHA256" tar -xJf "$cache/zig-aarch64-macos-$ZIG.tar.xz" -C "$tools" mv "$tools/zig-aarch64-macos-$ZIG" "$tools/zig-$ZIG" fi rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/to-the-core-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 [ "$PATCH" = 1 ] && (cd "$out/tree" && patch -p1 -s < "$here/to-the-core/welcome-text.patch") (cd "$out/tree" && "$tools/zig-$ZIG/zig" build-exe src/main.zig -target wasm32-freestanding -O ReleaseSmall \ -fno-entry -fstrip --import-memory --initial-memory=65536 --max-memory=65536 --stack 14752 \ --export=start --export=update --name cart --global-cache-dir "$out/zig-global-cache" --cache-dir "$out/zig-cache") cp "$out/tree/cart.wasm" "$out/to-the-core.wasm" rm -rf "$out/tree" "$out/zig-global-cache" "$out/zig-cache" if [ "$PATCH" = 0 ]; then echo "$RELEASE_CART_SHA256 $out/to-the-core.wasm" | shasum -a 256 -c -; fi ls -l "$out/to-the-core.wasm" shasum -a 256 "$out/to-the-core.wasm"