pub struct Platform { /* private fields */ }
Expand description
A platform to evaluate target specifications against.
§Standard and custom platforms
target-spec
recognizes two kinds of platforms:
-
Standard platforms: These platforms are only specified by their triple string. For example, the platform
x86_64-unknown-linux-gnu
is a standard platform since it is recognized by Rust as a tier 1 platform.All builtin platforms are standard platforms.
By default, if a platform isn’t builtin, target-spec attempts to heuristically determine the characteristics of the platform based on the triple string. (Use the
new_strict
constructor to disable this.) -
Custom platforms: These platforms are specified via both a triple string and a JSON file in the format defined by Rust. Custom platforms are used for targets not recognized by Rust.
Implementations§
source§impl Platform
impl Platform
sourcepub fn new(
triple_str: impl Into<Cow<'static, str>>,
target_features: TargetFeatures,
) -> Result<Self, Error>
pub fn new( triple_str: impl Into<Cow<'static, str>>, target_features: TargetFeatures, ) -> Result<Self, Error>
Creates a new standard Platform
from the given triple and target features.
Returns an error if this platform wasn’t known to target-spec
.
sourcepub fn new_strict(
triple_str: impl Into<Cow<'static, str>>,
target_features: TargetFeatures,
) -> Result<Self, Error>
pub fn new_strict( triple_str: impl Into<Cow<'static, str>>, target_features: TargetFeatures, ) -> Result<Self, Error>
Creates a new standard Platform
from the given triple and target features.
This constructor only consults the builtin platform table, and does not attempt to heuristically determine the platform’s characteristics based on the triple string.
sourcepub fn current() -> Result<Self, Error>
pub fn current() -> Result<Self, Error>
Returns the current platform, as detected at build time.
This is currently always a standard platform, and will return an error if the current
platform was unknown to this version of target-spec
.
§Notes
In the future, this constructor may also support custom platforms. This will not be considered a breaking change.
sourcepub fn from_triple(triple: Triple, target_features: TargetFeatures) -> Self
pub fn from_triple(triple: Triple, target_features: TargetFeatures) -> Self
Creates a new standard platform from a Triple
and target features.
sourcepub fn new_custom(
triple_str: impl Into<Cow<'static, str>>,
json: &str,
target_features: TargetFeatures,
) -> Result<Self, Error>
Available on crate feature custom
only.
pub fn new_custom( triple_str: impl Into<Cow<'static, str>>, json: &str, target_features: TargetFeatures, ) -> Result<Self, Error>
custom
only.Creates a new custom Platform
from the given triple, platform, and target features.
sourcepub fn add_flags(
&mut self,
flags: impl IntoIterator<Item = impl Into<Cow<'static, str>>>,
)
pub fn add_flags( &mut self, flags: impl IntoIterator<Item = impl Into<Cow<'static, str>>>, )
Adds a set of flags to accept.
A flag is a single token like the foo
in cfg(not(foo))
.
A default cargo build
will always evaluate flags to false, but custom wrappers may cause
some flags to evaluate to true. For example, as of version 0.6, cargo web build
will cause
cargo_web
to evaluate to true.
sourcepub fn triple_str(&self) -> &str
pub fn triple_str(&self) -> &str
Returns the target triple string for this platform.
sourcepub fn flags(&self) -> impl ExactSizeIterator<Item = &str>
pub fn flags(&self) -> impl ExactSizeIterator<Item = &str>
Returns the set of flags enabled for this platform.
sourcepub fn has_flag(&self, flag: impl AsRef<str>) -> bool
pub fn has_flag(&self, flag: impl AsRef<str>) -> bool
Returns true if this flag was set with add_flags
.
sourcepub fn is_standard(&self) -> bool
pub fn is_standard(&self) -> bool
Returns true if this is a standard platform.
A standard platform can be either builtin, or heuristically determined.
§Examples
use target_spec::{Platform, TargetFeatures};
// x86_64-unknown-linux-gnu is Linux x86_64.
let platform = Platform::new("x86_64-unknown-linux-gnu", TargetFeatures::Unknown).unwrap();
assert!(platform.is_standard());
sourcepub fn is_builtin(&self) -> bool
pub fn is_builtin(&self) -> bool
Returns true if this is a builtin platform.
All builtin platforms are standard, but not all standard platforms are builtin.
§Examples
use target_spec::{Platform, TargetFeatures};
// x86_64-unknown-linux-gnu is Linux x86_64, which is a Rust tier 1 platform.
let platform = Platform::new("x86_64-unknown-linux-gnu", TargetFeatures::Unknown).unwrap();
assert!(platform.is_builtin());
sourcepub fn is_heuristic(&self) -> bool
pub fn is_heuristic(&self) -> bool
Returns true if this is a heuristically determined platform.
All heuristically determined platforms are standard, but most of the time, standard platforms are builtin.
§Examples
use target_spec::{Platform, TargetFeatures};
// armv5te-apple-darwin is not a real platform, but target-spec can heuristically
// guess at its characteristics.
let platform = Platform::new("armv5te-apple-darwin", TargetFeatures::Unknown).unwrap();
assert!(platform.is_heuristic());
sourcepub fn is_custom(&self) -> bool
pub fn is_custom(&self) -> bool
Returns true if this is a custom platform.
This is always available, but if the custom
feature isn’t turned on this always returns
false.
sourcepub fn target_features(&self) -> &TargetFeatures
pub fn target_features(&self) -> &TargetFeatures
Returns the set of target features for this platform.
source§impl Platform
impl Platform
§Helpers for property testing
The methods in this section allow Platform
instances to be used in property-based testing
scenarios.
Currently, proptest 1 is supported if the proptest1
feature is enabled.
sourcepub fn strategy(
target_features: impl Strategy<Value = TargetFeatures>,
) -> impl Strategy<Value = Platform>
Available on crate feature proptest1
only.
pub fn strategy( target_features: impl Strategy<Value = TargetFeatures>, ) -> impl Strategy<Value = Platform>
proptest1
only.Given a way to generate TargetFeatures
instances, this returns a Strategy
that generates
a platform at random.
Requires the proptest1
feature to be enabled.
§Examples
use proptest::prelude::*;
use target_spec::{Platform, TargetFeatures};
// target_features is a strategy that always produces TargetFeatures::Unknown.
let target_features = Just(TargetFeatures::Unknown);
let strategy = Platform::strategy(target_features);
sourcepub fn filtered_strategy(
triple_filter: impl Fn(&'static str) -> bool,
target_features: impl Strategy<Value = TargetFeatures>,
) -> impl Strategy<Value = Platform>
Available on crate feature proptest1
only.
pub fn filtered_strategy( triple_filter: impl Fn(&'static str) -> bool, target_features: impl Strategy<Value = TargetFeatures>, ) -> impl Strategy<Value = Platform>
proptest1
only.A version of strategy
that allows target triples to be filtered.
Requires the proptest1
feature to be enabled.
source§impl Platform
impl Platform
sourcepub fn to_summary(&self) -> PlatformSummary
Available on crate feature summaries
only.
pub fn to_summary(&self) -> PlatformSummary
summaries
only.Converts this Platform
to a serializable form.
Requires the summaries
feature to be enabled.
Trait Implementations§
source§impl Ord for Platform
impl Ord for Platform
source§impl PartialOrd for Platform
impl PartialOrd for Platform
impl Eq for Platform
impl StructuralPartialEq for Platform
Auto Trait Implementations§
impl Freeze for Platform
impl RefUnwindSafe for Platform
impl Send for Platform
impl Sync for Platform
impl Unpin for Platform
impl UnwindSafe for Platform
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)