#!/usr/bin/env bash # Compila o Robots do fredygames.com (o jogo de perseguicao de curses da colecao bsd-games 2.17, do # NetBSD/Berkeley, licenca BSD) em WebAssembly com o Emscripten 6.0.10, sobre a camada de terminal de # curses-web/ (curses desenhado num canvas; ver curses-web/README.md). # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-robots.sh # # Fonte: bsdgames_2.17.orig.tar.gz do Debian (bsdgames/common.sh). robots/robots-fredygames.patch (so ativo # no navegador): as teclas vem da pagina (getch no lugar do getchar), flush_in usa flushinp e a tabela de # recordes mostra o jogador "player". Opcoes de compilacao da colecao: -DFANCY -DMAX_PER_UID=5. O arquivo # de recordes fica em /robots-saves/robots_roll (a pagina guarda a pasta no IndexedDB). O jogo em tempo real # (opcao -r, com SIGALRM) nao e usado. # # Saida: artifacts/build/robots-2.17/robots.{js,wasm}, que o bundle.yaml do jogo confere pelo SHA-256. set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" . "$here/bsdgames/common.sh" bsdgames_init "$here" . "$here/curses-web/flags.sh" out="$root/artifacts/build/robots-$BSDGAMES_VERSION" rm -rf "$out" mkdir -p "$out/work/obj" "$out/work/src" S="$out/work/src" tar xzf "$tarball" -C "$S" --strip-components=1 bsd-games-$BSDGAMES_VERSION/robots bsd-games-$BSDGAMES_VERSION/COPYING patch -d "$S" -p1 --no-backup-if-mismatch < "$here/robots/robots-fredygames.patch" >&2 R="$S/robots" sed 's|@robots_scorefile@|/robots-saves/robots_roll|' "$R/pathnames.h.in" > "$R/pathnames.h" objs=() for f in "$R"/*.c "$here/bsdgames/compat.c" "$CW_DIR/curses.c"; do o="$out/work/obj/$(basename "$f").o" objs+=("$o") emcc "${CW_CFLAGS[@]}" -DFANCY -DMAX_PER_UID=5 -ffile-prefix-map="$out/work/=" -ffile-prefix-map="$CW_DIR/=curses-web/" \ -ffile-prefix-map="$here/=" -I"$R" -I"$here/bsdgames" -c "$f" -o "$o" done emcc "${objs[@]}" "${CW_LDFLAGS[@]}" -o "$out/robots.js" rm -rf "$out/work" shasum -a 256 "$out/robots.js" "$out/robots.wasm"