cortex-m icon indicating copy to clipboard operation
cortex-m copied to clipboard

Use cargo features to allow fine-grain control of the library.

Open hydra opened this issue 4 years ago • 0 comments

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

hydra avatar Sep 21 '21 12:09 hydra