cortex-m
cortex-m copied to clipboard
Use cargo features to allow fine-grain control of the library.
This is a for-discussion PR that proposes a way of dealing the problem of this crate serving a few too many concerns for the needs of some users as discussed in https://github.com/rust-embedded/cortex-m/issues/239
The idea is that chunks of the code-base are marked as optional so that users can choose which features they need.
I started with code that used dependencies but this could be expanded to cover more features.
Contrast and compare:
$ cargo tree -e all --no-default-features
cortex-m v0.7.3
├── bitfield feature "default"
│ └── bitfield v0.13.2
└── volatile-register feature "default"
└── volatile-register v0.2.1
└── vcell feature "default"
└── vcell v0.1.3
deps)
$ cargo tree -e all
cortex-m v0.7.3
├── bare-metal feature "const-fn"
│ └── bare-metal v0.2.5
│ [build-dependencies]
│ └── rustc_version feature "default"
│ └── rustc_version v0.2.3
│ └── semver feature "default"
│ └── semver v0.9.0
│ └── semver-parser feature "default"
│ └── semver-parser v0.7.0
├── bare-metal feature "default"
│ └── bare-metal v0.2.5 (*)
├── bitfield feature "default"
│ └── bitfield v0.13.2
├── embedded-hal feature "default"
│ └── embedded-hal v0.2.6
│ ├── void v1.0.2
│ └── nb feature "default"
│ └── nb v0.1.3
│ └── nb feature "default"
│ └── nb v1.0.0
└── volatile-register feature "default"
└── volatile-register v0.2.1
└── vcell feature "default"
└── vcell v0.1.3
$ cargo tree -e all --no-default-features --features="delay"
cortex-m v0.7.3
├── bitfield feature "default"
│ └── bitfield v0.13.2
├── embedded-hal feature "default"
│ └── embedded-hal v0.2.6
│ ├── void v1.0.2
│ └── nb feature "default"
│ └── nb v0.1.3
│ └── nb feature "default"
│ └── nb v1.0.0
└── volatile-register feature "default"
└── volatile-register v0.2.1
└── vcell feature "default"
└── vcell v0.1.3
$ cargo tree -e all --no-default-features --features="interrupt"
cortex-m v0.7.3
├── bare-metal feature "const-fn"
│ └── bare-metal v0.2.5
│ [build-dependencies]
│ └── rustc_version feature "default"
│ └── rustc_version v0.2.3
│ └── semver feature "default"
│ └── semver v0.9.0
│ └── semver-parser feature "default"
│ └── semver-parser v0.7.0
├── bare-metal feature "default"
│ └── bare-metal v0.2.5 (*)
├── bitfield feature "default"
│ └── bitfield v0.13.2
└── volatile-register feature "default"
└── volatile-register v0.2.1
└── vcell feature "default"
└── vcell v0.1.3