Files
2026-07-01 19:01:27 -05:00

42 lines
2.1 KiB
Python

#!/usr/bin/env python3
# trunk-ignore-all(ruff/F821)
# trunk-ignore-all(flake8/F821): For SConstruct imports
#
# Firmware-specific Emscripten *link* settings for [env:native-wasm].
#
# PlatformIO routes `build_flags` to the compile step, not the link step, so the
# WASM node's link-time emscripten settings have to be appended to LINKFLAGS
# here. The generic, app-agnostic flags (Asyncify, MODULARIZE, ALLOW_MEMORY_
# GROWTH, the ES6 module shape) live in the platform-wasm builder; what belongs
# to *this firmware* is:
#
# * EXPORT_NAME - the ES-module factory name consumers import.
# * EXPORTED_RUNTIME_METHODS - ccall/cwrap/callMain + FS/IDBFS/NODEFS/PATH and
# the string helpers the JS host + bridge drive.
# * EXPORTED_FUNCTIONS - the C entry points (the wasm_* API is also kept via
# EMSCRIPTEN_KEEPALIVE in source; _malloc/_free are
# needed so the host can marshal protobuf buffers).
# * ASYNCIFY_IMPORTS - the WebUSB seam: these imported C functions suspend
# the stack (Asyncify) while a WebUSB transfer awaits.
#
# Only attached to the wasm env (see extra_scripts in [env:native-wasm]); a guard keeps
# it inert if it is ever pulled into another env.
#
Import("env")
if env["PIOENV"] == "native-wasm":
env.Append(
LINKFLAGS=[
"-sEXPORT_NAME=createMeshNode",
"-sEXPORTED_RUNTIME_METHODS=ccall,cwrap,callMain,FS,IDBFS,NODEFS,PATH,HEAPU8,UTF8ToString,stringToUTF8",
"-sEXPORTED_FUNCTIONS=_main,_wasm_setup,_wasm_loop_once,_wasm_fs_sync,"
"_wasm_set_region,_wasm_api_to_radio,_wasm_api_from_radio,"
"_wasm_api_available,_wasm_api_is_connected,_wasm_set_lora_module,"
"_wasm_set_lora_usb_ids,_wasm_set_lora_usb_serial,"
"_wasm_set_lora_dio_config,_wasm_set_lora_spi_speed,_wasm_set_lora_pin,"
"_malloc,_free",
"-sASYNCIFY_IMPORTS=webusb_open,webusb_transceive,webusb_digital_write,"
"webusb_digital_read,webusb_close",
]
)