#!/usr/bin/env bash # Compila Aevilia (RPG de Game Boy Color de ISSOtm e equipe, Apache-2.0) do commit 5759e97 com o RGBDS # 0.3.7, a versao que o INSTALL.md do autor recomenda (a 0.3.10 nao monta o jogo, a 0.3.6 tem um bug # que quebra o mapa da intro). O repositorio traz o Makefile em modo de depuracao (DebugMode=1, que o # proprio Makefile manda nao redistribuir); aqui a build e de producao (DebugMode=0, ROMVersion=1). # Submodulo: DevSound (MIT) no commit bd181be. O player de efeitos sonoros FX Hammer (Aleksi Eeben, sem # termos de redistribuicao publicados) fica de fora, trocado por stubs pelo patch # Builds/aevilia/no-fxhammer.patch, e o SFXData.bin e esvaziado. # # O RGBDS precisa do Bison 3 para gerar o parser do rgbasm: o script compila o GNU Bison 3.8.2 e o # RGBDS (so rgbasm, rgblink e rgbfix) em artifacts/tools/. # # src/FredGames.Bundler/Builds/build-aevilia.sh # # Saida: artifacts/build/aevilia/aevilia.gbc set -euo pipefail BISON=3.8.2 BISON_SHA256=9bba0214ccf7f1079c5d59210045227bcf619519840ebfa80cd3849cff5a5bf2 RGBDS=0.3.7 RGBDS_SHA256=5ddd8b9d57e91c798f464e83fa723cdbab45376958a56a554fbfb3c417844bfc COMMIT=5759e97089aa825e992317327cb850420728b93e GAME_SHA256=9fbff588d7090433e24dd894e1198ad2f2d2ad4633dec7015472e6288818551f DEVSOUND=bd181be5194a89d8ae6a5e590d9a81e2d3ca8aec DEVSOUND_SHA256=88e9cc98f689f357c34a2858bbe02173ad37a37265e04503c5af5ed16946a93c ROM_SHA256=3afbecdf2b641117b107ee13f31f6aefb1e616cb5772f9f472b422c97a7c9be6 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/aevilia" cache="$root/artifacts/build/cache" bison="$root/artifacts/tools/bison-$BISON" rgbds="$root/artifacts/tools/rgbds-$RGBDS" mkdir -p "$cache" fetch() { [ -f "$2" ] || curl -fsSL --retry 4 "$1" -o "$2"; echo "$3 $2" | shasum -a 256 -c -; } fetch "https://ftp.gnu.org/gnu/bison/bison-$BISON.tar.xz" "$cache/bison-$BISON.tar.xz" "$BISON_SHA256" fetch "https://github.com/gbdev/rgbds/archive/refs/tags/v$RGBDS.tar.gz" "$cache/rgbds-$RGBDS.tar.gz" "$RGBDS_SHA256" fetch "https://github.com/ISSOtm/Aevilia-GB/archive/$COMMIT.tar.gz" "$cache/Aevilia-GB-$COMMIT.tar.gz" "$GAME_SHA256" fetch "https://github.com/DevEd2/DevSound/archive/$DEVSOUND.tar.gz" "$cache/DevSound-$DEVSOUND.tar.gz" "$DEVSOUND_SHA256" if [ ! -x "$bison/bin/bison" ]; then rm -rf "$bison" "$bison.src" && mkdir -p "$bison.src" tar -xJf "$cache/bison-$BISON.tar.xz" -C "$bison.src" --strip-components 1 (cd "$bison.src" && ./configure --prefix="$bison" --disable-nls >/dev/null && make -j8 >/dev/null && make install >/dev/null) rm -rf "$bison.src" fi if [ ! -x "$rgbds/rgbasm" ] || [ ! -x "$rgbds/rgblink" ] || [ ! -x "$rgbds/rgbfix" ]; then rm -rf "$rgbds" && mkdir -p "$rgbds" tar -xzf "$cache/rgbds-$RGBDS.tar.gz" -C "$rgbds" --strip-components 1 make -C "$rgbds" YACC="$bison/bin/bison" WARNFLAGS=-w rgbasm rgblink rgbfix >/dev/null 2>&1 fi rm -rf "$out" && mkdir -p "$out/tree" tar -xzf "$cache/Aevilia-GB-$COMMIT.tar.gz" -C "$out/tree" --strip-components 1 tar -xzf "$cache/DevSound-$DEVSOUND.tar.gz" -C "$out/tree/sound/DevSound" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/aevilia/no-fxhammer.patch" : > "$out/tree/sound/SFXData.bin" # o Makefile exige um sound/*.bin; fica vazio e nao e incluido LC_ALL=C PATH="$rgbds:$PATH" make -C "$out/tree" bin/aevilia.gbc DebugMode=0 ROMVersion=1 >/dev/null cp "$out/tree/bin/aevilia.gbc" "$out/" echo "$ROM_SHA256 $out/aevilia.gbc" | shasum -a 256 -c -