mirror of
https://github.com/bevyengine/bevy
synced 2024-12-19 01:23:09 +00:00
72f096c91e
# Objective - Contributes to #15460 ## Solution - Added the following features: - `std` (default) - `async_executor` (default) - `edge_executor` - `critical-section` - `portable-atomic` - Added [`edge-executor`](https://crates.io/crates/edge-executor) as a `no_std` alternative to `async-executor`. - Updated the `single_threaded_task_pool` to work in `no_std` environments by gating its reliance on `thread_local`. ## Testing - Added to `compile-check-no-std` CI command ## Notes - In previous iterations of this PR, a custom `async-executor` alternative was vendored in. This raised concerns around maintenance and testing. In this iteration, an existing version of that same vendoring is now used, but _only_ in `no_std` contexts. For existing `std` contexts, the original `async-executor` is used. - Due to the way statics work, certain `TaskPool` operations have added restrictions around `Send`/`Sync` in `no_std`. This is because there isn't a straightforward way to create a thread-local in `no_std`. If these added constraints pose an issue we can revisit this at a later date. - If a user enables both the `async_executor` and `edge_executor` features, we will default to using `async-executor`. Since enabling `async_executor` requires `std`, we can safely assume we are in an `std` context and use the original library. --------- Co-authored-by: Mike <2180432+hymm@users.noreply.github.com> Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
77 lines
2.1 KiB
TOML
77 lines
2.1 KiB
TOML
[package]
|
|
name = "bevy_tasks"
|
|
version = "0.15.0-dev"
|
|
edition = "2021"
|
|
description = "A task executor for Bevy Engine"
|
|
homepage = "https://bevyengine.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["bevy"]
|
|
|
|
[features]
|
|
default = ["std", "async_executor"]
|
|
std = [
|
|
"futures-lite/std",
|
|
"async-task/std",
|
|
"spin/std",
|
|
"edge-executor?/std",
|
|
"portable-atomic-util?/std",
|
|
]
|
|
multi_threaded = ["std", "dep:async-channel", "dep:concurrent-queue"]
|
|
async_executor = ["std", "dep:async-executor"]
|
|
edge_executor = ["dep:edge-executor"]
|
|
critical-section = [
|
|
"dep:critical-section",
|
|
"edge-executor?/critical-section",
|
|
"portable-atomic?/critical-section",
|
|
]
|
|
portable-atomic = [
|
|
"dep:portable-atomic",
|
|
"dep:portable-atomic-util",
|
|
"edge-executor?/portable-atomic",
|
|
"async-task/portable-atomic",
|
|
"spin/portable_atomic",
|
|
]
|
|
|
|
[dependencies]
|
|
futures-lite = { version = "2.0.1", default-features = false, features = [
|
|
"alloc",
|
|
] }
|
|
async-task = { version = "4.4.0", default-features = false }
|
|
spin = { version = "0.9.8", default-features = false, features = [
|
|
"spin_mutex",
|
|
"rwlock",
|
|
"once",
|
|
] }
|
|
derive_more = { version = "1", default-features = false, features = [
|
|
"deref",
|
|
"deref_mut",
|
|
] }
|
|
|
|
async-executor = { version = "1.11", optional = true }
|
|
edge-executor = { version = "0.4.1", default-features = false, optional = true }
|
|
async-channel = { version = "2.3.0", optional = true }
|
|
async-io = { version = "2.0.0", optional = true }
|
|
concurrent-queue = { version = "2.0.0", optional = true }
|
|
critical-section = { version = "1.2.0", optional = true }
|
|
portable-atomic = { version = "1", default-features = false, features = [
|
|
"fallback",
|
|
], optional = true }
|
|
portable-atomic-util = { version = "0.2.4", features = [
|
|
"alloc",
|
|
], optional = true }
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
|
wasm-bindgen-futures = "0.4"
|
|
pin-project = "1"
|
|
futures-channel = "0.3"
|
|
|
|
[dev-dependencies]
|
|
web-time = { version = "1.1" }
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["-Zunstable-options", "--generate-link-to-definition"]
|
|
all-features = true
|