#!/usr/bin/env bash # Compila o Assemblio (WASM-4, de Philipp Luhmann / quic5, GPL-3.0) a partir do fonte, no commit d1de94c (o # HEAD, "Create LICENSE"; o codigo e o da jam de 2022). O autor nao publicou release, e o cartucho do # wasm4.org nao serve (o arquivo de cartuchos de la e CC BY-NC-SA). Segue o bundle.sh do autor: o Zig da # epoca (0.10.1, o build.zig usa a API std.build.Builder) em ReleaseSmall, depois o wasm-opt -Oz # --strip-dwarf --strip-producers --zero-filled-memory (binaryen 101, o mesmo dos outros builds de # WASM-4; o bundle.sh nao fixa versao). O executor do "zig build" do 0.10.1 nao linka mais no macOS atual # (dyld_stub_binder), por isso o script chama o "zig build-lib" com as mesmas opcoes que o build.zig # passa (biblioteca dinamica wasm32-freestanding, memoria importada de 64 KiB, global_base 6560, pilha de # 8192 bytes, exportando start e update). Dois builds seguidos, em pastas diferentes, dao o mesmo sha256. # Por ser GPL, o site hospeda junto o tarball do commit e este script. # # src/FredGames.Bundler/Builds/build-assemblio.sh # # O Zig fica em artifacts/tools/zig-/ (baixado de ziglang.org se faltar) e o binaryen em # artifacts/tools/binaryen-version_101/ (o build-2048.sh o instala). # # Saida: artifacts/build/assemblio/assemblio.wasm set -euo pipefail COMMIT=d1de94c299b99aea9ef40a209e3c8064b3e661e9 SHA256=de8386f44d4e49176b5adfe9c06cf9f02fc3f2a9ffe248783f9c43100cb5066e CART_SHA256=d2cc2de2d6262a178b572631c1614b5abd70242433c9e4b70f6611806ba33b4d ZIG=0.10.1 ZIG_SHA256=b9b00477ec5fa1f1b89f35a7d2a58688e019910ab80a65eac2a7417162737656 BINARYEN=version_101 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/assemblio" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools" wasm_opt="$tools/binaryen-$BINARYEN/bin/wasm-opt" [ -x "$wasm_opt" ] || { echo "falta $wasm_opt (rode o build-2048.sh)" >&2; exit 1; } mkdir -p "$cache" fetch() { [ -f "$cache/$2" ] || curl -fsSL --retry 4 "$1" -o "$cache/$2"; echo "$3 $cache/$2" | shasum -a 256 -c -; } fetch "https://github.com/luehmann/assemblio/archive/$COMMIT.tar.gz" "assemblio-${COMMIT:0:7}.tar.gz" "$SHA256" if [ ! -x "$tools/zig-$ZIG/zig" ]; then fetch "https://ziglang.org/download/$ZIG/zig-macos-aarch64-$ZIG.tar.xz" "zig-macos-aarch64-$ZIG.tar.xz" "$ZIG_SHA256" tar -xJf "$cache/zig-macos-aarch64-$ZIG.tar.xz" -C "$tools" mv "$tools/zig-macos-aarch64-$ZIG" "$tools/zig-$ZIG" fi rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$cache/assemblio-${COMMIT:0:7}.tar.gz" -C "$out/tree" --strip-components 1 (cd "$out/tree" && "$tools/zig-$ZIG/zig" build-lib src/main.zig -target wasm32-freestanding -O ReleaseSmall \ -dynamic --import-memory --initial-memory=65536 --max-memory=65536 --global-base=6560 --stack 8192 \ --export=start --export=update --name cart --global-cache-dir "$out/zig-global-cache" --cache-dir "$out/zig-cache") "$wasm_opt" -Oz --strip-dwarf --strip-producers --zero-filled-memory -o "$out/assemblio.wasm" "$out/tree/cart.wasm" rm -rf "$out/tree" "$out/zig-global-cache" "$out/zig-cache" echo "$CART_SHA256 $out/assemblio.wasm" | shasum -a 256 -c -