#!/usr/bin/env bash # Compila o motor do Blasphemer no fredygames.com: o alvo crispy-heretic do Crispy Doom 7.2 # (GPL-2.0-or-later) em WebAssembly, com o Emscripten 6.0.10. Este script e parte do codigo-fonte # publicado junto do jogo ("the scripts used to control compilation" da GPL). # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # ./build.sh # # Saida: artifacts/build/crispy-heretic-7.2/crispy-heretic.{js,wasm}, que o bundle.yaml do jogo # confere pelo SHA-256. Sem modificacoes no codigo do Crispy Doom; so opcoes de compilacao: # - ENABLE_SDL2_NET=OFF: sem rede (o jogo nunca abre conexoes); # - SDL2_MIXER_FORMATS=[]: sem OGG/MP3 no SDL_mixer (a musica do jogo e tocada pelo emulador # de OPL do proprio motor); # - -DEMSCRIPTEN=1: a espera do OPL (opl/opl.c) cede a vez ao navegador com emscripten_sleep so # sob "#ifdef EMSCRIPTEN", macro que o Emscripten atual nao define mais (so __EMSCRIPTEN__); sem # ela a deteccao do chip de musica trava a pagina; # - -lidbfs.js: sistema de arquivos no IndexedDB, para os saves e a configuracao ficarem no navegador. # Por que o Crispy e nao o Chocolate Heretic (3.1.1, o motor do Freedoom): o Chocolate segue os limites # do original e para com "R_FindPlane: no more visplanes" (E1M3) ou por textura inexistente (E2M8) em fases # grandes do Blasphemer, que foram feitas para ports sem esses limites. # As bibliotecas que o Emscripten compila junto (SDL2 2.32.10 e SDL2_mixer 2.8.0, zlib) e o proprio # Emscripten estao publicados ao lado deste script. set -euo pipefail VERSION=7.2 EMSCRIPTEN=6.0.10 SHA256=8fc243bd8c29a17f7e25b5dc367ef93e4d727955d7f731ee4d743eb32445b74c URL="https://github.com/fabiangreffrath/crispy-doom/archive/refs/tags/crispy-doom-$VERSION.tar.gz" here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/crispy-heretic-$VERSION" 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 mkdir -p "$out" tarball="$out/crispy-doom-$VERSION.tar.gz" if [ ! -f "$tarball" ]; then curl -fsSL "$URL" -o "$tarball" fi echo "$SHA256 $tarball" | shasum -a 256 -c - rm -rf "$out/source" "$out/build" mkdir -p "$out/source" tar -xzf "$tarball" -C "$out/source" --strip-components 1 emcmake cmake -S "$out/source" -B "$out/build" \ -DCMAKE_BUILD_TYPE=Release \ -DENABLE_SDL2_NET=OFF \ "-DCMAKE_C_FLAGS=-DEMSCRIPTEN=1 -sSDL2_MIXER_FORMATS=[]" \ "-DCMAKE_EXE_LINKER_FLAGS=-lidbfs.js -sSDL2_MIXER_FORMATS=[]" cmake --build "$out/build" --target crispy-heretic -j cp "$out/build/src/crispy-heretic.js" "$out/build/src/crispy-heretic.wasm" "$out/" shasum -a 256 "$out/crispy-heretic.js" "$out/crispy-heretic.wasm"