Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rust / cargo workspace: how to specify different profile for different sub project

I have a rust Cargo workspace that contains different subproject:

./
├─Cargo.toml
├─project1/
│ ├─Cargo.toml
│ ├─src/
├─project2/
│ ├─Cargo.toml
│ ├─src/

I would like to build one project optimized for binary size and the other for speed.

From my understanding we can tweak the profiles only at the cargo.toml root level so this for instance applies to all my sub-projects.

root Cargo.toml:

[workspace]
members = ["project1", "project2"]

[profile.release]
# less code to include into binary
panic = 'abort'
# optimization over all codebase ( better optimization, slower build )
codegen-units = 1
# optimization for size ( more aggressive )
opt-level = 'z'
# optimization for size
# opt-level = 's'
# link time optimization using using whole-program analysis
lto = true

If I try to apply this configuration in a sub Cargo.toml it doesn't work

Question: is there a way to configure each project independently ?

Thank you in advance.

Edit: Also I forgot to say but one project is build with trunk and is a wasm project (I want to be the smaller possible) the other is a backend and I really need it to be built for speed

like image 813
718 Avatar asked Sep 11 '25 15:09

718


1 Answers

Each crate in a workspace can have its own .cargo/config.toml where different profiles can be defined. I've toyed around with this a bit to have one crate for an embedded device, one for a CLI utility to connect to the device over serial, and shared libraries for both of them. Pay attention to the caveat in the docs about needing to be in the crate directory for the config to be read, it won't work from the workspace root.

like image 127
iMobs Avatar answered Sep 14 '25 09:09

iMobs