-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
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_std
Bevy #15460 (will open new issues for furtherno_std
efforts)no_std
support forbevy
andbevy_internal
#17715Solution
compile-check-no-std
from internalci
tool since GitHub CI can now simply checkbevy
itself nowbevy
onthumbv6m-none-eabi
to ensureportable-atomic
support is still valid 1Testing
Release Notes
Bevy now has support for
no_std
directly from thebevy
crate.Users can disable default features and enable a new
default_no_std
feature instead, allowingbevy
to be used inno_std
applications and libraries.default_no_std
enables certain required features, such aslibm
andcritical-section
, and as many optional crates as possible (currently justbevy_state
). For atomically-challenged platforms such as the Raspberry Pi Pico,portable-atomic
will be used automatically.For library authors, we recommend depending on
bevy
withdefault-features = false
to allowstd
andno_std
users 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_std
support. For libraries relying exclusively onbevy
and no other dependencies, it may be as simple as adding#![no_std]
to yourlib.rs
and exposing features as above! Bevy can also provide manystd
types, such asHashMap
,Mutex
, andInstant
on all platforms. Seebevy::platform_support
for details on what's available out of the box!Migration Guide
bevy
with default features disabled, you may need to enable thestd
andasync_executor
features.bevy_reflect
has had itsbevy
feature removed. If you were relying on this feature, simply enablesmallvec
andsmol_str
instead.Footnotes
This may be controversial, since it could be interpreted as implying Bevy will maintain support for
thumbv6m-none-eabi
going forward. In reality, just likex86_64-unknown-none
, this is a canary target to make it clear whenportable-atomic
no 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. ↩