#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-3.0-only """Generate deterministic C arrays for PlatformIO-compatible asset embedding.""" from pathlib import Path ASSETS = ( ("xterm.js.gz", "web_asset_xterm_js_gz"), ("xterm.css.gz", "web_asset_xterm_css_gz"), ("addon-fit.js.gz", "web_asset_addon_fit_js_gz"), ("logo.png", "web_asset_logo_png"), ) ROOT = Path(__file__).resolve().parent.parent ASSET_DIR = ROOT / "web_assets" HEADER_PATH = ROOT / "src" / "web_assets_data.h" SOURCE_PATH = ROOT / "src" / "web_assets_data.c" def format_array(data: bytes) -> str: lines = [] for offset in range(0, len(data), 12): chunk = data[offset : offset + 12] lines.append(" " + ", ".join(f"0x{value:02x}" for value in chunk) + ",") return "\n".join(lines) def main() -> None: header = """/* SPDX-License-Identifier: GPL-3.0-only */ /* Generated web-asset data declarations. */ #pragma once #include #include """ source = """/* SPDX-License-Identifier: MIT */ /* * Deterministically generated from the vendored MIT-licensed gzip files in * web_assets/. See web_assets/SOURCES.md and the accompanying license files. * Regenerate with: python3 web_assets/generate_embedded_assets.py */ #include "web_assets_data.h" """ for filename, symbol in ASSETS: data = (ASSET_DIR / filename).read_bytes() header += f"extern const uint8_t {symbol}[];\n" header += f"extern const size_t {symbol}_size;\n\n" source += ( f"const uint8_t {symbol}[] __attribute__((aligned(4))) = {{\n" f"{format_array(data)}\n" "};\n" f"const size_t {symbol}_size = sizeof({symbol});\n\n" ) HEADER_PATH.write_text(header, encoding="utf-8", newline="\n") SOURCE_PATH.write_text(source, encoding="utf-8", newline="\n") if __name__ == "__main__": main()