#!/usr/bin/env bash # Part of JoeyLib, Copyright (c) 2026 Scott Duensing, under the MIT License. # See LICENSE.md for license information. # SPDX-License-Identifier: MIT # # check-tilebank.sh - Host-cc gate for the baked tile-bank loaders # (jlTileBankLoad / jlTileBankLoadToSurface in src/core/assetLoad.c), end to # end: assetbake.py bakes tests/host/tileBank.png, the real loader reads it, # the real generic tile paste draws it, and tests/host/tileBankHost.c checks # every pixel against the PNG. Also checks the refusals (a bank baked for any # other target, bad magic, short header, missing file), a truncated bank, # maxTiles below the bank size, a bank without a palette, and a bank bigger # than a surface. # # Built as a whole BLANK-port program (the check-blank.sh source set plus the # harness). BLANK draws chunky 4bpp like DOS, and assetLoad.c expects the DOS # target byte there, so the DOS bake is the bank that must load. Every other # target assetbake knows is baked too and must be refused. # # tests/host/tileBankStage.py stages the banks and the expected pixels and # palette (decoded from the PNG with PIL, independent of assetbake's # encoders), exactly as make/.mk stages them for examples/tilebank on # the real ports. The harness prints the surface hash of its to-surface load; # scripts/verify--tilebank.sh run this script and require each port's # own bake to hash the same. Exits nonzero on any failed check. set -euo pipefail repo=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) cc=${CC:-cc} work=$(mktemp -d -t joeylib-tilebank.XXXXXX) trap 'rm -rf "$work"' EXIT png="$repo/tests/host/tileBank.png" hostTarget=dos cd "$repo" "$cc" -DJOEYLIB_PLATFORM_BLANK \ -Iinclude -Iinclude/joey -Isrc/core -Isrc/codegen -Wall \ src/core/*.c src/generic/*.c src/blank/blank.c tests/host/tileBankHost.c \ -o "$work/tileBankHost" python3 "$repo/tests/host/tileBankStage.py" "$hostTarget" "$png" "$work/DATA" refuse=() for bank in "$work"/DATA/refuse*.tbk; do refuse+=("$(basename "$bank")") done # Run from the temp dir: the harness reads and writes DATA/ there. cd "$work" "$work/tileBankHost" "${refuse[@]}"