#!/usr/bin/env bash # Compila o AAAAXY (plataforma 2D nao linear em espacos impossiveis, de Rudolf Polzer / divVerent, Apache-2.0; Go + Ebitengine) para # WebAssembly a partir da tag v1.8.34 de github.com/divVerent/aaaaxy (commit 90cfc22), com o Go 1.27.2 (o do go.mod do projeto) em # artifacts/tools/go-1.27.2 (tarball oficial, sha256 abaixo) e os modulos do go.sum do autor (baixados do proxy do Go e conferidos pelo go.sum). # # src/FredGames.Bundler/Builds/build-aaaaxy.sh # # Segue o que o projeto faz no release de web (scripts/binary-release-compile.sh: GOOS=js GOARCH=wasm make BUILDTYPE=release): os mesmos # flags (-a -trimpath -buildvcs=false, -ldflags "-s -w -buildid="), as mesmas etapas de scripts/build-generated-assets.sh (menos o # que exige ferramentas que nao temos: o zip e feito com a etiqueta "embed" sem "zip", ou seja, os arquivos entram no binario sem o # empacotamento em zip) e o wasm_exec.js do proprio Go. Mudancas no codigo: nenhuma. Fora do binario ficam # o submodulo SDL_GameControllerDB (mapeamentos de controles de SDL, inuteis no navegador, que ja traz os mapeamentos do Gamepad API) e # as demos de teste (assets/demos, que o go:embed ja ignora por comecarem com "_"). # # Saida: artifacts/build/aaaaxy-90cfc22/{aaaaxy.wasm,wasm_exec.js}; dois builds seguidos dao os mesmos bytes. set -euo pipefail COMMIT=90cfc2287a764bd1abc12b90705f121f7fc37811 SHA256=f1a973948f321923c6aeed6033a207172a8b78bb2521bd093d3a8bb9af1ebb35 GO=1.27.2 GO_SHA256=76812b213b1b2302c978d28fa52fa92d541704b9e7d9d5db8002c50e4018c4c5 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/aaaaxy-${COMMIT:0:7}" cache="$root/artifacts/build/cache" tgz="$cache/aaaaxy-${COMMIT:0:7}.tar.gz" gotgz="$cache/go$GO.darwin-arm64.tar.gz" godir="$root/artifacts/tools/go-$GO" mkdir -p "$cache" fetch() { if [ ! -f "$2" ]; then curl -fsSL --retry 4 "$1" -o "$2.partial" && mv "$2.partial" "$2" fi echo "$3 $2" | shasum -a 256 -c - } fetch "https://github.com/divVerent/aaaaxy/archive/$COMMIT.tar.gz" "$tgz" "$SHA256" if [ ! -x "$godir/bin/go" ]; then fetch "https://go.dev/dl/go$GO.darwin-arm64.tar.gz" "$gotgz" "$GO_SHA256" mkdir -p "$godir.tmp" && tar -xzf "$gotgz" -C "$godir.tmp" && mv "$godir.tmp/go" "$godir" && rmdir "$godir.tmp" fi export GOTOOLCHAIN=local export PATH="$godir/bin:$PATH" [ "$(go version | cut -d' ' -f3)" = "go$GO" ] || { echo "Precisa do Go $GO em $godir." >&2; exit 1; } rm -rf "$out" mkdir -p "$out/tree" tar -xzf "$tgz" -C "$out/tree" --strip-components 1 cd "$out/tree" # Etapas do scripts/build-generated-assets.sh que valem para o release. rm -rf third_party/SDL_GameControllerDB licenses/asset-SDL_GameControllerDB-*.txt mkdir -p assets/generated cp assets/_saved/* assets/generated/ AAAAXY_BUILD_USE_VERSION_FILE=true sh scripts/version.sh semver 2>/dev/null > assets/generated/version.txt gzip -9 -n < ./third_party/gnu_unifont/assets/fonts/_unifont-15.1.04.bdf > assets/generated/unifont.bdf.gz export GOMODCACHE="$cache/gomod" GOCACHE="$cache/gobuild" GOFLAGS=-mod=mod CGO_ENABLED=0 GOOS=js GOARCH=wasm go build -a -trimpath -buildvcs=false -tags=embed "-gcflags=all=-dwarf=false" "-ldflags=all=-s -w -buildid=" -o "$out/aaaaxy.wasm" . > "$out/build.log" 2>&1 || { tail -30 "$out/build.log"; exit 1; } cp "$(go env GOROOT)/lib/wasm/wasm_exec.js" "$out/wasm_exec.js" cd "$root" rm -rf "$out/tree" "$out/build.log" ls -l "$out" shasum -a 256 "$out/aaaaxy.wasm" "$out/wasm_exec.js"