kinda/scripts/flash-font.sh
2026-07-08 16:47:24 -07:00

132 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
MODE="flash"
FONT=""
usage() {
cat <<'EOF'
Usage:
scripts/flash-font.sh [--build-only|--generate-only] <font>
scripts/flash-font.sh --list
Fonts:
verdana /System/Library/Fonts/Supplemental/Verdana.ttf
tahoma /System/Library/Fonts/Supplemental/Tahoma.ttf
georgia /System/Library/Fonts/Supplemental/Georgia.ttf
arial /System/Library/Fonts/Supplemental/Arial.ttf
<font> may also be an explicit .ttf/.otf path.
Modes:
default Generate font tables, then cargo run/flash using .cargo runner.
--build-only Generate font tables, then build embedded target without flashing.
--generate-only Generate font tables only.
EOF
}
list_fonts() {
cat <<'EOF'
verdana=/System/Library/Fonts/Supplemental/Verdana.ttf
tahoma=/System/Library/Fonts/Supplemental/Tahoma.ttf
georgia=/System/Library/Fonts/Supplemental/Georgia.ttf
arial=/System/Library/Fonts/Supplemental/Arial.ttf
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
--build-only)
MODE="build"
shift
;;
--generate-only)
MODE="generate"
shift
;;
--list)
list_fonts
exit 0
;;
-h|--help)
usage
exit 0
;;
*)
if [[ -n "$FONT" ]]; then
echo "error: multiple fonts specified: '$FONT' and '$1'" >&2
usage >&2
exit 2
fi
FONT="$1"
shift
;;
esac
done
if [[ -z "$FONT" ]]; then
usage >&2
exit 2
fi
font_path_for() {
case "$1" in
verdana) echo "/System/Library/Fonts/Supplemental/Verdana.ttf" ;;
tahoma) echo "/System/Library/Fonts/Supplemental/Tahoma.ttf" ;;
georgia) echo "/System/Library/Fonts/Supplemental/Georgia.ttf" ;;
arial) echo "/System/Library/Fonts/Supplemental/Arial.ttf" ;;
*) echo "$1" ;;
esac
}
FONT_PATH="$(font_path_for "$FONT")"
if [[ ! -f "$FONT_PATH" ]]; then
echo "error: font not found: $FONT_PATH" >&2
exit 1
fi
if ! command -v cc >/dev/null 2>&1; then
echo "error: cc not found" >&2
exit 1
fi
if ! command -v freetype-config >/dev/null 2>&1; then
echo "error: freetype-config not found" >&2
exit 1
fi
GENERATOR="/tmp/kinda-fontgen-ftmono"
GENERATOR_SOURCE="scripts/generate-fonts-ftmono.c"
if [[ ! -x "$GENERATOR" || "$GENERATOR_SOURCE" -nt "$GENERATOR" ]]; then
echo "Building FreeType mono font generator"
cc "$GENERATOR_SOURCE" $(freetype-config --cflags --libs) -o "$GENERATOR"
fi
echo "Generating font tables from: $FONT_PATH"
"$GENERATOR" "$FONT_PATH" src/ui/generated_fonts.rs
if command -v rg >/dev/null 2>&1; then
rg "Source font|Rasterizer|px; cell height" src/ui/generated_fonts.rs || true
else
grep -E "Source font|Rasterizer|px; cell height" src/ui/generated_fonts.rs || true
fi
case "$MODE" in
generate)
echo "Generated src/ui/generated_fonts.rs"
;;
build)
cargo build --bin kinda --target riscv32imac-unknown-none-elf
;;
flash)
cargo run --bin kinda --target riscv32imac-unknown-none-elf
;;
*)
echo "error: unknown mode: $MODE" >&2
exit 2
;;
esac