#!/usr/bin/env bash # Compila Gigant Golf (homebrew de Game Boy de quinnyo, GB Compo 2023; codigo GPL-3.0, arte e demais # arquivos CC BY-SA) do commit aede1aa com o RGBDS 0.9.0. O autor so publica a ROM no itch.io; o script # refaz o make dele. Os mapas (Tiled) sao convertidos por tools/map.py, que precisa do pytiled-parser: # o script cria um venv em artifacts/tools/venv-tiled com as versoes do requirements.txt do autor. # __ISO_8601_UTC__ (data da build embutida na ROM) vem de SOURCE_DATE_EPOCH, fixo para a build ser # reprodutivel. O Makefile precisa do GNU make 4 (o do macOS e o 3.81) e o rgbgfx 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 em artifacts/tools/. # # src/FredGames.Bundler/Builds/build-gigant-golf.sh # # Saida: artifacts/build/gigant-golf/gigantgolf.gb 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=aede1aa62149498efb9b6a332fa4999d783aa062 GAME_SHA256=5028142e94d0b9da425046a94dc13b3e0afaaa4de59d535c8c53f94d818c4d40 PYTILED=2.2.3 ATTRS=23.1.0 TYPING_EXT=4.8.0 EPOCH=1698796800 ROM_SHA256=6049850f299f1601a6208b8abdd486198d23488595fde177a39e048504b14960 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/gigant-golf" 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" pyenv="$root/artifacts/tools/venv-tiled" 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/quinnyo/gbcompo2023/archive/$COMMIT.tar.gz" "$cache/gbcompo2023-$COMMIT.tar.gz" "$GAME_SHA256" fetch "https://github.com/gbdev/rgbds/archive/refs/tags/v$RGBDS.tar.gz" "$cache/rgbds-$RGBDS.tar.gz" "$RGBDS_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 if [ ! -x "$pyenv/bin/python3" ]; then rm -rf "$pyenv" && python3 -m venv "$pyenv" "$pyenv/bin/pip" install -q "attrs==$ATTRS" "pytiled-parser==$PYTILED" "typing_extensions==$TYPING_EXT" fi rm -rf "$out" && mkdir -p "$out/tree" tar -xzf "$cache/gbcompo2023-$COMMIT.tar.gz" -C "$out/tree" --strip-components 1 cd "$out/tree" export SOURCE_DATE_EPOCH=$EPOCH PATH="$gmake/bin:$rgbds:$PATH" make PYTHON="$pyenv/bin/python3" >/dev/null cp target/bin/gigantgolf.gb "$out/" echo "$ROM_SHA256 $out/gigantgolf.gb" | shasum -a 256 -c -