rust-embedded / rust-embedded/svd2rust
proposal: separate crates for peripherals
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 857
- Forks
- 164
- PR merge metrics
- No merged PRs in 30d
Description
Split peripheral modules into crates
This proposal is to add a CLI option to split peripheral modules into separate crates in a project workspace.
Motivation
For large PAC crates, compilation on machines with less-powerful cores is excruciatingly slow. The bottleneck for any projects depending on the PAC crate is obviously the PAC, because one core is pinged to full usage, while all other cores are idle.
By splitting the PAC into separate crates for each peripheral, each core could work on a separate peripheral crate. The separate crates could also improve incremental compilation, since a change in one of the peripheral crates would not necessarily require recompilation of other peripheral crates.
Challenges
Much of the plumbing is already there for creating separate crates for each peripheral.
Each peripheral already generates its own module.
Peripheral versioning would inherit from the top-level Cargo.toml version.
The main challenge will be making minimal changes to enable the code generation, without adding too much to maintainability burden.
Example
An example project structure might look like:
- Cargo.toml
- <soc>-generic
- Cargo.toml
- src
- lib.rs
- <soc>-i2c
- Cargo.toml
- src
- lib.rs
- i2c0
- i2c1
- ...
- i2c<N>
- <soc>-spi
- Cargo.toml
- src
- lib.rs
- spi0
- spi1
- ...
- spi<N>
Alternative approaches
Once the parallel front-end is stable in rustc, the main motivation for this proposal may be less relevant.
However, there will still be users stuck on older versions of rustc where this proposal will be useful.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the existing CLI option handling and code-generation path that creates each peripheral module. Inspect how Cargo.toml and lib.rs are generated, then determine the workspace and versioning changes needed for separate peripheral crates; done means the option produces the proposed crate layout without unnecessary maintenance overhead.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- build-system, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100