Files

66 lines
1.9 KiB
Python

#!/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 <stddef.h>
#include <stdint.h>
"""
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()