# Funcoes comuns dos scripts Builds/build-.sh dos jogos de Mega Drive feitos com o SGDK (use com "." no inicio). # O SGDK (MIT) vem do tarball do commit pinado; o GCC m68k-elf de Builds/sgdk/install-toolchain.sh; as ferramentas # nativas que o SGDK so traz em .exe (sjasm, bintos) sao compiladas aqui do fonte que vem no proprio SGDK; o rescomp # e o sizebnd (Java) rodam no JDK 17 de artifacts/tools/. # # sgdk_prepare # deixa o SGDK em $SGDK, com lib/libmd.a recompilada # sgdk_make # make -f makefile.gen release na pasta (gera out/rom.bin) set -euo pipefail sgdk_here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" sgdk_root="$(git -C "$sgdk_here" rev-parse --show-toplevel 2>/dev/null || (cd "$sgdk_here/../../../.." && pwd))" SGDK_GCC="$sgdk_root/artifacts/tools/m68k-elf-gcc-14.2.0/bin" SGDK_JAVA_HOME="$sgdk_root/artifacts/tools/jdk-jdk-17.0.21+9/Contents/Home" sgdk_prepare() { local commit="$1" sha="$2" short="${1:0:7}" [ -x "$SGDK_GCC/m68k-elf-gcc" ] || "$sgdk_here/install-toolchain.sh" local cache="$sgdk_root/artifacts/build/sgdk/cache" tgz mkdir -p "$cache" tgz="$cache/SGDK-$short.tar.gz" [ -f "$tgz" ] || curl -fsSL "https://codeload.github.com/Stephane-D/SGDK/tar.gz/$commit" -o "$tgz" echo "$sha $tgz" | shasum -a 256 -c - >/dev/null SGDK_TARBALL="$tgz" SGDK="$sgdk_root/artifacts/build/sgdk/sgdk-$short" SGDK_TOOLS="$sgdk_root/artifacts/tools/sgdk-$short-tools" if [ ! -f "$SGDK/.fredgames-ok" ]; then rm -rf "$SGDK"; mkdir -p "$SGDK" tar -xzf "$tgz" -C "$SGDK" --strip-components 1 rm -f "$SGDK/lib/libmd.a" "$SGDK/lib/libmd_debug.a" mkdir -p "$SGDK_TOOLS" cc -O2 -o "$SGDK_TOOLS/bintos" "$SGDK/tools/bintos/src/bintos.c" c++ -O2 -w -DMAX_PATH=MAXPATHLEN -include sys/param.h -o "$SGDK_TOOLS/sjasm" "$SGDK"/tools/sjasm/src/*.cpp ( cd "$SGDK" && sgdk_path make -f makelib.gen release ) >"$SGDK/lib-build.log" 2>&1 \ || { tail -20 "$SGDK/lib-build.log" >&2; echo "libmd falhou" >&2; exit 1; } touch "$SGDK/.fredgames-ok" fi } sgdk_path() { PATH="$SGDK_TOOLS:$SGDK_GCC:$SGDK_JAVA_HOME/bin:$PATH" JAVA_HOME="$SGDK_JAVA_HOME" "$@"; } sgdk_make() { ( cd "$1" && sgdk_path make -f "$SGDK/makefile.gen" GDK="$SGDK" release ) }