[workspace] resolver = "2" members = ["crates/*"] [workspace.package] version = "0.1.0" edition = "2021" license = "MIT OR Apache-2.0" authors = ["sam "] # Shared pins live here; promote a dep the moment two crates pin the same version (the policy # since day one, enacted at the 0530 debt sweep). Per-crate feature additions stay in the crate. # `image` deliberately stays per-crate: its default-features/feature sets differ per consumer, # and a workspace default-features choice can't be subtracted from downstream. [workspace.dependencies] anyhow = "1.0.102" bevy = "0.18.1" clap = { version = "4.6.1", features = ["derive"] } # No `[patch.crates-io]`: the WoW format + protocol stack is fully in-repo (decision 0021), so there # are no warcraft-rs / wow_messages crates (or forks of them) anywhere in the tree. # Optimize *dependencies* even in dev builds. avian/parry collision math (and wgpu/bevy render) is # unusably slow at opt-level 0 — a plain `cargo run` crawls to <1 fps once physics is doing real work. # opt-level 3 on deps (the standard Bevy fix) makes debug builds playable while our own crates stay # lightly optimized for fast incremental rebuilds. One-time cost: deps recompile optimized the first time. [profile.dev.package."*"] opt-level = 3 # Our own crates at opt-level 1, not 0: Bevy's generic hot paths (material specialization scans, # query par_for_each closures) monomorphize INTO our crate, so at opt 0 they run at debug codegen # speed over every resident entity — measured at Stormwind as the difference between ~45 fps and a # pinned 60 (decision 0362). Warm incremental rebuild cost measured at ~zero. NB: FPS probe numbers # in decisions ≤ 0361 were taken at opt 0 and are not comparable with post-0362 probes. [profile.dev] opt-level = 1 # No debuginfo trimming: `debug = "line-tables-only"` was A/B-measured (decision 0192) at zero # recurring win on this stack (macOS unpacked split-debuginfo; sccache; fast ld) — not worth # invalidating every warm target and the sccache cache for. # Shipping-grade optimization, A/B-graded at the pin (decision 0736): −1.0 cpu_ms (−5 %) vs # default release, flat at the empty-map and bare-Bevy floors. The campaign keeps grading on # default `release` — same-day A/B is the law, and fat LTO's link time would tax every # iteration for a constant offset. Build with `--profile ship` for actual releases (add # `RUSTFLAGS=-Ctarget-cpu=native` for a machine-local binary; not set here — it isn't portable). [profile.ship] inherits = "release" lto = "fat" codegen-units = 1