66 lines
1.9 KiB
Python
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()
|