#!/usr/bin/env bash # Compila (homebrew de Game Boy de gearfo para a GB Compo 2021, GPL-3.0-or-later) a partir do # zip de codigo-fonte que o autor publica no itch.io (corrib75_src.zip), com o GBDK-2020 4.0.4, da # epoca do jogo. A ROM do itch.io difere desta em uma unica instrucao (dois operandos trocados numa # comparacao, mais o checksum do cabecalho): o zip nao e exatamente o fonte daquela ROM, entao servimos # a nossa build, com o fonte exato ao lado do bundle. # # O GBDK 4.0.4 para macOS so existe para x86_64 (roda no Rosetta 2), e o lcc dele aborta no macOS # atual; o script compila o lcc do fonte da mesma tag para a maquina local e usa o resto do pacote # (sdcc, sdas, sdld, bibliotecas) como veio. O caminho do GBDK precisa ser curto: o lcc antigo usa # buffers de tamanho fixo. O Makefile do jogo liga assets/*.o em ordem alfabetica; LC_ALL=C reproduz a # ordem do autor (pretext.o antes de pretext_map.o). # # src/FredGames.Bundler/Builds/build-corrib75.sh # # Saida: artifacts/build/corrib75/corrib75.gb e corrib75_src.zip (o fonte, para o bundle) set -euo pipefail GBDK=4.0.4 GBDK_SHA256=875f7ecb94ac199d71b110ec50cc640e92bf54196d097c9809a46ff4458a77ee GBDK_SRC_SHA256=5d5220f386a5fa3b2ed06de95756a269afad520b6b5eb7c2127ef5f9061f9747 GAME_PAGE=https://gearfo.itch.io/corrib75 GAME_SRC_SHA256=bb8d132ef0e656990d255124c734d078aa23405eab9f4b8ba8f67da051e1dee0 ROM_SHA256=003e65f83d86e590b60398547286a72887767d72e2912e8e308159f897432a89 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/corrib75" cache="$root/artifacts/build/cache" gbdk="$root/artifacts/tools/gbdk-$GBDK" mkdir -p "$cache" fetch() { [ -f "$2" ] || curl -fsSL --retry 4 "$1" -o "$2"; echo "$3 $2" | shasum -a 256 -c -; } fetch "https://github.com/gbdk-2020/gbdk-2020/releases/download/$GBDK/gbdk-macos.zip" "$cache/gbdk-$GBDK-macos.zip" "$GBDK_SHA256" fetch "https://github.com/gbdk-2020/gbdk-2020/archive/refs/tags/$GBDK.tar.gz" "$cache/gbdk-$GBDK-src.tar.gz" "$GBDK_SRC_SHA256" if [ ! -x "$gbdk/bin/lcc" ] || [ ! -f "$gbdk/bin/.lcc-native" ]; then rm -rf "$gbdk" "$gbdk.tmp" && mkdir -p "$gbdk.tmp" unzip -q "$cache/gbdk-$GBDK-macos.zip" -d "$gbdk.tmp" mv "$gbdk.tmp/gbdk" "$gbdk" && rm -rf "$gbdk.tmp" xattr -dr com.apple.quarantine "$gbdk" 2>/dev/null || true mkdir -p "$gbdk/lcc.src" tar -xzf "$cache/gbdk-$GBDK-src.tar.gz" -C "$gbdk/lcc.src" --strip-components 3 "gbdk-2020-$GBDK/gbdk-support/lcc" # Sem FORTIFY: o lcc de 2021 copia strings sobrepostas e o macOS o derruba com isso ligado. make -C "$gbdk/lcc.src" CC=cc \ CFLAGS='-O0 -w -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -fno-stack-protector -DGBDKLIBDIR=\"/opt/gbdk\" -DBUILDDATE=\"-\" -DBUILDTIME=\"-\"' >/dev/null cp "$gbdk/lcc.src/lcc" "$gbdk/bin/lcc" rm -rf "$gbdk/lcc.src" touch "$gbdk/bin/.lcc-native" fi rm -rf "$out" && mkdir -p "$out/tree" "$here/itch-fetch.sh" "$GAME_PAGE" "C source code - corrib75_src.zip" "$out/corrib75_src.zip" "$GAME_SRC_SHA256" unzip -q "$out/corrib75_src.zip" -d "$out/tree" # O Makefile chama o romusage (so mostra o uso da ROM) depois do link; aqui ele nao faz nada. LC_ALL=C make -C "$out/tree/corrib75" CC="$gbdk/bin/lcc" ROMUSAGE=true corrib75.gb >/dev/null cp "$out/tree/corrib75/corrib75.gb" "$out/" echo "$ROM_SHA256 $out/corrib75.gb" | shasum -a 256 -c -