#!/usr/bin/env bash # Compila homebrew de Arduboy a partir do fonte, com versoes fixas: nucleo Arduino AVR 1.8.6 (LGPL-2.1; avr-gcc # 7.3.0) e as bibliotecas listadas abaixo, pelo arduino-cli 1.5.1. Usado quando o .hex do autor nao existe ou nao # e reproduzivel e a licenca (GPL/LGPL) pede o fonte do binario exato; o fonte completo (jogo no commit, # bibliotecas, nucleo e este script) vai junto, em `sources`. # # src/FredGames.Bundler/Builds/build-arduboy-ab.sh # # jogos: bone-shakers star-honor galactea shattered-lands # Saida: artifacts/build/-/.hex set -euo pipefail CLI=1.5.1 CLI_SHA256=cb952e8c1621c95ef5f1d17831c945e3d0ec5973f89c557a7ec8feb9c4f7d4c9 CORE=1.8.6 A2=("Arduboy2" "https://github.com/MLXXXp/Arduboy2/archive/refs/tags/6.0.0.tar.gz" "34c5530b98167106f7fa7f5e7568e39512f689bf819b370abc9f6a212077bf06" "Arduboy2-6.0.0.tar.gz") AT=("ArduboyTones" "https://github.com/MLXXXp/ArduboyTones/archive/refs/tags/1.0.3.tar.gz" "d8d0482040a2aa8be31409309ebb89fdb74538dd74c506db1aa0a215bbca1532" "ArduboyTones-1.0.3.tar.gz") game="${1:?uso: build-arduboy-ab.sh }" case "$game" in bone-shakers) REPO=jhhoward/BoneShakers; COMMIT=ab61ef83a6f17e812d20da1fb563b6426b30b9f0; SHA=3b8d347ad505e1d9c13e2675c270a89b7a854f77c3210e57e06f8bcddd38e5e5 SKETCH_DIR=Source/BoneShakers; SKETCH=BoneShakers; LIBS=(A2) ;; star-honor) REPO=wvillanueva/StarHonor; COMMIT=0d1dfbe6cf6c30c1acda67cf7e405dc0d93845d5; SHA=1497ec92e0ea9525c7400b5d91deaa32207b692caf64a67ea80470e0304621d9 SKETCH_DIR=.; SKETCH=StarHonor; LIBS=() ;; galactea) REPO=LordZero-0o/Galactea; COMMIT=c6f8be91b31481466f0efb07d2348c3e4d4da7b4; SHA=3f63df1ba51af4cbe1c123d41b3e29e4b6a7ef4b88f30a3299a5e7fa1ed0e17f SKETCH_DIR=.; SKETCH=galactea; LIBS=(A2 AT) ;; shattered-lands) REPO=tuxinator2009/ShatteredLands; COMMIT=2b67b479b4090e893d6864d7d4c604692fec0033; SHA=07281628edcb014f0fe2342c9968bb80e7fcffb84a879abac24e6c49c9387202 SKETCH_DIR=SL_TowersOfPerdition; SKETCH=SL_TowersOfPerdition; LIBS=(A2) ;; *) echo "jogo desconhecido: $game" >&2; exit 2 ;; esac here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" root="$(git -C "$here" rev-parse --show-toplevel 2>/dev/null || pwd)" short="${COMMIT:0:7}" out="$root/artifacts/build/$game-$short" cache="$root/artifacts/build/cache" tools="$root/artifacts/tools/arduino-$CLI" tarball="${REPO#*/}-$short.tar.gz" fetch() { # url sha256 arquivo [ -f "$cache/$3" ] || curl -fsSL "$1" -o "$cache/$3" echo "$2 $cache/$3" | shasum -a 256 -c - >/dev/null } mkdir -p "$cache" "$tools" fetch "https://github.com/arduino/arduino-cli/releases/download/v$CLI/arduino-cli_${CLI}_macOS_ARM64.tar.gz" "$CLI_SHA256" "arduino-cli_${CLI}_macOS_ARM64.tar.gz" fetch "https://github.com/$REPO/archive/$COMMIT.tar.gz" "$SHA" "$tarball" tar -xzf "$cache/arduino-cli_${CLI}_macOS_ARM64.tar.gz" -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 rm -rf "$out" mkdir -p "$out/repo" "$out/src/$SKETCH" "$out/lib" "$out/hex" tar -xzf "$cache/$tarball" -C "$out/repo" --strip-components 1 cp -R "$out/repo/$SKETCH_DIR/." "$out/src/$SKETCH/" for patch in "$here/$game"/*.patch; do [ -f "$patch" ] && patch -s -p1 -d "$out/src/$SKETCH" < "$patch" done libs=() for v in ${LIBS[@]+"${LIBS[@]}"}; do eval "lib=(\"\${$v[@]}\")" fetch "${lib[1]}" "${lib[2]}" "${lib[3]}" mkdir -p "$out/lib/${lib[0]}" tar -xzf "$cache/${lib[3]}" -C "$out/lib/${lib[0]}" --strip-components 1 libs+=(--library "$out/lib/${lib[0]}") done "$tools/arduino-cli" compile -b arduino:avr:leonardo ${libs[@]+"${libs[@]}"} \ --output-dir "$out/hex" "$out/src/$SKETCH" >/dev/null cp "$out/hex/$SKETCH.ino.hex" "$out/$game.hex" shasum -a 256 "$out/$game.hex"