#!/usr/bin/env bash # Compila o MegaPong de And-0 (Andrej, ohsat.com; GPL-3.0) para o Mega Drive, do repositorio do autor # (github.com/And-0/MegaPong, commit 1064468), com o SGDK 2.11 (commit 4aae6cc, MIT) e o GCC m68k-elf de # Builds/sgdk/install-toolchain.sh (Builds/sgdk/env.sh). O jogo foi escrito para um SGDK 1.6x; para compilar no 2.11 a # pasta src/boot do autor (cabecalho e boot do SGDK antigo) e retirada e o SGDK usa os seus; outras mudancas, se houver, # em megapong/megapong-sgdk211.patch. Dois builds seguidos; as ROMs precisam ser iguais. # src/FredGames.Bundler/Builds/build-megapong.sh # Saida: artifacts/build/megapong/megapong-1064468.bin e megapong-1064468-src.tar.gz (fonte do jogo + patch) set -euo pipefail here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" . "$here/sgdk/env.sh" sgdk_prepare 4aae6ccdd562c15399c57edfebf80be93ce808cb f7b0455b193930e7e44d9de79475dd5d81285880ad31395db5bcbeedce42d54d out="$sgdk_root/artifacts/build/megapong" tgz="$out/cache/MegaPong-1064468.tar.gz" mkdir -p "$out/cache" [ -f "$tgz" ] || curl -fsSL https://codeload.github.com/And-0/MegaPong/tar.gz/1064468a42553fb851abe536c314457269a762fa -o "$tgz" echo "0e5ab9b23c4d1a970ffc80dd837926bda86d6ce6e1dcd48116cdc51e9bef5ef5 $tgz" | shasum -a 256 -c - >/dev/null prepare() { rm -rf "$1"; mkdir -p "$1/megapong" tar -xzf "$tgz" -C "$1/megapong" --strip-components 1 # src/boot/ (rom_head.c e sega.s do SGDK 1.6x) nao serve no SGDK 2.11, que gera os seus: sai rm -rf "$1/megapong/screenshot.png" "$1/megapong/src/boot" if [ -f "$here/megapong/megapong-sgdk211.patch" ]; then ( cd "$1/megapong" && patch -p1 -s < "$here/megapong/megapong-sgdk211.patch" ) cp "$here/megapong/megapong-sgdk211.patch" "$1/megapong/" fi } for i in 1 2; do prepare "$out/tree$i" sgdk_make "$out/tree$i/megapong" >"$out/build$i.log" 2>&1 || { tail -30 "$out/build$i.log" >&2; exit 1; } done a="$(shasum -a 256 "$out/tree1/megapong/out/rom.bin" | cut -d' ' -f1)" b="$(shasum -a 256 "$out/tree2/megapong/out/rom.bin" | cut -d' ' -f1)" [ "$a" = "$b" ] || { echo "Dois builds deram ROMs diferentes ($a x $b)" >&2; exit 1; } cp "$out/tree1/megapong/out/rom.bin" "$out/megapong-1064468.bin" prepare "$out/srctree" files=(); while IFS= read -r -d '' f; do files+=("$f"); done < <(cd "$out/srctree" && find megapong -type f -print0) python3 -I "$here/sprig-web/pack-source.py" "$out/megapong-1064468-src.tar.gz" "$out/srctree" "${files[@]}" rm -rf "$out/tree1" "$out/tree2" "$out/srctree" echo "$a $out/megapong-1064468.bin (dois builds iguais)"