[workspace] resolver = "3" members = ["crates/*", "apps/*", "xtask"] [workspace.package] version = "0.6.0" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.95" authors = ["FieldCraft contributors"] repository = "https://github.com/tangency-labs/fieldcraft" [workspace.dependencies] # internal fieldcraft-model = { path = "crates/model" } fieldcraft-parallel = { path = "crates/parallel" } fieldcraft-geometry = { path = "crates/geometry" } fieldcraft-mesh = { path = "crates/mesh" } fieldcraft-decks = { path = "crates/decks" } fieldcraft-io = { path = "crates/io" } fieldcraft-fem = { path = "crates/fem" } fieldcraft-solver = { path = "crates/solver" } fieldcraft-explicit = { path = "crates/explicit" } fieldcraft-lbm = { path = "crates/lbm" } fieldcraft-engine = { path = "crates/engine" } fieldcraft-testkit = { path = "crates/testkit" } fieldcraft-render = { path = "crates/render" } fieldcraft-ui-egui = { path = "crates/ui-egui" } fieldcraft-mcp = { path = "crates/mcp" } fieldcraft-update = { path = "crates/update" } fieldcraft-gpu = { path = "crates/gpu" } fieldcraft-lbm-gpu = { path = "crates/lbm-gpu" } # foundation thiserror = "2" serde = { version = "1", features = ["derive"] } serde_json = { version = "1", features = ["float_roundtrip"] } log = "0.4" # 3MF packages (docs/formats/tagged-mesh.md). zip is ahead of SolidCraft (still on 3), so both are built. zip = { version = "9", default-features = false, features = ["deflate"] } quick-xml = "0.42" # content hashes and part checksums of .fieldcraft files (the version SolidCraft uses) sha2 = "0.11" # images (PNG snapshots and screenshots) png = "0.18" # SVG toolbar icons rasterised in the UI (no text, fonts or raster images in icons) resvg = { version = "0.48", default-features = false } # ui: the same egui/eframe/egui-wgpu line as SolidCraft egui = "0.36" eframe = { version = "0.36", default-features = false } egui-wgpu = "0.36" # the wgpu egui-wgpu uses, for the offscreen viewport (crates/gpu); backends come per target there wgpu = { version = "30", default-features = false, features = ["std", "wgsl"] } pollster = "1.0" # Shared Craft-family egui components (icon buttons, tabs, widget palette); the same rev as # VectorCraft. MIT OR Apache-2.0. craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "5c874d51eeb3de70e735c8ce87a59a7dedd47675" } # native file pickers (the desktop app only; the UI crate takes them as services) rfd = "0.17" # Geometry: SolidCraft's B-rep kernel (MIT OR Apache-2.0), pinned. Only crates/geometry uses it # (plan/adr/0001-libraries.md). solidcraft-geom = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } solidcraft-kernel = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } solidcraft-doc = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } solidcraft-io = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } # Runs SolidCraft command scripts (the test corpus recipes); only behind fieldcraft-geometry's # `scripts` feature. solidcraft-engine = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } [workspace.lints.rust] unsafe_code = "forbid" [workspace.lints.clippy] dbg_macro = "warn" todo = "warn" too_many_arguments = "allow" type_complexity = "allow" # `!(x > tol)` is our idiom for "not a usable number" (NaN-safe). neg_cmp_op_on_partial_ord = "allow" [profile.dev.package."*"] opt-level = 2 [profile.dev] opt-level = 1 # The lattice Boltzmann kernels are compute loops over millions of cells; their verification # runs (tests) need them optimised. [profile.dev.package.fieldcraft-lbm] opt-level = 3 # Meshing and the sparse solver are compute loops too: the tet quality stage and the # mesh-convergence oracle cases (tests/oracle) run in tests. [profile.dev.package.fieldcraft-mesh] opt-level = 3 [profile.dev.package.fieldcraft-solver] opt-level = 3 # Tests and lints (`cargo xtask ci`, GitHub CI). Debug assertions are off because truck's # debug-only checks reject valid geometry (SolidCraft builds its tests the same way). [profile.ci] inherits = "dev" opt-level = 1 debug = "line-tables-only" debug-assertions = false overflow-checks = true incremental = false [profile.ci.package."*"] opt-level = 2 [profile.ci.package.fieldcraft-lbm] opt-level = 3 [profile.ci.package.fieldcraft-mesh] opt-level = 3 [profile.ci.package.fieldcraft-solver] opt-level = 3 [profile.release] opt-level = 3 lto = "thin" codegen-units = 16 debug = "line-tables-only" # SolidCraft builds truck and egui-wgpu with local fixes (its vendor/ directory). Patches don't # reach a dependent workspace, so FieldCraft applies the same ones from the same pinned commit; # keep this list and the rev in step with SolidCraft's [patch.crates-io]. [patch.crates-io] truck-shapeops = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } truck-stepio = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } truck-meshalgo = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } matext4cgmath = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" } # egui-wgpu with SolidCraft's fixes (vendor/egui-wgpu there): MSAA clamped to what the device # supports and 1x on OpenGL adapters, so the requested 4x never fails pipeline validation at start. egui-wgpu = { git = "https://github.com/bherbruck/solidcraft", rev = "b1695873f5d0031f51a8d5e7ec036fced6f000e2" }