45 lines
2 KiB
Bash
Executable file
45 lines
2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# 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/<port>.mk stages them for examples/tilebank on
|
|
# the real ports. The harness prints the surface hash of its to-surface load;
|
|
# scripts/verify-<port>-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[@]}"
|