#!/usr/bin/env bash # Compila UzeSnakes 1.03 (cobrinha para Uzebox de Flavio Zavan, GPL-3.0-or-later; graficos dele e as duas # musicas de Ideraldo Luiz da Silva sob CC BY-SA 3.0, ver media-licenses.txt) no commit 4abd543 com o # kernel do Uzebox (GPL-3.0-or-later, compilado dentro da ROM) no commit 384ceb3, pelo avr-gcc 7.3.0 do # nucleo Arduino AVR 1.8.6 (o mesmo do MicroCity). O Makefile do jogo ja desliga o logo de abertura do # Uzebox (INTRO_LOGO=0; o nome e marca registrada) e o script confere isso. Tileset e musicas ja vem # convertidos (data/*.inc); o .uze sai do packrom do repositorio do Uzebox. Fonte a hospedar: o tarball # do jogo, o do Uzebox e este script. # # src/FredGames.Bundler/Builds/build-uzesnakes.sh # # Saida: artifacts/build/uzesnakes/uzesnakes.uze set -euo pipefail GAME=4abd54343efa07dfd1a1ea8a09f959125fc2641c GAME_SHA256=db6e8a2b3203ec97cd027bd2b6100c9a1e43ddfc85bccfed1a99e35842aaf677 UZEBOX=384ceb3d0a3e66b2a6a3e0bd7ed5ca3f8a73e7f9 UZEBOX_SHA256=789bec225fdbf3438aeb3117f75ed678f3fcc886f7a908b2fc1f92d905b42bd9 CLI=1.5.1 CLI_SHA256=cb952e8c1621c95ef5f1d17831c945e3d0ec5973f89c557a7ec8feb9c4f7d4c9 CORE=1.8.6 AVR_GCC=7.3.0-atmel3.6.1-arduino7 here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" out="$root/artifacts/build/uzesnakes" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools/arduino-$CLI" # avr-gcc 7.3.0: o do nucleo Arduino AVR, instalado pelo arduino-cli (como no build-microcity.sh). avr="$tools/data/packages/arduino/tools/avr-gcc/$AVR_GCC/bin" if [ ! -x "$avr/avr-gcc" ]; then mkdir -p "$cache" "$tools" cli="$cache/arduino-cli_${CLI}_macOS_ARM64.tar.gz" [ -f "$cli" ] || curl -fsSL "https://github.com/arduino/arduino-cli/releases/download/v$CLI/arduino-cli_${CLI}_macOS_ARM64.tar.gz" -o "$cli" echo "$CLI_SHA256 $cli" | shasum -a 256 -c - tar -xzf "$cli" -C "$tools" arduino-cli export ARDUINO_DIRECTORIES_DATA="$tools/data" ARDUINO_DIRECTORIES_DOWNLOADS="$tools/staging" ARDUINO_DIRECTORIES_USER="$tools/user" "$tools/arduino-cli" core update-index >/dev/null "$tools/arduino-cli" core install "arduino:avr@$CORE" >/dev/null fi "$avr/avr-gcc" --version | head -1 | grep -q " 7.3.0$" mkdir -p "$cache" game="$cache/UzeSnakes-$GAME.tar.gz" uzebox="$cache/uzebox-$UZEBOX.tar.gz" [ -f "$game" ] || curl -fsSL "https://github.com/flaviozavan/UzeSnakes/archive/$GAME.tar.gz" -o "$game" [ -f "$uzebox" ] || curl -fsSL "https://github.com/Uzebox/uzebox/archive/$UZEBOX.tar.gz" -o "$uzebox" echo "$GAME_SHA256 $game" | shasum -a 256 -c - echo "$UZEBOX_SHA256 $uzebox" | shasum -a 256 -c - rm -rf "$out" mkdir -p "$out/UzeSnakes" "$out/uzebox" "$out/bin" tar -xzf "$game" -C "$out/UzeSnakes" --strip-components 1 tar -xzf "$uzebox" -C "$out/uzebox" --strip-components 1 "uzebox-$UZEBOX/kernel" "uzebox-$UZEBOX/tools/packrom" grep -q -- "-DINTRO_LOGO=0" "$out/UzeSnakes/default/Makefile" # packrom (ferramenta do Uzebox que monta o .uze: cabecalho de 512 bytes + a flash). c++ -O2 -DMACOSX -o "$out/bin/packrom" "$out/uzebox/tools/packrom/packrom.cpp" 2>/dev/null # ROM: o Makefile do autor, com o kernel e o packrom daqui (o Makefile chama "packrom" pelo PATH). PATH="$out/bin:$avr:$PATH" make -s -C "$out/UzeSnakes/default" CC=avr-gcc KERNEL_DIR="$out/uzebox/kernel" >/dev/null cp "$out/UzeSnakes/default/UzeSnakes.uze" "$out/uzesnakes.uze" shasum -a 256 "$out/uzesnakes.uze"