#!/usr/bin/env bash # Compila o Asylum do fredygames.com: o jogo de plataforma de Andy Southgate para o Acorn Archimedes # (1994; jogo, codigo, graficos, sons e musica em dominio publico pelo autor desde 2002), no port C/SDL2 # de Hugh Robinson e Gregory Maynard-Hoare (GPL-3.0-or-later), em WebAssembly com o Emscripten 6.0.10 # e as portas SDL2 2.32.10 e SDL2_mixer 2.8.0 dele, sem mudancas no codigo. Este script faz parte do # codigo-fonte publicado junto do jogo. # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-asylum.sh # # Fonte: o tarball do commit 8f8108c do GMH-Code/Asylum no GitHub (asylum-8f8108c.tar.gz; o projeto # nao tem tags), conferido pelo SHA-256 e guardado em artifacts/cache/asylum/ (o site hospeda o mesmo # arquivo). Na pasta de fontes do site, o script acha o tarball ao lado dele. # # Opcoes: as do alvo emcc do Makefile do port (SDL2_mixer sem formatos: a musica e os efeitos sao os # samples do jogo, tocados pelo proprio codigo), com -O2 no lugar de -O3 e o data/ num asylum.data # que o proprio Emscripten carrega (--preload-file), em /data. # # O port ja guarda opcoes, recordes e o jogo salvo no IndexedDB (/config e /hiscores, montados e # sincronizados pelo proprio main e a cada gravacao). # # Saida: artifacts/build/asylum-8f8108c/asylum.{js,wasm,data}, que o bundle.yaml do jogo confere pelo # SHA-256. set -euo pipefail COMMIT=8f8108cf3cc8fba47dcf5d0c0f8944ec84d6cd0e SHORT=8f8108c SRC_SHA256=a8522286383470e65de49a15f9b5273687446727b7f3a2f83f6d835e873f4c40 EMSCRIPTEN=6.0.10 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/asylum-$SHORT" cache="$root/artifacts/cache/asylum" tarball="asylum-$SHORT.tar.gz" if ! emcc --version 2>/dev/null | head -1 | grep -q " $EMSCRIPTEN "; then echo "Precisa do Emscripten $EMSCRIPTEN no PATH (source /emsdk_env.sh)." >&2 exit 1 fi if [ -f "$here/$tarball" ]; then src_tar="$here/$tarball" else src_tar="$cache/$tarball" if [ ! -f "$src_tar" ]; then mkdir -p "$cache" curl -fsSL -o "$src_tar.part" "https://github.com/GMH-Code/Asylum/archive/$COMMIT.tar.gz" mv "$src_tar.part" "$src_tar" fi fi echo "$SRC_SHA256 $src_tar" | shasum -a 256 -c - >&2 rm -rf "$out" mkdir -p "$out" tar xzf "$src_tar" -C "$out" s="Asylum-$COMMIT" # Compila de dentro da pasta de saida, com caminhos relativos: o carregador do asylum.data guarda o # nome que o arquivo tem aqui. ( cd "$out" emcc -O2 -funsigned-char -ffile-prefix-map="$out/=" -w \ -DRESOURCEPATH=\"/usr/share/games/asylum\" -DSCOREPATH=\"/var/games/asylum\" \ -DCONFIGPATH=\"/var/games/asylum\" \ $(for f in alien asylum bullet file keyboard maze menus player projectile sound vdu; do echo "$s/$f.c"; done) \ -sUSE_SDL=2 -sUSE_SDL_MIXER=2 -sSDL2_MIXER_FORMATS='[]' -sASYNCIFY -sASYNCIFY_IGNORE_INDIRECT \ -sINITIAL_MEMORY=32MB -sSTACK_SIZE=1MB -sALLOW_MEMORY_GROWTH -sENVIRONMENT=web -sEXIT_RUNTIME=1 \ -lidbfs.js \ --preload-file "$s/data@/data" \ -o asylum.js ) shasum -a 256 "$out/asylum.js" "$out/asylum.wasm" "$out/asylum.data"