Skip to content

Commit 4a434a5

Browse files
committed
Check device selected in build.rs
1 parent faeda4e commit 4a434a5

File tree

4 files changed

+45
-33
lines changed

4 files changed

+45
-33
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
2222
- Replace UB code by a legitimate pointer access [#480]
2323
- Fix flash error flag clearing [#489]
2424
- Clarify README for windows users [#496]
25+
- Check "device selected" in `build.rs`
2526

2627
### Added
2728

Cargo.toml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,12 @@ usb-device = "0.2.8"
6161
usbd-serial = "0.1.1"
6262

6363
[features]
64-
device-selected = []
6564
doc = []
66-
# deprecated feature
67-
rt = []
68-
stm32f100 = ["stm32f1/stm32f100", "device-selected"]
69-
stm32f101 = ["stm32f1/stm32f101", "device-selected"]
70-
stm32f103 = ["stm32f1/stm32f103", "device-selected", "has-can", "stm32-usbd"]
71-
stm32f105 = ["stm32f1/stm32f107", "device-selected", "connectivity"]
72-
stm32f107 = ["stm32f1/stm32f107", "device-selected", "connectivity"]
65+
stm32f100 = ["stm32f1/stm32f100"]
66+
stm32f101 = ["stm32f1/stm32f101"]
67+
stm32f103 = ["stm32f1/stm32f103", "has-can", "stm32-usbd"]
68+
stm32f105 = ["stm32f1/stm32f107", "connectivity"]
69+
stm32f107 = ["stm32f1/stm32f107", "connectivity"]
7370

7471
# Devices with 64 or 128 Kb ROM
7572
medium = []

build.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::env;
2+
3+
#[derive(Clone, Copy, Debug)]
4+
enum GetOneError {
5+
None,
6+
Multiple,
7+
}
8+
9+
trait IteratorExt: Iterator {
10+
fn get_one(self) -> Result<Self::Item, GetOneError>;
11+
}
12+
13+
impl<T: Iterator> IteratorExt for T {
14+
fn get_one(mut self) -> Result<Self::Item, GetOneError> {
15+
match (self.next(), self.next()) {
16+
(Some(res), None) => Ok(res),
17+
(None, _) => Err(GetOneError::None),
18+
_ => Err(GetOneError::Multiple),
19+
}
20+
}
21+
}
22+
23+
fn main() {
24+
let _chip_name = match env::vars()
25+
.map(|(a, _)| a)
26+
.filter(|x| x.starts_with("CARGO_FEATURE_STM32F1"))
27+
.get_one()
28+
{
29+
Ok(x) => x,
30+
Err(GetOneError::None) => panic!("No stm32xx Cargo feature enabled"),
31+
Err(GetOneError::Multiple) => panic!("Multiple stm32xx Cargo features enabled"),
32+
}
33+
.strip_prefix("CARGO_FEATURE_")
34+
.unwrap()
35+
.to_ascii_lowercase();
36+
}

src/lib.rs

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,7 @@ compile_error!(
113113
"Multiple targets specified. Only a single `--features <target-name>` can be specified."
114114
);
115115

116-
#[cfg(feature = "device-selected")]
117116
pub use embedded_hal as hal;
118-
#[cfg(feature = "device-selected")]
119117
pub use embedded_hal_02 as hal_02;
120118

121119
#[cfg(feature = "stm32f100")]
@@ -130,52 +128,32 @@ pub use stm32f1::stm32f103 as pac;
130128
#[cfg(any(feature = "stm32f105", feature = "stm32f107"))]
131129
pub use stm32f1::stm32f107 as pac;
132130

133-
#[cfg(feature = "device-selected")]
134131
pub mod adc;
135-
#[cfg(feature = "device-selected")]
136132
pub mod afio;
137-
#[cfg(feature = "device-selected")]
138133
pub mod backup_domain;
139-
#[cfg(feature = "device-selected")]
140134
pub mod bb;
141-
#[cfg(all(feature = "device-selected", feature = "has-can"))]
135+
#[cfg(feature = "has-can")]
142136
pub mod can;
143-
#[cfg(feature = "device-selected")]
144137
pub mod crc;
145-
#[cfg(all(feature = "device-selected", feature = "has-dac"))]
138+
#[cfg(feature = "has-dac")]
146139
pub mod dac;
147-
#[cfg(feature = "device-selected")]
148140
pub mod dma;
149-
#[cfg(feature = "device-selected")]
150141
pub mod flash;
151-
#[cfg(feature = "device-selected")]
152142
pub mod gpio;
153-
#[cfg(feature = "device-selected")]
154143
pub mod i2c;
155-
#[cfg(feature = "device-selected")]
156144
pub mod prelude;
157-
#[cfg(feature = "device-selected")]
158145
pub mod qei;
159-
#[cfg(feature = "device-selected")]
160146
pub mod rcc;
161-
#[cfg(feature = "device-selected")]
162147
pub mod rtc;
163-
#[cfg(feature = "device-selected")]
164148
pub mod serial;
165-
#[cfg(feature = "device-selected")]
166149
pub mod spi;
167-
#[cfg(feature = "device-selected")]
168150
pub mod time;
169-
#[cfg(feature = "device-selected")]
170151
pub mod timer;
171-
#[cfg(all(feature = "device-selected", feature = "stm32-usbd"))]
152+
#[cfg(feature = "stm32-usbd")]
172153
pub mod usb;
173-
#[cfg(feature = "device-selected")]
174154
pub mod watchdog;
175155

176-
#[cfg(feature = "device-selected")]
177156
mod sealed {
178157
pub trait Sealed {}
179158
}
180-
#[cfg(feature = "device-selected")]
181159
use sealed::Sealed;

0 commit comments

Comments
 (0)