Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
297 lines (284 loc) · 11.8 KB
/
Copy pathCargo.toml
File metadata and controls
297 lines (284 loc) · 11.8 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
[workspace]
resolver = "2"
# `infra/fuzz/` is a standalone cargo-fuzz crate with its own workspace: it
# needs the nightly-only `-Z sanitizer` machinery and must never be built by
# the normal workspace commands.
# `.claude/worktrees/` holds nested git worktrees of this same repository, each
# carrying its own copy of every crate. Without this, a build run from the
# workspace root can resolve a package to a worktree copy instead of the
# checkout, producing a binary that does not match the source under review.
# Third-party source stays outside first-party workspace test/lint policy.
exclude = ["infra/fuzz", ".claude/worktrees", "vendor/diffsol"]
members = [
"crates/rumoca",
"crates/rumoca-worker",
"crates/rumoca-allocator",
"crates/rumoca-test-msl",
"crates/rumoca-core",
"crates/rumoca-contracts",
# Executable reference semantics (SPEC_0037 verification track)
"crates/rumoca-reference",
"crates/rumoca-ir-dae",
"crates/rumoca-ir-solve",
"crates/rumoca-eval-ast",
"crates/rumoca-eval-flat",
"crates/rumoca-eval-dae",
"crates/rumoca-eval-galec",
"crates/rumoca-eval-solve",
"crates/rumoca-ir-ast",
"crates/rumoca-ir-flat",
"crates/rumoca-phase-codegen",
"crates/rumoca-phase-galec",
"crates/rumoca-phase-flatten",
"crates/rumoca-phase-instantiate",
"crates/rumoca-phase-autodiff",
"crates/rumoca-phase-parse",
"crates/rumoca-phase-parse-galec",
"crates/rumoca-phase-resolve",
"crates/rumoca-phase-dae",
"crates/rumoca-phase-structural",
"crates/rumoca-phase-solve",
"crates/rumoca-signal-frame",
"crates/rumoca-codec",
"crates/rumoca-codec-flatbuffers",
"crates/rumoca-transport-udp",
"crates/rumoca-transport-zenoh",
"crates/rumoca-transport-websocket",
"crates/rumoca-input",
"crates/rumoca-input-gamepad",
"crates/rumoca-input-keyboard",
"crates/rumoca-solver",
"crates/rumoca-sim",
"crates/rumoca-opt",
"crates/rumoca-solver-diffsol",
"crates/rumoca-solver-rk45",
"crates/rumoca-phase-typecheck",
# GALEC / eFMI export
"crates/rumoca-ir-galec",
# Compile pipeline and tools
"crates/rumoca-compile",
"crates/rumoca-tool-lint",
"crates/rumoca-tool-fmt",
"crates/rumoca-tool-lsp",
"crates/rumoca-tool-lsp-galec",
"crates/xtask",
# Bindings
"crates/rumoca-bind-wasm",
"crates/rumoca-bind-wasm-diffsol",
"crates/rumoca-bind-wasm-galec",
"crates/rumoca-bind-python",
# Compiled execution adapters
"crates/rumoca-exec-cranelift",
"crates/rumoca-exec-mlir",
"crates/rumoca-exec-wasm",
]
[workspace.package]
version = "0.10.3"
edition = "2024"
license = "Apache-2.0"
repository = "https://github.com/CogniPilot/rumoca"
homepage = "https://github.com/CogniPilot/rumoca"
[workspace.metadata.crane]
name = "rumoca"
[workspace.dependencies]
# Internal crates
# Library consumers of the umbrella crate (currently only the Python binding)
# get the batch compile/codegen surface, not the interactive CLI `runner`
# (transports, gamepad, signal-hook, tiny_http) — those are native-only and
# break wasm/Pyodide cross-builds. The `rumoca` *binary* still enables `runner`
# through its own package-level `default = ["runner"]`; this only governs
# crates that depend on `rumoca`.
rumoca = { path = "crates/rumoca", default-features = false }
rumoca-worker = { path = "crates/rumoca-worker" }
rumoca-allocator = { path = "crates/rumoca-allocator" }
rumoca-core = { path = "crates/rumoca-core" }
rumoca-contracts = { path = "crates/rumoca-contracts" }
rumoca-reference = { path = "crates/rumoca-reference" }
rumoca-ir-dae = { path = "crates/rumoca-ir-dae" }
rumoca-ir-solve = { path = "crates/rumoca-ir-solve" }
rumoca-eval-ast = { path = "crates/rumoca-eval-ast" }
rumoca-eval-flat = { path = "crates/rumoca-eval-flat" }
rumoca-eval-dae = { path = "crates/rumoca-eval-dae" }
rumoca-eval-galec = { path = "crates/rumoca-eval-galec" }
rumoca-eval-solve = { path = "crates/rumoca-eval-solve" }
rumoca-ir-ast = { path = "crates/rumoca-ir-ast" }
rumoca-ir-flat = { path = "crates/rumoca-ir-flat" }
rumoca-phase-flatten = { path = "crates/rumoca-phase-flatten" }
rumoca-phase-instantiate = { path = "crates/rumoca-phase-instantiate" }
rumoca-phase-autodiff = { path = "crates/rumoca-phase-autodiff" }
rumoca-phase-parse = { path = "crates/rumoca-phase-parse" }
rumoca-phase-parse-galec = { path = "crates/rumoca-phase-parse-galec" }
rumoca-phase-resolve = { path = "crates/rumoca-phase-resolve" }
rumoca-phase-dae = { path = "crates/rumoca-phase-dae" }
rumoca-phase-structural = { path = "crates/rumoca-phase-structural" }
rumoca-phase-solve = { path = "crates/rumoca-phase-solve", default-features = false }
rumoca-phase-codegen = { path = "crates/rumoca-phase-codegen" }
rumoca-phase-galec = { path = "crates/rumoca-phase-galec" }
rumoca-signal-frame = { path = "crates/rumoca-signal-frame" }
rumoca-codec = { path = "crates/rumoca-codec" }
rumoca-codec-flatbuffers = { path = "crates/rumoca-codec-flatbuffers" }
rumoca-transport-udp = { path = "crates/rumoca-transport-udp" }
rumoca-transport-zenoh = { path = "crates/rumoca-transport-zenoh" }
rumoca-transport-websocket = { path = "crates/rumoca-transport-websocket" }
rumoca-input = { path = "crates/rumoca-input" }
rumoca-input-gamepad = { path = "crates/rumoca-input-gamepad" }
rumoca-input-keyboard = { path = "crates/rumoca-input-keyboard" }
rumoca-solver = { path = "crates/rumoca-solver" }
rumoca-sim = { path = "crates/rumoca-sim", default-features = false }
rumoca-opt = { path = "crates/rumoca-opt" }
rumoca-solver-diffsol = { path = "crates/rumoca-solver-diffsol" }
rumoca-solver-rk45 = { path = "crates/rumoca-solver-rk45" }
rumoca-phase-typecheck = { path = "crates/rumoca-phase-typecheck" }
rumoca-compile = { path = "crates/rumoca-compile" }
rumoca-ir-galec = { path = "crates/rumoca-ir-galec" }
rumoca-exec-cranelift = { path = "crates/rumoca-exec-cranelift" }
rumoca-exec-mlir = { path = "crates/rumoca-exec-mlir" }
rumoca-exec-wasm = { path = "crates/rumoca-exec-wasm" }
rumoca-tool-lint = { path = "crates/rumoca-tool-lint" }
rumoca-tool-fmt = { path = "crates/rumoca-tool-fmt" }
rumoca-tool-lsp = { path = "crates/rumoca-tool-lsp", default-features = false }
rumoca-tool-lsp-galec = { path = "crates/rumoca-tool-lsp-galec", default-features = false }
rumoca-bind-wasm = { path = "crates/rumoca-bind-wasm" }
rumoca-bind-python = { path = "crates/rumoca-bind-python" }
rumoca-test-msl = { path = "crates/rumoca-test-msl" }
# External dependencies
anyhow = "1.0"
mimalloc = "0.1"
libmimalloc-sys = "0.1"
num_cpus = "1.17"
blake3 = "1.5"
clap = { version = "4.5", features = ["derive"] }
clap_complete = "4.5"
core_affinity = "0.8"
crossterm = "0.28"
flate2 = "1.0"
faer = { version = "0.24.4", default-features = false, features = ["std", "sparse-linalg"] }
indexmap = { version = "2.7", features = ["serde"] }
miette = { version = "7.4", features = ["fancy"] }
minijinja = { version = "2.5", features = ["debug", "preserve_order"] }
parol = "=4.2.2"
parol_runtime = "=4.2.0"
# Property-based testing (dev-dependency only)
proptest = "1"
quick-xml = "0.37"
rayon = "1.10"
rustc-hash = "2.0"
sha1 = "0.10"
scnr2 = "0.3.3"
sigpipe = "0.1"
serde = { version = "1.0", features = ["derive", "rc"] }
serde_json = { version = "1.0", features = ["preserve_order", "float_roundtrip"] }
self_cell = "1.2.2"
bincode = "1.3"
syn = { version = "2.0", features = ["full", "visit"] }
proc-macro2 = "1.0"
futures-util = "0.3"
tar = "0.4"
thiserror = "2.0"
toml = "0.8"
tempfile = "3.10"
libloading = "0.8"
time = { version = "0.3", features = ["formatting", "parsing", "macros"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
ureq = "2.9"
uuid = { version = "1", features = ["v4"] }
walkdir = "2.5"
zip = "2.4"
# LSP types (usable from WASM and native, must match tower-lsp's version)
lsp-types = "0.94"
# LSP server (native only)
tower-lsp = "0.20"
tower-service = "0.3"
tungstenite = "0.26"
tokio = { version = "1", features = ["full"] }
zenoh = "1.9.0"
# WASM bindings
wasm-bindgen = "0.2"
serde-wasm-bindgen = "0.6"
console_error_panic_hook = "0.1"
# Python bindings
pyo3 = { version = "0.22", features = ["extension-module"] }
[workspace.lints.rust]
# `cfg(kani)` is set only by the Kani verifier in the dedicated `.#kani` shell
# (see CONTRIBUTING.md). Declaring it here keeps the bounded-verification
# harnesses warning-free without a blanket `allow`, so a *typo* in any other
# cfg name still warns. `cfg(coverage_nightly)` is set by `cargo llvm-cov` on
# a nightly toolchain and gates the one coverage exemption (SPEC_0025 §4).
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(kani)', 'cfg(coverage_nightly)'] }
unsafe_code = "deny"
unreachable_pub = "deny"
unnameable_types = "deny"
private_interfaces = "deny"
private_bounds = "deny"
exported_private_dependencies = "deny"
dead_code = "deny"
# Code complexity lints (SPEC_0021)
# Thresholds configured in clippy.toml
[workspace.lints.clippy]
# Enable lint groups - deny to make warnings into compile errors
all = { level = "deny", priority = -1 }
# Intentionally not enabling `cargo`/`pedantic` as workspace-wide lint groups.
# They produce high-noise warnings under our `-D warnings` CI mode; we prefer
# targeted deny rules and incremental lint hardening.
# Complexity lints
excessive_nesting = "deny"
too_many_lines = "deny"
too_many_arguments = "deny"
# Crate-boundary hardening
# Do not blanket-ban re-exports; SPEC_0029 is enforced by targeted architecture tests.
pub_use = "allow"
# Visibility shorthand style lints are orthogonal to architecture; leave them off.
pub_with_shorthand = "allow"
pub_without_shorthand = "allow"
missing_enforced_import_renames = "deny"
# For faster builds
[profile.dev]
opt-level = 1
# Full DWARF (`debug = 2`, Cargo's default for dev) is what makes the ~60
# integration-test binaries ~800 MB each and drives rust-lld to multi-GB peak
# RSS while linking them in parallel. Line tables alone keep panic backtraces,
# `perf`/flamegraph symbolication and `file:line` attribution intact; only
# variable/type inspection in a debugger is lost. The `test` profile inherits
# this, so it applies to every unit- and integration-test binary.
debug = "line-tables-only"
# Leave the remaining line tables in the per-CU `.dwo` files instead of copying
# them into every linked artifact. Each test binary then shares one pool of
# debuginfo rather than carrying its own, which is what halves link-time peak
# RSS again. The tradeoff is that a dev/test binary is no longer self-contained:
# it resolves `file:line` only while its `target/debug/deps/*.dwo` files are
# still in place, so never ship or archive a dev binary on its own.
split-debuginfo = "unpacked"
# `build-override` applies to build scripts and proc-macro crates only.
# It speeds up codegen-heavy macro/build tooling without forcing all dev crates
# to compile at higher optimization levels.
[profile.dev.build-override]
opt-level = 3
[profile.release.build-override]
opt-level = 3
# Keep thin LTO for release runtime quality, but leave codegen units at Cargo's
# default so CI can use parallel codegen.
[profile.release]
lto = "thin"
# Fast edit/test profile for the local full-MSL campaign. Keep release-level
# runtime optimization, but avoid ThinLTO and retain incremental artifacts so
# compiler/runtime changes do not make every parity sweep pay a release link.
# Official release builds continue to use `[profile.release]` above.
[profile.msl-fast]
inherits = "release"
lto = false
incremental = true
codegen-units = 16
# Speed up parser-heavy runtime in normal debug builds.
[profile.dev.package.rumoca-phase-parse]
opt-level = 3
[profile.dev.package.rumoca-compile]
opt-level = 2
[profile.dev.package.parol_runtime]
opt-level = 3
[profile.dev.package.scnr2]
opt-level = 3
[patch.crates-io]
# Correct the accepted BDF state at its owner; see the provenance and patch
# inventory in vendor/diffsol/RUMOCA_PATCH.md.
diffsol = { path = "vendor/diffsol" }