Thanks for rules_wasm_component — the hermetic wasm toolchain bundles are great to build on. While wiring jess (a hardware-integration project that builds falcon firmware: wasm component → meld fuse → synth → Cortex-M ELF → Renode), I hit two gaps that block expressing the firmware build hermetically. Filing together since they're the same "downstream firmware build" story.
1. synth_compile isn't usable
relay/BUILD.bazel loads synth_compile from @rules_wasm_component//wasm:defs.bzl but the call is disabled with:
"Temporarily disabled: synth_compile rule now requires a synth attribute that this file doesn't provide."
So there's no working path to compile a fused core module to a Cortex-M ELF via the rules.
2. meld/synth aren't bundled as hermetic toolchains
meld_fuse lives in @meld//rules:meld.bzl, and synth is @synth//crates:synth. To use them a consumer must bazel_dep on meld and synth — which drags their rules_verus / rules_rocq_rust / rules_lean (Nix) proof toolchains into a firmware-only build. A firmware consumer shouldn't need the proof toolchains.
Impact
jess can hermetically wasm_validate + wasm_optimize the falcon component today, but cannot express meld_fuse → synth_compile → renode_test without either (a) an unimplemented rule or (b) pulling in the full verification stack. For now we fall back to the prebuilt CLIs in a shell script.
Suggested direction
- Finish/export
synth_compile with a synth toolchain attribute (analogous to how the wasm bundle registers wasm-tools), so synth_compile(wasm_module=…, target="cortex-m4f") works standalone.
- Provide meld/synth as hermetic toolchains from rules_wasm_component (or thin
rules_meld/rules_synth) that fetch prebuilt binaries, so a firmware build doesn't depend on the proof toolchains.
Happy to test against the falcon component (relay falcon-flight-v1.27.wasm) once there's something to try. Thanks!
Thanks for rules_wasm_component — the hermetic wasm toolchain bundles are great to build on. While wiring jess (a hardware-integration project that builds falcon firmware: wasm component → meld fuse → synth → Cortex-M ELF → Renode), I hit two gaps that block expressing the firmware build hermetically. Filing together since they're the same "downstream firmware build" story.
1.
synth_compileisn't usablerelay/BUILD.bazelloadssynth_compilefrom@rules_wasm_component//wasm:defs.bzlbut the call is disabled with:So there's no working path to compile a fused core module to a Cortex-M ELF via the rules.
2. meld/synth aren't bundled as hermetic toolchains
meld_fuselives in@meld//rules:meld.bzl, andsynthis@synth//crates:synth. To use them a consumer mustbazel_depon meld and synth — which drags theirrules_verus/rules_rocq_rust/rules_lean(Nix) proof toolchains into a firmware-only build. A firmware consumer shouldn't need the proof toolchains.Impact
jess can hermetically
wasm_validate+wasm_optimizethe falcon component today, but cannot expressmeld_fuse → synth_compile → renode_testwithout either (a) an unimplemented rule or (b) pulling in the full verification stack. For now we fall back to the prebuilt CLIs in a shell script.Suggested direction
synth_compilewith asynthtoolchain attribute (analogous to how the wasm bundle registers wasm-tools), sosynth_compile(wasm_module=…, target="cortex-m4f")works standalone.rules_meld/rules_synth) that fetch prebuilt binaries, so a firmware build doesn't depend on the proof toolchains.Happy to test against the falcon component (relay
falcon-flight-v1.27.wasm) once there's something to try. Thanks!