#!/usr/bin/env bash # Compila o Transcend do fredygames.com: o jogo de tiro abstrato de Jason Rohrer (2005, GNU GPL) em # WebAssembly, com o Emscripten 6.0.10. Este script e os arquivos de Builds/minorgems-web/ fazem parte do # codigo-fonte publicado junto do jogo (GPL: o fonte exato do binario). # # source /emsdk_env.sh # emsdk install 6.0.10 && emsdk activate 6.0.10 # src/FredGames.Bundler/Builds/build-transcend.sh # # Fonte: o tarball upstream do Debian (transcend_0.3.dfsg2.orig.tar.gz: o codigo da versao 0.3 do autor, # com a biblioteca minorGems dele, sem a pasta do portaudio), conferido pelo SHA-256. O jogo nao leva # nenhuma mudanca de codigo: o que o Emscripten nao tem fica nos arquivos de Builds/minorgems-web/ (GLUT # que falta, portaudio sobre SDL2 audio, GLU e glBegin/glEnd, sleep, ver glut-compat.h). # # Saida: artifacts/build/transcend-0.3/transcend.{js,wasm,data}, que o bundle.yaml confere pelo SHA-256. set -euo pipefail SRC_SHA256=986093fcfc0babe4b758e77e60c633603de065b3e7c671758c37d0a1ea03a923 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ -f "$here/minorgems-web/common.sh" ]; then source "$here/minorgems-web/common.sh"; else source "$here/common.sh"; fi mgw_init transcend tarball="$(mgw_fetch "https://deb.debian.org/debian/pool/main/t/transcend/transcend_0.3.dfsg2.orig.tar.gz" \ transcend_0.3.dfsg2.orig.tar.gz "$SRC_SHA256")" out="$mgw_root/artifacts/build/transcend-0.3" rm -rf "$out" mkdir -p "$out/src" "$out/data" tar xzf "$tarball" -C "$out/src" --strip-components 1 mgw_install_portaudio "$out/src" # o Transcend inclui o portaudio pelo caminho Transcend/portaudio/ (a pasta nao vem no tarball do Debian) mkdir -p "$out/src/Transcend/portaudio/pa_common" "$out/src/Transcend/portaudio/pablio" cp "$mgw_compat/portaudio.h" "$out/src/Transcend/portaudio/pa_common/portaudio.h" cp "$mgw_compat/pablio.h" "$out/src/Transcend/portaudio/pablio/pablio.h" # As fases (o jogo le a pasta levels/ do diretorio de trabalho) cp -R "$out/src/Transcend/levels" "$out/data/levels" cd "$out" mgw_flags game="src/Transcend/game" mg="src/minorGems" sources=( $mg/graphics/openGL/ScreenGL.cpp $mg/io/linux/TypeIOLinux.cpp $mg/util/stringUtils.cpp $mg/util/StringBufferOutputStream.cpp $mg/io/file/linux/PathLinux.cpp $mg/system/unix/TimeUnix.cpp $mg/system/linux/ThreadLinux.cpp $mg/system/linux/MutexLockLinux.cpp ) for f in game DrawableObject LevelDirectoryManager NamedColorFactory ParameterizedSpace \ ParameterSpaceControlPoint ObjectParameterSpaceControlPoint ParameterizedObject ShipBullet \ ShipBulletManager Enemy EnemyManager SculptureManager BossManager PortalManager SoundSamples \ SoundPlayer ReverbSoundFilter SoundParameterSpaceControlPoint StereoSoundParameterSpaceControlPoint \ ParameterizedStereoSound OnePointPlayableSound BulletSound MusicNoteWaveTable MusicPart MusicPlayer; do sources+=("$game/$f.cpp") done mgw_compile_all "${sources[@]}" "$mgw_compat/glut-compat.c" "$mgw_compat/pa_sdl.cpp" em++ "${MGW_LINKFLAGS[@]}" "${MGW_OBJS[@]}" --preload-file data@/ -o transcend.js rm -rf obj shasum -a 256 transcend.js transcend.wasm transcend.data