Files
trail-mate/scripts/platformio-post.py

85 lines
2.7 KiB
Python

Import("env")
import re
print("[pio] post: build finished")
# Example hook: emit final build environment details
print("[pio] post: build type:", env.get("BUILD_TYPE", "unknown"))
def verify_release_esp32_tinyusb_dfu_disabled(target, source, env):
dfu_trimmed_envs = {
"tlora_pager_sx1262",
"tlora_pager_lr1121",
"tdeck",
"tdeck_pro_a7682e",
"tdeck_pro_pcm512a",
}
if env.get("PIOENV") not in dfu_trimmed_envs:
return
map_path = env.subst("$BUILD_DIR/${PROGNAME}.map")
with open(map_path, "r", encoding="utf-8", errors="replace") as map_file:
map_contents = map_file.read()
forbidden_members = (
"dfu_device.c.obj",
"dfu_rt_device.c.obj",
"USBCDC.cpp.o",
".bss._dfu_ctx",
)
if any(member in map_contents for member in forbidden_members):
raise RuntimeError(
"Release image contains an application USB maintenance component; "
"CDC, full DFU, and DFU Runtime must all be absent"
)
print("[pio] post: verified application USB CDC and DFU fully removed from release")
def verify_debug_esp32_tinyusb_dfu_enabled(target, source, env):
dfu_debug_envs = {
"tlora_pager_sx1262_debug",
"tlora_pager_lr1121_debug",
"tdeck_debug",
"tdeck_pro_a7682e_debug",
}
if env.get("PIOENV") not in dfu_debug_envs:
return
map_path = env.subst("$BUILD_DIR/${PROGNAME}.map")
with open(map_path, "r", encoding="utf-8", errors="replace") as map_file:
map_contents = map_file.read()
required_markers = (
"dfu_device.c.obj",
"dfu_rt_device.c.obj",
".bss._dfu_ctx",
"trail_mate_debug_tinyusb_dfu_link_anchor",
"tinyusb_dfu_debug.cpp.o",
"load_dfu_ota_descriptor",
"USBCDC.cpp.o",
)
missing_markers = [marker for marker in required_markers if marker not in map_contents]
if missing_markers:
raise RuntimeError(
"Arduino TinyUSB CDC + full DFU is incomplete in debug build; "
f"missing: {', '.join(missing_markers)}"
)
descriptor_provider = re.compile(
r"load_dfu_ota_descriptor\(unsigned char\*, unsigned char\*\)\s+"
r".*tinyusb_dfu_debug\.cpp\.o"
)
if not descriptor_provider.search(map_contents):
raise RuntimeError(
"Debug build linked Arduino's empty DFU descriptor instead of the "
"Trail Mate OTA DFU implementation"
)
print("[pio] post: verified Arduino TinyUSB CDC + full DFU in debug build")
env.AddPostAction("$BUILD_DIR/${PROGNAME}.elf", verify_release_esp32_tinyusb_dfu_disabled)
env.AddPostAction("$BUILD_DIR/${PROGNAME}.elf", verify_debug_esp32_tinyusb_dfu_enabled)