diff options
| author | Adam Gemmell <adam.gemmell@arm.com> | 2022-07-02 00:55:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-02 00:55:03 +0100 |
| commit | ba9ca43154f20224229d652ad9970798c018d09b (patch) | |
| tree | a1343a44481bfa1d3a7edcdc2bc20e26030f8ec1 /library/stdarch/crates/std_detect/src/detect/macros.rs | |
| parent | b186197c7c696313e8d046097662dd3f6eb95040 (diff) | |
| download | rust-ba9ca43154f20224229d652ad9970798c018d09b.tar.gz rust-ba9ca43154f20224229d652ad9970798c018d09b.zip | |
Allow mapping a runtime feature to a set of target_features (#1311)
Diffstat (limited to 'library/stdarch/crates/std_detect/src/detect/macros.rs')
| -rw-r--r-- | library/stdarch/crates/std_detect/src/detect/macros.rs | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/library/stdarch/crates/std_detect/src/detect/macros.rs b/library/stdarch/crates/std_detect/src/detect/macros.rs index 3783d499cad..213e63ec550 100644 --- a/library/stdarch/crates/std_detect/src/detect/macros.rs +++ b/library/stdarch/crates/std_detect/src/detect/macros.rs @@ -1,3 +1,14 @@ +#[macro_export] +macro_rules! detect_feature { + ($feature:tt, $feature_lit:tt) => { + $crate::detect_feature!($feature, $feature_lit : $feature_lit) + }; + ($feature:tt, $feature_lit:tt : $($target_feature_lit:tt),*) => { + $(cfg!(target_feature = $target_feature_lit) ||)* + $crate::detect::__is_feature_detected::$feature() + }; +} + #[allow(unused)] macro_rules! features { ( @@ -7,7 +18,9 @@ macro_rules! features { @MACRO_ATTRS: $(#[$macro_attrs:meta])* $(@BIND_FEATURE_NAME: $bind_feature:tt; $feature_impl:tt; )* $(@NO_RUNTIME_DETECTION: $nort_feature:tt; )* - $(@FEATURE: #[$stability_attr:meta] $feature:ident: $feature_lit:tt; $(#[$feature_comment:meta])*)* + $(@FEATURE: #[$stability_attr:meta] $feature:ident: $feature_lit:tt; + $(implied by target_features: [$($target_feature_lit:tt),*];)? + $(#[$feature_comment:meta])*)* ) => { #[macro_export] $(#[$macro_attrs])* @@ -17,8 +30,7 @@ macro_rules! features { macro_rules! $macro_name { $( ($feature_lit) => { - cfg!(target_feature = $feature_lit) || - $crate::detect::__is_feature_detected::$feature() + $crate::detect_feature!($feature, $feature_lit $(: $($target_feature_lit),*)?) }; )* $( |
