-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Add no_std support to bevy
#17955
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add no_std support to bevy
#17955
Conversation
_Possibly_ controversial, but support _should_ be relatively easy to maintain
|
I've removed the The way I see it, this isn't saying "we guarantee Bevy will work on |
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Surprisingly straightforward.
It might be useful to add a tiny overview of what isn't available with no_std yet to the release notes.
|
With #17570 merging this PR can be simplified (and it wouldn't successfully merge anyway since the |
|
Ok should be good to go! |
|
@bushrat011899 cam you get CI green, then bug me for a review and merge? Skimming this it looks fine. |
Original implementation uses outdated `futures-lite` version relying on unmaintained `instant`.
|
@alice-i-cecile Ok so the fix for the check-advisory was a little unfortunate. The problem is All tests that |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's unfortunate. I think I agree with your choice though, and the rest of this LGTM. Merging.
|
@bushrat011899 those CI failures look real <3 |
|
Ok so the issue here is we would like
Since I had to already inline This required some light refactoring for the relevant features, but it now means that |
|
Thank you to everyone involved with the authoring or reviewing of this PR! This work is relatively important and needs release notes! Head over to bevyengine/bevy-website#2001 if you'd like to help out. |
Objective
no_stdBevy #15460 (will open new issues for furtherno_stdefforts)no_stdsupport forbevyandbevy_internal#17715Solution
compile-check-no-stdfrom internalcitool since GitHub CI can now simply checkbevyitself nowbevyonthumbv6m-none-eabito ensureportable-atomicsupport is still valid 1Testing
Release Notes
Bevy now has support for
no_stddirectly from thebevycrate.Users can disable default features and enable a new
default_no_stdfeature instead, allowingbevyto be used inno_stdapplications and libraries.default_no_stdenables certain required features, such aslibmandcritical-section, and as many optional crates as possible (currently justbevy_state). For atomically-challenged platforms such as the Raspberry Pi Pico,portable-atomicwill be used automatically.For library authors, we recommend depending on
bevywithdefault-features = falseto allowstdandno_stdusers to both depend on your crate. Here are some recommended features a library crate may want to expose:While this is verbose, it gives the maximum control to end-users to decide how they wish to use Bevy on their platform.
We encourage library authors to experiment with
no_stdsupport. For libraries relying exclusively onbevyand no other dependencies, it may be as simple as adding#![no_std]to yourlib.rsand exposing features as above! Bevy can also provide manystdtypes, such asHashMap,Mutex, andInstanton all platforms. Seebevy::platform_supportfor details on what's available out of the box!Migration Guide
bevywith default features disabled, you may need to enable thestdandasync_executorfeatures.bevy_reflecthas had itsbevyfeature removed. If you were relying on this feature, simply enablesmallvecandsmol_strinstead.Footnotes
This may be controversial, since it could be interpreted as implying Bevy will maintain support for
thumbv6m-none-eabigoing forward. In reality, just likex86_64-unknown-none, this is a canary target to make it clear whenportable-atomicno longer works as intended (fixing atomic support on atomically challenged platforms). If a PR comes through and makes supporting this class of platforms impossible, then this CI task can be removed. I however wager this won't be a problem. ↩