#!/usr/bin/env bash # Compila Save Maurice! (homebrew de Game Boy de Les-Wet para a GB Compo 2025, GPL-3.0 com partes zlib do # gb-starter-kit) do commit 3d9564a com o RGBDS 0.9.0, a versao que o README cita. A ROM sai identica ao # SAVEMAURICE_jam.gb que o autor publica no itch.io (gravado em 2025-08-26T03:58:01Z, quatro minutos antes # desse commit): o SOURCE_DATE_EPOCH fixa a data que o build_date.asm grava na ROM ("Built ..."). # # O repositorio usa tres submodulos (hardware.inc, rgbds-structs, debugfile.inc), que o tarball do commit # no GitHub nao traz: o script baixa cada um no commit que o repositorio aponta. O Makefile do autor # precisa do GNU make 4 (o do macOS e o 3.81) e do rgbgfx, que depende da libpng: o script compila o GNU # make 4.4.1, o GNU Bison 3.8.2, a libpng 1.6.50 (estatica) e o RGBDS (rgbasm, rgblink, rgbfix e rgbgfx) # em artifacts/tools/. Os scripts de src/tools/ rodam com o python3 do sistema (so biblioteca padrao). # # src/FredGames.Bundler/Builds/build-save-maurice.sh # # Saida: artifacts/build/save-maurice/save_maurice.gb e, ao lado, os quatro tarballs do fonte (o do # commit e os dos submodulos). set -euo pipefail MAKE=4.4.1 MAKE_SHA256=dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3 BISON=3.8.2 BISON_SHA256=9bba0214ccf7f1079c5d59210045227bcf619519840ebfa80cd3849cff5a5bf2 LIBPNG=1.6.50 LIBPNG_SHA256=4df396518620a7aa3651443e87d1b2862e4e88cad135a8b93423e01706232307 RGBDS=0.9.0 RGBDS_SHA256=2be649a6b3c3b4a462e222b3082fa2e1c83142f317ba862b17899f5a25717380 COMMIT=3d9564a67644914e935e9a160c3300e0501ab8b4 GAME_SHA256=e4d8a33919276ed477ecb7a0a647e3c409dcba9bf8e181ba558be9e1bc3d5004 HARDWARE_INC=f2d8ebbc8b366ad43e44888a5afc4f94b7904e47 HARDWARE_INC_SHA256=d2e7701e296e38a08d241d89e1b00f3505e0d79b4b4943d18dd5494c923fc32f RGBDS_STRUCTS=06033b24e40753cff9b0331d3075f71b49755e49 RGBDS_STRUCTS_SHA256=ce2091e8ab244280a48e28a5dfa2b9bb19ee543f1971eb1381ce67c54e7876e9 DEBUGFILE_INC=4502efb02314a76eb1e000631a0406b77b17d050 DEBUGFILE_INC_SHA256=c1b7083176b4eee25550e3f7165d94ac7a1f59abab31f3a3ebb2cb56d3a19f43 # 2025-08-26T03:58:01Z, a data gravada no SAVEMAURICE_jam.gb. EPOCH=1756180681 ROM_SHA256=7941bc6daaf3c8395cde814b10ea54a74c46aede1a55528d7be011b2fa48ef55 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/save-maurice" cache="$root/artifacts/build/cache" gmake="$root/artifacts/tools/make-$MAKE" bison="$root/artifacts/tools/bison-$BISON" libpng="$root/artifacts/tools/libpng-$LIBPNG" 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/make/make-$MAKE.tar.gz" "$cache/make-$MAKE.tar.gz" "$MAKE_SHA256" fetch "https://ftp.gnu.org/gnu/bison/bison-$BISON.tar.xz" "$cache/bison-$BISON.tar.xz" "$BISON_SHA256" fetch "https://download.sourceforge.net/libpng/libpng-$LIBPNG.tar.xz" "$cache/libpng-$LIBPNG.tar.xz" "$LIBPNG_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/Les-Wet/dig-game/archive/$COMMIT.tar.gz" "$cache/dig-game-$COMMIT.tar.gz" "$GAME_SHA256" fetch "https://github.com/gbdev/hardware.inc/archive/$HARDWARE_INC.tar.gz" "$cache/hardware.inc-$HARDWARE_INC.tar.gz" "$HARDWARE_INC_SHA256" fetch "https://github.com/ISSOtm/rgbds-structs/archive/$RGBDS_STRUCTS.tar.gz" "$cache/rgbds-structs-$RGBDS_STRUCTS.tar.gz" "$RGBDS_STRUCTS_SHA256" fetch "https://github.com/ISSOtm/debugfile.inc/archive/$DEBUGFILE_INC.tar.gz" "$cache/debugfile.inc-$DEBUGFILE_INC.tar.gz" "$DEBUGFILE_INC_SHA256" if [ ! -x "$gmake/bin/make" ]; then rm -rf "$gmake" "$gmake.src" && mkdir -p "$gmake.src" tar -xzf "$cache/make-$MAKE.tar.gz" -C "$gmake.src" --strip-components 1 (cd "$gmake.src" && ./configure --prefix="$gmake" --disable-nls >/dev/null && make -j8 >/dev/null && make install >/dev/null 2>&1) rm -rf "$gmake.src" fi 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 2>&1) rm -rf "$bison.src" fi if [ ! -f "$libpng/lib/libpng16.a" ]; then rm -rf "$libpng" "$libpng.src" && mkdir -p "$libpng.src" tar -xJf "$cache/libpng-$LIBPNG.tar.xz" -C "$libpng.src" --strip-components 1 (cd "$libpng.src" && ./configure --prefix="$libpng" --disable-shared --enable-static >/dev/null \ && make -j8 >/dev/null && make install >/dev/null 2>&1) rm -rf "$libpng.src" fi if [ ! -x "$rgbds/rgbasm" ] || [ ! -x "$rgbds/rgblink" ] || [ ! -x "$rgbds/rgbfix" ] || [ ! -x "$rgbds/rgbgfx" ]; 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 \ PNGCFLAGS="-I$libpng/include" PNGLDFLAGS="-L$libpng/lib" PNGLDLIBS="$libpng/lib/libpng16.a -lz" \ rgbasm rgblink rgbfix rgbgfx >/dev/null cp "$rgbds.src/rgbasm" "$rgbds.src/rgblink" "$rgbds.src/rgbfix" "$rgbds.src/rgbgfx" "$rgbds/" rm -rf "$rgbds.src" fi rm -rf "$out" && mkdir -p "$out/tree" tree="$out/tree" tar -xzf "$cache/dig-game-$COMMIT.tar.gz" -C "$tree" --strip-components 1 for sub in "hardware.inc:$HARDWARE_INC" "rgbds-structs:$RGBDS_STRUCTS" "debugfile.inc:$DEBUGFILE_INC"; do name="${sub%%:*}"; rev="${sub#*:}" mkdir -p "$tree/include/$name" tar -xzf "$cache/$name-$rev.tar.gz" -C "$tree/include/$name" --strip-components 1 done # Fonte publicado (GPL): o tarball do commit e os tres dos submodulos, como baixados. cp "$cache/dig-game-$COMMIT.tar.gz" "$cache/hardware.inc-$HARDWARE_INC.tar.gz" \ "$cache/rgbds-structs-$RGBDS_STRUCTS.tar.gz" "$cache/debugfile.inc-$DEBUGFILE_INC.tar.gz" "$out/" # -j1 e LC_ALL=C fixam a ordem dos objetos no link. (cd "$tree" && SOURCE_DATE_EPOCH=$EPOCH LC_ALL=C "$gmake/bin/make" -j1 RGBDS="$rgbds/" bin/save_maurice.gb >/dev/null) cp "$tree/bin/save_maurice.gb" "$out/" echo "$ROM_SHA256 $out/save_maurice.gb" | shasum -a 256 -c -