#!/usr/bin/env bash # Compila o motor do Freedoom no fredygames.com: Chocolate Doom 3.1.1 (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/chocolate-doom-3.1.1/chocolate-doom.{js,wasm}, que o bundle.yaml do jogo # confere pelo SHA-256. Sem modificacoes no codigo do Chocolate 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 Freedoom e tocada pelo emulador # de OPL do proprio Chocolate Doom); # - -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. # 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=3.1.1 EMSCRIPTEN=6.0.10 SHA256=1edcc41254bdc194beb0d33e267fae306556c4d24110a1d3d3f865717f25da23 URL="https://github.com/chocolate-doom/chocolate-doom/archive/refs/tags/chocolate-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/chocolate-doom-$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/chocolate-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 chocolate-doom -j cp "$out/build/src/chocolate-doom.js" "$out/build/src/chocolate-doom.wasm" "$out/" shasum -a 256 "$out/chocolate-doom.js" "$out/chocolate-doom.wasm"