#!/usr/bin/env bash # Compila Rebound (homebrew de Game Boy Color de DevEd e colaboradores, MIT) do commit cc2966e com o RGBDS # 0.9.0. O autor nao publica a ROM no repositorio: o build.sh dele converte os mapas (convertmap.py) e monta # com rgbasm/rgblink/rgbfix, e o script refaz esses passos. O patch Builds/rebound-gb/release-no-compo-logo.patch # desliga o DebugMode do Main.asm (o repositorio vem com ele ligado: a ROM abre num menu de depuracao) e tira da sequencia de aberturas a tela com o logo da GB Compo 2021 (marca de terceiros). # # O RGBDS precisa do Bison 3 para gerar o parser do rgbasm (o do macOS e o 2.3): 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-rebound-gb.sh # # Saida: artifacts/build/rebound-gb/Rebound.gbc set -euo pipefail BISON=3.8.2 BISON_SHA256=9bba0214ccf7f1079c5d59210045227bcf619519840ebfa80cd3849cff5a5bf2 RGBDS=0.9.0 RGBDS_SHA256=2be649a6b3c3b4a462e222b3082fa2e1c83142f317ba862b17899f5a25717380 COMMIT=cc2966e1643d480d0780fb6cc5b9ef53d5ef6898 GAME_SHA256=d814a48faff37a920cc0cefa3087d6437e470f52bb12e708a36d792aefee3ec1 ROM_SHA256=2ac93dd331bf590532900203c5ede5c560d06f31b6327867db62349844c30504 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/rebound-gb" 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/DevEd2/ReboundGB/archive/$COMMIT.tar.gz" "$cache/ReboundGB-$COMMIT.tar.gz" "$GAME_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.src" && mkdir -p "$rgbds.src" "$rgbds" tar -xzf "$cache/rgbds-$RGBDS.tar.gz" -C "$rgbds.src" --strip-components 1 PATH="$bison/bin:$PATH" make -C "$rgbds.src" -j8 WARNFLAGS=-w rgbasm rgblink rgbfix >/dev/null cp "$rgbds.src/rgbasm" "$rgbds.src/rgblink" "$rgbds.src/rgbfix" "$rgbds/" rm -rf "$rgbds.src" fi rm -rf "$out" && mkdir -p "$out/tree" tar -xzf "$cache/ReboundGB-$COMMIT.tar.gz" -C "$out/tree" --strip-components 1 patch -s -p1 -d "$out/tree" < "$here/rebound-gb/release-no-compo-logo.patch" cd "$out/tree" (cd Levels && for f in *.json; do python3 -I ../convertmap.py -c "$f" >/dev/null; done) PATH="$rgbds:$PATH" # O menu de depuracao embute __DATE__ e __TIME__; SOURCE_DATE_EPOCH fixo deixa a ROM reprodutivel. export SOURCE_DATE_EPOCH=1635724800 rgbasm -o Rebound.obj -p 255 Main.asm -Wno-numeric-string -Wno-obsolete 2>/dev/null rgblink -p 255 -o Rebound.gbc -n Rebound.sym Rebound.obj rgbfix -v -p 255 Rebound.gbc cp Rebound.gbc "$out/" echo "$ROM_SHA256 $out/Rebound.gbc" | shasum -a 256 -c -