1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
[]
= "synth-cli"
= true
= true
= true
= true
= true
= true
= true
= true
= "CLI for Synth, the WebAssembly-to-ARM Cortex-M AOT compiler"
[[]]
= "synth"
= "src/main.rs"
[]
= ["riscv"]
= ["synth-backend-awsm"]
= ["synth-backend-wasker"]
= ["synth-backend-riscv"]
= ["synth-verify"]
# Uncomment when loom crate is available:
# loom = ["dep:loom-opt"]
[]
# Path deps carry `version` so `cargo publish` rewrites them to the
# crates.io coordinate. Bumping the workspace version requires
# updating these in lockstep — see docs/release-process.md.
= { = "../synth-core", = "0.19.0" }
= { = "../synth-frontend", = "0.19.0" }
= { = "../synth-synthesis", = "0.19.0" }
= { = "../synth-backend", = "0.19.0" }
# AArch64 host-native backend (#538) — small pure-Rust crate, always on.
= { = "../synth-backend-aarch64", = "0.19.0" }
# Optional external backends
= { = "../synth-backend-awsm", = "0.19.0", = true }
= { = "../synth-backend-wasker", = "0.19.0", = true }
= { = "../synth-backend-riscv", = "0.19.0", = true }
# Optional verification (requires z3)
= { = "../synth-verify", = "0.19.0", = true, = ["z3-solver", "arm"] }
# Optional PulseEngine WASM optimizer
# Uncomment when loom crate is available:
# loom-opt = { workspace = true, optional = true }
= true
= true
= true
= true
= true
= true
= true
[]
= true
# VCR-DBG-001 Tier-1 (#394) — oracle E parses the INPUT wasm's `.debug_*` custom
# sections independently (mirroring the production reader) to derive, at runtime,
# the real source basenames its `.debug_line` rows reference — so the emitted
# file-table check is robust vs hardcoding. Test-only; matches synth-core's pin.
# Bazel globs src/ only, so no MODULE.bazel pin is needed for a dev-dependency.
= true
# VCR-ORACLE-001 (#242) — the frozen-codegen byte gate hashes each fixture's
# `.text` to lock it against accidental drift (e.g. a dependabot parser bump
# shifting lowering). Already in the lock tree; test-only ⇒ no production pull,
# no MODULE.bazel pin (Bazel globs src/ only).
= "0.11"
# VCR-DBG-001 step 4 (#394) — oracle B parses the EMITTED `.debug_line` back with
# gimli::read to prove the section is real debugger-readable DWARF (addresses in
# `.text` range, lines non-zero). Test-only; the production read+emit lives in
# synth-core. Matches synth-core's gimli pin.
= { = "0.33", = false, = ["read", "std"] }
# VCR-MEM-001 (#383) layer-2 substrate: scry's sound shadow-stack-depth analysis,
# verified in-tree against a real module. DEV-dependency only — the production
# binary does not pull scry until the gated consumption step (the .bss shrink /
# prologue elision) lands. Test-only ⇒ Bazel (which globs src/ only) never sees
# it, so no MODULE.bazel pin is needed yet. See scry#51.
# Tracks scry 2.x (SCPV v3): the major bump reshaped the provenance wire format,
# but synth's consumed surface (call_graph / function_summaries / stack_usage /
# reachable_from_exports / operand_stack) is unchanged and additive-only, so the
# bump is transparent here. See scry#63 / scry v2.0.0. Empirically re-verified
# against scry v2.3.0, v2.5.0 (2026-06-27), then v2.6.0 (2026-06-30, lockfile
# bumped) — scry_shadow_stack_budget stays GREEN, so the "transparent" claim is
# tested, not just asserted. v2.4.0 (FEAT-038) models memory.size/grow; v2.5.0
# (FEAT-039) makes reachable_from_exports sound in the open world (escaped
# funcref) — the superset synth's shadow-stack pruning relies on; pinned by
# scry_reachable_superset_is_open_world_sound_383_feat039. v2.6.0 adds the
# machine-readable `gaps` field (FEAT-040) + hardens the shadow-stack bound by the
# resolved call_indirect target set (FEAT-043); consumed surface unchanged
# (msgq_put Bytes(32) bound unchanged), now re-verified with a gap-observability
# assertion (value-domain gaps ⇒ the finite bound is sound).
= "2.0"