bevy/crates/bevy_platform_support
Zachary Harrold d9ba1af87c
Fix Typo in bevy_platform_support's spin Feature (#17516)
# Objective

- Fix typo in `spin/portable-atomic` feature.

## Solution

- Replace with `spin/portable_atomic`

## Testing

- CI

---

## Notes

This is a very annoying design choice the `spin` developers made.
Because the _crate_ is called `portable-atomic` and is optional, Cargo
automatically registers the feature `portable-atomic`. But the
maintainers use `portable_atomic` for their _feature_ which enables the
support. Sneaks through CI because it's a valid feature and will only
cause breakage on atomically challenged platforms (which we currently
aren't testing in CI).

Should we test atomically challenged in CI? Right now I don't think so,
at least not until we've made "normal" `no_std` CI better with the main
`bevy` crate as the test-case rather than each individual crate.
2025-01-23 21:47:21 +00:00
..
src Move hashbrown and foldhash out of bevy_utils (#17460) 2025-01-23 16:46:08 +00:00
Cargo.toml Fix Typo in bevy_platform_support's spin Feature (#17516) 2025-01-23 21:47:21 +00:00
README.md Create bevy_platform_support Crate (#17250) 2025-01-20 20:45:30 +00:00

Bevy Platform Support

License Crates.io Downloads Docs Discord

Rust is a fantastic multi-platform language with extensive support for modern targets through its standard library. However, some items within the standard library have alternatives that are better suited for Bevy and game engines in general. Additionally, to support embedded and other esoteric platforms, it's often necessary to shed reliance on std, making your crate no_std.

These needs are handled by this crate, bevy_platform_support. The goal of this crate is to provide alternatives and extensions to the Rust standard library which minimize friction when developing with and for Bevy across multiple platforms.

Getting Started

Like any dependency from crates.io, use cargo to add it to your Cargo.toml file:

cargo add bevy_platform_support

Now, instead of importing from std you can use bevy_platform_support for items it has alternative for. See the documentation for what items are available, and explanations for why you may want to use them.

no_std Support

By default, bevy_platform_support will activate the std feature, requiring access to the std crate for whichever platforms you're targeting. To use this crate on no_std platforms, disable default features:

bevy_platform_support = { version = "x.y.z", default-features = false }

Features

std (default)

Enables usage of the standard library. Note that where this crate has alternatives to the standard library that it considers better than what's provided, it will provide the alternative even when std is enabled. This is explicitly incompatible with no_std targets.

alloc (default)

Enables usage of the alloc crate. Note that this feature is automatically enabled when enabling std. This is compatible with most no_std targets, but not all.

portable-atomic

Switches to using portable-atomic as a backend for atomic types, such as Arc, AtomicU8, etc. You may need to enable this feature on platforms without full support for atomic types or certain operations, such as atomic CAS.

critical-section

Switches to using critical-section as a backend for synchronization. You may need to enable this feature on platforms with little to no support for atomic operations, and is often paired with the portable-atomic feature.