Add bevy_dylib to force dynamic linking of bevy (#808)
This easily improve compilation time by 2x
This commit is contained in:
parent
b113809fcd
commit
80a0448473
126
Cargo.toml
126
Cargo.toml
@ -3,102 +3,88 @@ name = "bevy"
|
|||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
authors = [
|
authors = [
|
||||||
"Bevy Contributors <bevyengine@gmail.com>",
|
"Bevy Contributors <bevyengine@gmail.com>",
|
||||||
"Carter Anderson <mcanders1@gmail.com>",
|
"Carter Anderson <mcanders1@gmail.com>",
|
||||||
]
|
]
|
||||||
description = "A refreshingly simple data-driven game engine and app framework"
|
|
||||||
homepage = "https://bevyengine.org"
|
|
||||||
repository = "https://github.com/bevyengine/bevy"
|
|
||||||
license = "MIT"
|
|
||||||
keywords = ["game", "engine", "gamedev", "graphics", "bevy"]
|
|
||||||
categories = ["game-engines", "graphics", "gui", "rendering"]
|
categories = ["game-engines", "graphics", "gui", "rendering"]
|
||||||
readme = "README.md"
|
description = "A refreshingly simple data-driven game engine and app framework"
|
||||||
exclude = ["assets/**/*", "tools/**/*", ".github/**/*", "crates/**/*"]
|
exclude = ["assets/**/*", "tools/**/*", ".github/**/*", "crates/**/*"]
|
||||||
|
homepage = "https://bevyengine.org"
|
||||||
|
keywords = ["game", "engine", "gamedev", "graphics", "bevy"]
|
||||||
|
license = "MIT"
|
||||||
|
repository = "https://github.com/bevyengine/bevy"
|
||||||
|
|
||||||
|
[workspace]
|
||||||
|
exclude = ["benches"]
|
||||||
|
members = ["crates/*", "crates/bevy_ecs/hecs", "examples/ios"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = [
|
default = [
|
||||||
"bevy_audio",
|
"bevy_audio",
|
||||||
"bevy_dynamic_plugin",
|
"bevy_dynamic_plugin",
|
||||||
"bevy_gilrs",
|
"bevy_gilrs",
|
||||||
"bevy_gltf",
|
"bevy_gltf",
|
||||||
"bevy_wgpu",
|
"bevy_wgpu",
|
||||||
"bevy_winit",
|
"bevy_winit",
|
||||||
"render",
|
"render",
|
||||||
"png",
|
"png",
|
||||||
"hdr",
|
"hdr",
|
||||||
"mp3",
|
"mp3",
|
||||||
"x11",
|
"x11",
|
||||||
]
|
]
|
||||||
|
|
||||||
profiler = ["bevy_ecs/profiler", "bevy_diagnostic/profiler"]
|
# Force dynamic linking, which improves iterative compile times
|
||||||
wgpu_trace = ["bevy_wgpu/trace"]
|
dynamic = ["bevy_dylib"]
|
||||||
|
|
||||||
# Rendering support
|
# Rendering support
|
||||||
render = ["bevy_pbr", "bevy_render", "bevy_sprite", "bevy_text", "bevy_ui"]
|
render = ["bevy_internal/bevy_pbr", "bevy_internal/bevy_render", "bevy_internal/bevy_sprite", "bevy_internal/bevy_text", "bevy_internal/bevy_ui"]
|
||||||
|
|
||||||
|
# Optional bevy crates
|
||||||
|
bevy_audio = ["bevy_internal/bevy_audio"]
|
||||||
|
bevy_dynamic_plugin = ["bevy_internal/bevy_dynamic_plugin"]
|
||||||
|
bevy_gilrs = ["bevy_internal/bevy_gilrs"]
|
||||||
|
bevy_gltf = ["bevy_internal/bevy_gltf"]
|
||||||
|
bevy_wgpu = ["bevy_internal/bevy_wgpu"]
|
||||||
|
bevy_winit = ["bevy_internal/bevy_winit"]
|
||||||
|
|
||||||
|
profiler = ["bevy_internal/profiler"]
|
||||||
|
wgpu_trace = ["bevy_internal/wgpu_trace"]
|
||||||
|
|
||||||
# Image format support for texture loading (PNG and HDR are enabled by default)
|
# Image format support for texture loading (PNG and HDR are enabled by default)
|
||||||
png = ["bevy_render/png"]
|
hdr = ["bevy_internal/hdr"]
|
||||||
hdr = ["bevy_render/hdr"]
|
png = ["bevy_internal/png"]
|
||||||
|
|
||||||
# Audio format support (MP3 is enabled by default)
|
# Audio format support (MP3 is enabled by default)
|
||||||
mp3 = ["bevy_audio/mp3"]
|
flac = ["bevy_internal/flac"]
|
||||||
flac = ["bevy_audio/flac"]
|
mp3 = ["bevy_internal/mp3"]
|
||||||
wav = ["bevy_audio/wav"]
|
vorbis = ["bevy_internal/vorbis"]
|
||||||
vorbis = ["bevy_audio/vorbis"]
|
wav = ["bevy_internal/wav"]
|
||||||
|
|
||||||
serialize = ["bevy_input/serialize"]
|
serialize = ["bevy_internal/serialize"]
|
||||||
|
|
||||||
# Display server protocol support (X11 is enabled by default)
|
# Display server protocol support (X11 is enabled by default)
|
||||||
wayland = ["bevy_winit/wayland"]
|
wayland = ["bevy_internal/wayland"]
|
||||||
x11 = ["bevy_winit/x11"]
|
x11 = ["bevy_internal/x11"]
|
||||||
|
|
||||||
[workspace]
|
|
||||||
members = ["crates/*", "crates/bevy_ecs/hecs", "examples/ios"]
|
|
||||||
exclude = ["benches"]
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
# bevy
|
bevy_dylib = {path = "crates/bevy_dylib", version = "0.3.0", default-features = false, optional = true}
|
||||||
bevy_app = { path = "crates/bevy_app", version = "0.3.0" }
|
bevy_internal = {path = "crates/bevy_internal", version = "0.3.0", default-features = false}
|
||||||
bevy_asset = { path = "crates/bevy_asset", version = "0.3.0" }
|
|
||||||
bevy_type_registry = { path = "crates/bevy_type_registry", version = "0.3.0" }
|
|
||||||
bevy_core = { path = "crates/bevy_core", version = "0.3.0" }
|
|
||||||
bevy_diagnostic = { path = "crates/bevy_diagnostic", version = "0.3.0" }
|
|
||||||
bevy_ecs = { path = "crates/bevy_ecs", version = "0.3.0" }
|
|
||||||
bevy_input = { path = "crates/bevy_input", version = "0.3.0" }
|
|
||||||
bevy_math = { path = "crates/bevy_math", version = "0.3.0" }
|
|
||||||
bevy_property = { path = "crates/bevy_property", version = "0.3.0" }
|
|
||||||
bevy_scene = { path = "crates/bevy_scene", version = "0.3.0" }
|
|
||||||
bevy_transform = { path = "crates/bevy_transform", version = "0.3.0" }
|
|
||||||
bevy_utils = { path = "crates/bevy_utils", version = "0.3.0" }
|
|
||||||
bevy_window = { path = "crates/bevy_window", version = "0.3.0" }
|
|
||||||
bevy_tasks = { path = "crates/bevy_tasks", version = "0.3.0" }
|
|
||||||
# bevy (optional)
|
|
||||||
bevy_audio = { path = "crates/bevy_audio", optional = true, version = "0.3.0" }
|
|
||||||
bevy_gltf = { path = "crates/bevy_gltf", optional = true, version = "0.3.0" }
|
|
||||||
bevy_pbr = { path = "crates/bevy_pbr", optional = true, version = "0.3.0" }
|
|
||||||
bevy_render = { path = "crates/bevy_render", optional = true, version = "0.3.0" }
|
|
||||||
bevy_dynamic_plugin = { path = "crates/bevy_dynamic_plugin", optional = true, version = "0.3.0" }
|
|
||||||
bevy_sprite = { path = "crates/bevy_sprite", optional = true, version = "0.3.0" }
|
|
||||||
bevy_text = { path = "crates/bevy_text", optional = true, version = "0.3.0" }
|
|
||||||
bevy_ui = { path = "crates/bevy_ui", optional = true, version = "0.3.0" }
|
|
||||||
bevy_wgpu = { path = "crates/bevy_wgpu", optional = true, version = "0.3.0" }
|
|
||||||
bevy_winit = { path = "crates/bevy_winit", optional = true, version = "0.3.0" }
|
|
||||||
bevy_gilrs = { path = "crates/bevy_gilrs", optional = true, version = "0.3.0" }
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rand = "0.7.3"
|
|
||||||
serde = { version = "1", features = ["derive"] }
|
|
||||||
log = "0.4"
|
|
||||||
ron = "0.6"
|
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
|
log = "0.4"
|
||||||
|
rand = "0.7.3"
|
||||||
|
ron = "0.6"
|
||||||
|
serde = {version = "1", features = ["derive"]}
|
||||||
|
|
||||||
# bevy (Android)
|
# bevy (Android)
|
||||||
[target.'cfg(target_os = "android")'.dependencies]
|
[target.'cfg(target_os = "android")'.dependencies]
|
||||||
ndk-glue = { version = "0.2", features = ["logger"] }
|
|
||||||
android_logger = "0.9"
|
android_logger = "0.9"
|
||||||
|
ndk-glue = {version = "0.2", features = ["logger"]}
|
||||||
|
|
||||||
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
|
||||||
console_error_panic_hook = "0.1.6"
|
console_error_panic_hook = "0.1.6"
|
||||||
console_log = { version = "0.2", features = ["color"] }
|
console_log = {version = "0.2", features = ["color"]}
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "hello_world"
|
name = "hello_world"
|
||||||
@ -333,11 +319,11 @@ path = "examples/wasm/assets_wasm.rs"
|
|||||||
required-features = ["bevy_winit"]
|
required-features = ["bevy_winit"]
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
|
crate-type = ["cdylib"]
|
||||||
name = "android"
|
name = "android"
|
||||||
path = "examples/android/android.rs"
|
path = "examples/android/android.rs"
|
||||||
crate-type = ["cdylib"]
|
|
||||||
|
|
||||||
[package.metadata.android]
|
[package.metadata.android]
|
||||||
build_targets = ["aarch64-linux-android", "armv7-linux-androideabi"]
|
build_targets = ["aarch64-linux-android", "armv7-linux-androideabi"]
|
||||||
target_sdk_version = 29
|
|
||||||
min_sdk_version = 16
|
min_sdk_version = 16
|
||||||
|
target_sdk_version = 29
|
||||||
|
@ -17,7 +17,7 @@ proc-macro = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
Inflector = { version = "0.11.4", default-features = false }
|
Inflector = { version = "0.11.4", default-features = false }
|
||||||
proc-macro-crate = "0.1.5"
|
find-crate = "0.5"
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
syn = "1.0"
|
syn = "1.0"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
use find_crate::Manifest;
|
||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use proc_macro_crate::crate_name;
|
|
||||||
use syn::{Attribute, Path};
|
use syn::{Attribute, Path};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -12,13 +12,13 @@ pub struct Modules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Modules {
|
impl Modules {
|
||||||
pub fn meta() -> Modules {
|
pub fn meta(name: &str) -> Modules {
|
||||||
Modules {
|
Modules {
|
||||||
bevy_asset: "bevy::asset".to_string(),
|
bevy_asset: format!("{}::asset", name),
|
||||||
bevy_render: "bevy::render".to_string(),
|
bevy_render: format!("{}::render", name),
|
||||||
bevy_core: "bevy::core".to_string(),
|
bevy_core: format!("{}::core", name),
|
||||||
bevy_app: "bevy::app".to_string(),
|
bevy_app: format!("{}::app", name),
|
||||||
bevy_type_registry: "bevy::type_registry".to_string(),
|
bevy_type_registry: format!("{}::type_registry", name),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,19 +33,21 @@ impl Modules {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn use_meta() -> bool {
|
fn get_meta() -> Option<Modules> {
|
||||||
crate_name("bevy").is_ok()
|
let manifest = Manifest::new().unwrap();
|
||||||
|
if let Some(package) = manifest.find(|name| name == "bevy") {
|
||||||
|
Some(Modules::meta(&package.name))
|
||||||
|
} else if let Some(package) = manifest.find(|name| name == "bevy_internal") {
|
||||||
|
Some(Modules::meta(&package.name))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const AS_CRATE_ATTRIBUTE_NAME: &str = "as_crate";
|
const AS_CRATE_ATTRIBUTE_NAME: &str = "as_crate";
|
||||||
|
|
||||||
pub fn get_modules(attributes: &[Attribute]) -> Modules {
|
pub fn get_modules(attributes: &[Attribute]) -> Modules {
|
||||||
let mut modules = if use_meta() {
|
let mut modules = get_meta().unwrap_or_else(Modules::external);
|
||||||
Modules::meta()
|
|
||||||
} else {
|
|
||||||
Modules::external()
|
|
||||||
};
|
|
||||||
|
|
||||||
for attribute in attributes.iter() {
|
for attribute in attributes.iter() {
|
||||||
if *attribute.path.get_ident().as_ref().unwrap() == AS_CRATE_ATTRIBUTE_NAME {
|
if *attribute.path.get_ident().as_ref().unwrap() == AS_CRATE_ATTRIBUTE_NAME {
|
||||||
let value = attribute.tokens.to_string();
|
let value = attribute.tokens.to_string();
|
||||||
|
19
crates/bevy_dylib/Cargo.toml
Normal file
19
crates/bevy_dylib/Cargo.toml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
[package]
|
||||||
|
name = "bevy_dylib"
|
||||||
|
version = "0.3.0"
|
||||||
|
edition = "2018"
|
||||||
|
authors = [
|
||||||
|
"Bevy Contributors <bevyengine@gmail.com>",
|
||||||
|
"Carter Anderson <mcanders1@gmail.com>",
|
||||||
|
]
|
||||||
|
description = "Force the Bevy Engine to be dynamically linked for faster linking"
|
||||||
|
homepage = "https://bevyengine.org"
|
||||||
|
repository = "https://github.com/bevyengine/bevy"
|
||||||
|
license = "MIT"
|
||||||
|
keywords = ["bevy"]
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["dylib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bevy_internal = { path = "../bevy_internal", version = "0.3.0", default-features = false }
|
12
crates/bevy_dylib/src/lib.rs
Normal file
12
crates/bevy_dylib/src/lib.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//! Forces dynamic linking of Bevy.
|
||||||
|
//!
|
||||||
|
//! Dynamically linking Bevy makes the "link" step much faster. This can be achieved by adding
|
||||||
|
//! `bevy_dylib` as dependency and `#[allow(unused_imports)] use bevy_dylib` to `main.rs`. It is
|
||||||
|
//! recommended to disable the `bevy_dylib` dependency in release mode by adding
|
||||||
|
//! `#[cfg(debug_assertions)]` to the `use` statement. Otherwise you will have to ship `libstd.so`
|
||||||
|
//! and `libbevy_dylib.so` with your game.
|
||||||
|
|
||||||
|
// Force linking of the main bevy crate
|
||||||
|
#[allow(unused_imports)]
|
||||||
|
#[allow(clippy::single_component_path_imports)]
|
||||||
|
use bevy_internal;
|
@ -13,4 +13,4 @@ proc-macro = true
|
|||||||
syn = "1.0"
|
syn = "1.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
proc-macro-crate = "0.1.5"
|
find-crate = "0.5"
|
@ -18,9 +18,9 @@ extern crate proc_macro;
|
|||||||
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
|
use find_crate::Manifest;
|
||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use proc_macro2::{Span, TokenStream as TokenStream2};
|
use proc_macro2::{Span, TokenStream as TokenStream2};
|
||||||
use proc_macro_crate::crate_name;
|
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
use syn::{
|
use syn::{
|
||||||
parse::ParseStream, parse_macro_input, Data, DataStruct, DeriveInput, Error, Field, Fields,
|
parse::ParseStream, parse_macro_input, Data, DataStruct, DeriveInput, Error, Field, Fields,
|
||||||
@ -54,12 +54,13 @@ fn derive_bundle_(input: DeriveInput) -> Result<TokenStream2> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
let (tys, field_members) = struct_fields(&data.fields);
|
let (tys, field_members) = struct_fields(&data.fields);
|
||||||
let path_str = if crate_name("bevy").is_ok() {
|
let manifest = Manifest::new().unwrap();
|
||||||
"bevy::ecs"
|
let path_str = if let Some(package) = manifest.find(|name| name == "bevy") {
|
||||||
} else if crate_name("bevy_ecs").is_ok() {
|
format!("{}::ecs", package.name)
|
||||||
"bevy_ecs"
|
} else if let Some(package) = manifest.find(|name| name == "bevy_ecs") {
|
||||||
|
package.name
|
||||||
} else {
|
} else {
|
||||||
"bevy_hecs"
|
"bevy_hecs".to_string()
|
||||||
};
|
};
|
||||||
let crate_path: Path = syn::parse(path_str.parse::<TokenStream>().unwrap()).unwrap();
|
let crate_path: Path = syn::parse(path_str.parse::<TokenStream>().unwrap()).unwrap();
|
||||||
let field_idents = member_as_idents(&field_members);
|
let field_idents = member_as_idents(&field_members);
|
||||||
@ -354,10 +355,11 @@ pub fn derive_system_param(input: TokenStream) -> TokenStream {
|
|||||||
_ => panic!("expected a struct with named fields"),
|
_ => panic!("expected a struct with named fields"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let path_str = if crate_name("bevy").is_ok() {
|
let manifest = Manifest::new().unwrap();
|
||||||
"bevy::ecs"
|
let path_str = if let Some(package) = manifest.find(|name| name == "bevy") {
|
||||||
|
format!("{}::ecs", package.name)
|
||||||
} else {
|
} else {
|
||||||
"bevy_ecs"
|
"bevy_ecs".to_string()
|
||||||
};
|
};
|
||||||
let path: Path = syn::parse(path_str.parse::<TokenStream>().unwrap()).unwrap();
|
let path: Path = syn::parse(path_str.parse::<TokenStream>().unwrap()).unwrap();
|
||||||
|
|
||||||
|
64
crates/bevy_internal/Cargo.toml
Normal file
64
crates/bevy_internal/Cargo.toml
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
[package]
|
||||||
|
name = "bevy_internal"
|
||||||
|
version = "0.3.0"
|
||||||
|
edition = "2018"
|
||||||
|
authors = [
|
||||||
|
"Bevy Contributors <bevyengine@gmail.com>",
|
||||||
|
"Carter Anderson <mcanders1@gmail.com>",
|
||||||
|
]
|
||||||
|
description = "An internal Bevy crate used to facilitate optional dynamic linking via the 'dynamic' feature"
|
||||||
|
homepage = "https://bevyengine.org"
|
||||||
|
repository = "https://github.com/bevyengine/bevy"
|
||||||
|
license = "MIT"
|
||||||
|
keywords = ["game", "engine", "gamedev", "graphics", "bevy"]
|
||||||
|
categories = ["game-engines", "graphics", "gui", "rendering"]
|
||||||
|
|
||||||
|
[features]
|
||||||
|
profiler = ["bevy_ecs/profiler", "bevy_diagnostic/profiler"]
|
||||||
|
wgpu_trace = ["bevy_wgpu/trace"]
|
||||||
|
|
||||||
|
# Image format support for texture loading (PNG and HDR are enabled by default)
|
||||||
|
hdr = ["bevy_render/hdr"]
|
||||||
|
png = ["bevy_render/png"]
|
||||||
|
|
||||||
|
# Audio format support (MP3 is enabled by default)
|
||||||
|
flac = ["bevy_audio/flac"]
|
||||||
|
mp3 = ["bevy_audio/mp3"]
|
||||||
|
vorbis = ["bevy_audio/vorbis"]
|
||||||
|
wav = ["bevy_audio/wav"]
|
||||||
|
|
||||||
|
serialize = ["bevy_input/serialize"]
|
||||||
|
|
||||||
|
# Display server protocol support (X11 is enabled by default)
|
||||||
|
wayland = ["bevy_winit/wayland"]
|
||||||
|
x11 = ["bevy_winit/x11"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# bevy
|
||||||
|
bevy_app = { path = "../bevy_app", version = "0.3.0" }
|
||||||
|
bevy_asset = { path = "../bevy_asset", version = "0.3.0" }
|
||||||
|
bevy_type_registry = { path = "../bevy_type_registry", version = "0.3.0" }
|
||||||
|
bevy_core = { path = "../bevy_core", version = "0.3.0" }
|
||||||
|
bevy_diagnostic = { path = "../bevy_diagnostic", version = "0.3.0" }
|
||||||
|
bevy_ecs = { path = "../bevy_ecs", version = "0.3.0" }
|
||||||
|
bevy_input = { path = "../bevy_input", version = "0.3.0" }
|
||||||
|
bevy_math = { path = "../bevy_math", version = "0.3.0" }
|
||||||
|
bevy_property = { path = "../bevy_property", version = "0.3.0" }
|
||||||
|
bevy_scene = { path = "../bevy_scene", version = "0.3.0" }
|
||||||
|
bevy_transform = { path = "../bevy_transform", version = "0.3.0" }
|
||||||
|
bevy_utils = { path = "../bevy_utils", version = "0.3.0" }
|
||||||
|
bevy_window = { path = "../bevy_window", version = "0.3.0" }
|
||||||
|
bevy_tasks = { path = "../bevy_tasks", version = "0.3.0" }
|
||||||
|
# bevy (optional)
|
||||||
|
bevy_audio = { path = "../bevy_audio", optional = true, version = "0.3.0" }
|
||||||
|
bevy_gltf = { path = "../bevy_gltf", optional = true, version = "0.3.0" }
|
||||||
|
bevy_pbr = { path = "../bevy_pbr", optional = true, version = "0.3.0" }
|
||||||
|
bevy_render = { path = "../bevy_render", optional = true, version = "0.3.0" }
|
||||||
|
bevy_dynamic_plugin = { path = "../bevy_dynamic_plugin", optional = true, version = "0.3.0" }
|
||||||
|
bevy_sprite = { path = "../bevy_sprite", optional = true, version = "0.3.0" }
|
||||||
|
bevy_text = { path = "../bevy_text", optional = true, version = "0.3.0" }
|
||||||
|
bevy_ui = { path = "../bevy_ui", optional = true, version = "0.3.0" }
|
||||||
|
bevy_wgpu = { path = "../bevy_wgpu", optional = true, version = "0.3.0" }
|
||||||
|
bevy_winit = { path = "../bevy_winit", optional = true, version = "0.3.0" }
|
||||||
|
bevy_gilrs = { path = "../bevy_gilrs", optional = true, version = "0.3.0" }
|
||||||
|
|
133
crates/bevy_internal/src/lib.rs
Normal file
133
crates/bevy_internal/src/lib.rs
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
/// `use bevy::prelude::*;` to import common components, bundles, and plugins.
|
||||||
|
pub mod prelude;
|
||||||
|
|
||||||
|
mod default_plugins;
|
||||||
|
pub use default_plugins::*;
|
||||||
|
|
||||||
|
pub mod app {
|
||||||
|
//! Build bevy apps, create plugins, and read events.
|
||||||
|
pub use bevy_app::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod asset {
|
||||||
|
//! Load and store assets and resources for Apps.
|
||||||
|
pub use bevy_asset::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod core {
|
||||||
|
//! Contains core plugins and utilities for time.
|
||||||
|
pub use bevy_core::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod diagnostic {
|
||||||
|
//! Useful diagnostic plugins and types for bevy apps.
|
||||||
|
pub use bevy_diagnostic::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod ecs {
|
||||||
|
//! Bevy's entity-component-system.
|
||||||
|
pub use bevy_ecs::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod input {
|
||||||
|
//! Resources and events for inputs, e.g. mouse/keyboard, touch, gamepads, etc.
|
||||||
|
pub use bevy_input::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod math {
|
||||||
|
//! Math types (Vec3, Mat4, Quat, etc) and helpers.
|
||||||
|
pub use bevy_math::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod property {
|
||||||
|
//! Dynamically interact with struct fields and names.
|
||||||
|
pub use bevy_property::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod scene {
|
||||||
|
//! Save/load collections of entities and components to/from file.
|
||||||
|
pub use bevy_scene::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod tasks {
|
||||||
|
//! Pools for async, IO, and compute tasks.
|
||||||
|
pub use bevy_tasks::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod transform {
|
||||||
|
//! Local and global transforms (e.g. translation, scale, rotation).
|
||||||
|
pub use bevy_transform::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod type_registry {
|
||||||
|
//! Registered types and components can be used when loading scenes.
|
||||||
|
pub use bevy_type_registry::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod utils {
|
||||||
|
pub use bevy_utils::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub mod window {
|
||||||
|
//! Configuration, creation, and management of one or more windows.
|
||||||
|
pub use bevy_window::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_audio")]
|
||||||
|
pub mod audio {
|
||||||
|
//! Provides types and plugins for audio playback.
|
||||||
|
pub use bevy_audio::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_gltf")]
|
||||||
|
pub mod gltf {
|
||||||
|
//! Support for GLTF file loading.
|
||||||
|
pub use bevy_gltf::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_pbr")]
|
||||||
|
pub mod pbr {
|
||||||
|
//! Physically based rendering.
|
||||||
|
//! **Note**: true PBR has not yet been implemented; the name `pbr` is aspirational.
|
||||||
|
pub use bevy_pbr::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_render")]
|
||||||
|
pub mod render {
|
||||||
|
//! Cameras, meshes, textures, shaders, and pipelines.
|
||||||
|
pub use bevy_render::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_sprite")]
|
||||||
|
pub mod sprite {
|
||||||
|
//! Items for sprites, rects, texture atlases, etc.
|
||||||
|
pub use bevy_sprite::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_text")]
|
||||||
|
pub mod text {
|
||||||
|
//! Text drawing, styling, and font assets.
|
||||||
|
pub use bevy_text::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_ui")]
|
||||||
|
pub mod ui {
|
||||||
|
//! User interface components and widgets.
|
||||||
|
pub use bevy_ui::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_winit")]
|
||||||
|
pub mod winit {
|
||||||
|
pub use bevy_winit::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_wgpu")]
|
||||||
|
pub mod wgpu {
|
||||||
|
//! A render backend utilizing [wgpu](https://github.com/gfx-rs/wgpu-rs).
|
||||||
|
pub use bevy_wgpu::*;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy_dynamic_plugin")]
|
||||||
|
pub mod dynamic_plugin {
|
||||||
|
pub use bevy_dynamic_plugin::*;
|
||||||
|
}
|
@ -19,4 +19,4 @@ proc-macro = true
|
|||||||
syn = "1.0"
|
syn = "1.0"
|
||||||
proc-macro2 = "1.0"
|
proc-macro2 = "1.0"
|
||||||
quote = "1.0"
|
quote = "1.0"
|
||||||
proc-macro-crate = "0.1.5"
|
find-crate = "0.5"
|
||||||
|
@ -2,9 +2,9 @@ extern crate proc_macro;
|
|||||||
|
|
||||||
mod modules;
|
mod modules;
|
||||||
|
|
||||||
|
use find_crate::Manifest;
|
||||||
use modules::{get_modules, get_path};
|
use modules::{get_modules, get_path};
|
||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use proc_macro_crate::crate_name;
|
|
||||||
use quote::quote;
|
use quote::quote;
|
||||||
use syn::{
|
use syn::{
|
||||||
parse::{Parse, ParseStream},
|
parse::{Parse, ParseStream},
|
||||||
@ -344,13 +344,15 @@ impl Parse for PropertyDef {
|
|||||||
pub fn impl_property(input: TokenStream) -> TokenStream {
|
pub fn impl_property(input: TokenStream) -> TokenStream {
|
||||||
let property_def = parse_macro_input!(input as PropertyDef);
|
let property_def = parse_macro_input!(input as PropertyDef);
|
||||||
|
|
||||||
let bevy_property_path = get_path(if crate_name("bevy").is_ok() {
|
let manifest = Manifest::new().unwrap();
|
||||||
"bevy::property"
|
let crate_path = if let Some(package) = manifest.find(|name| name == "bevy") {
|
||||||
} else if crate_name("bevy_property").is_ok() {
|
format!("{}::property", package.name)
|
||||||
"bevy_property"
|
} else if let Some(package) = manifest.find(|name| name == "bevy_property") {
|
||||||
|
package.name
|
||||||
} else {
|
} else {
|
||||||
"crate"
|
"crate".to_string()
|
||||||
});
|
};
|
||||||
|
let bevy_property_path = get_path(&crate_path);
|
||||||
|
|
||||||
let (impl_generics, ty_generics, where_clause) = property_def.generics.split_for_impl();
|
let (impl_generics, ty_generics, where_clause) = property_def.generics.split_for_impl();
|
||||||
let ty = &property_def.type_name;
|
let ty = &property_def.type_name;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
use find_crate::Manifest;
|
||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use proc_macro_crate::crate_name;
|
|
||||||
use syn::Path;
|
use syn::Path;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -8,9 +8,9 @@ pub struct Modules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Modules {
|
impl Modules {
|
||||||
pub fn meta() -> Modules {
|
pub fn meta(name: &str) -> Modules {
|
||||||
Modules {
|
Modules {
|
||||||
bevy_property: "bevy::property".to_string(),
|
bevy_property: format!("{}::property", name),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,16 +21,19 @@ impl Modules {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn use_meta() -> bool {
|
fn get_meta() -> Option<Modules> {
|
||||||
crate_name("bevy").is_ok()
|
let manifest = Manifest::new().unwrap();
|
||||||
|
if let Some(package) = manifest.find(|name| name == "bevy") {
|
||||||
|
Some(Modules::meta(&package.name))
|
||||||
|
} else if let Some(package) = manifest.find(|name| name == "bevy_internal") {
|
||||||
|
Some(Modules::meta(&package.name))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_modules() -> Modules {
|
pub fn get_modules() -> Modules {
|
||||||
if use_meta() {
|
get_meta().unwrap_or_else(Modules::external)
|
||||||
Modules::meta()
|
|
||||||
} else {
|
|
||||||
Modules::external()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_path(path_str: &str) -> Path {
|
pub fn get_path(path_str: &str) -> Path {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
use bevy::prelude::*;
|
use bevy::{
|
||||||
use bevy_input::gamepad::{Gamepad, GamepadButton, GamepadEvent, GamepadEventType};
|
input::gamepad::{Gamepad, GamepadButton, GamepadEvent, GamepadEventType},
|
||||||
use bevy_utils::HashSet;
|
prelude::*,
|
||||||
|
utils::HashSet,
|
||||||
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
use bevy::prelude::*;
|
use bevy::{
|
||||||
use bevy_input::gamepad::{GamepadEvent, GamepadEventType};
|
input::gamepad::{GamepadEvent, GamepadEventType},
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
|
137
src/lib.rs
137
src/lib.rs
@ -39,136 +39,9 @@
|
|||||||
html_favicon_url = "https://bevyengine.org/assets/icon.png"
|
html_favicon_url = "https://bevyengine.org/assets/icon.png"
|
||||||
)]
|
)]
|
||||||
|
|
||||||
/// `use bevy::prelude::*;` to import common components, bundles, and plugins.
|
pub use bevy_internal::*;
|
||||||
pub mod prelude;
|
|
||||||
|
|
||||||
mod default_plugins;
|
#[cfg(feature = "dynamic")]
|
||||||
pub use default_plugins::*;
|
#[allow(unused_imports)]
|
||||||
|
#[allow(clippy::single_component_path_imports)]
|
||||||
pub mod app {
|
use bevy_dylib;
|
||||||
//! Build bevy apps, create plugins, and read events.
|
|
||||||
pub use bevy_app::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod asset {
|
|
||||||
//! Load and store assets and resources for Apps.
|
|
||||||
pub use bevy_asset::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod core {
|
|
||||||
//! Contains core plugins and utilities for time.
|
|
||||||
pub use bevy_core::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod diagnostic {
|
|
||||||
//! Useful diagnostic plugins and types for bevy apps.
|
|
||||||
pub use bevy_diagnostic::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod ecs {
|
|
||||||
//! Bevy's entity-component-system.
|
|
||||||
pub use bevy_ecs::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod input {
|
|
||||||
//! Resources and events for inputs, e.g. mouse/keyboard, touch, gamepads, etc.
|
|
||||||
pub use bevy_input::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod math {
|
|
||||||
//! Math types (Vec3, Mat4, Quat, etc) and helpers.
|
|
||||||
pub use bevy_math::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod property {
|
|
||||||
//! Dynamically interact with struct fields and names.
|
|
||||||
pub use bevy_property::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod scene {
|
|
||||||
//! Save/load collections of entities and components to/from file.
|
|
||||||
pub use bevy_scene::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod tasks {
|
|
||||||
//! Pools for async, IO, and compute tasks.
|
|
||||||
pub use bevy_tasks::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod transform {
|
|
||||||
//! Local and global transforms (e.g. translation, scale, rotation).
|
|
||||||
pub use bevy_transform::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod type_registry {
|
|
||||||
//! Registered types and components can be used when loading scenes.
|
|
||||||
pub use bevy_type_registry::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod utils {
|
|
||||||
pub use bevy_utils::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod window {
|
|
||||||
//! Configuration, creation, and management of one or more windows.
|
|
||||||
pub use bevy_window::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_audio")]
|
|
||||||
pub mod audio {
|
|
||||||
//! Provides types and plugins for audio playback.
|
|
||||||
pub use bevy_audio::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_gltf")]
|
|
||||||
pub mod gltf {
|
|
||||||
//! Support for GLTF file loading.
|
|
||||||
pub use bevy_gltf::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_pbr")]
|
|
||||||
pub mod pbr {
|
|
||||||
//! Physically based rendering.
|
|
||||||
//! **Note**: true PBR has not yet been implemented; the name `pbr` is aspirational.
|
|
||||||
pub use bevy_pbr::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_render")]
|
|
||||||
pub mod render {
|
|
||||||
//! Cameras, meshes, textures, shaders, and pipelines.
|
|
||||||
pub use bevy_render::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_sprite")]
|
|
||||||
pub mod sprite {
|
|
||||||
//! Items for sprites, rects, texture atlases, etc.
|
|
||||||
pub use bevy_sprite::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_text")]
|
|
||||||
pub mod text {
|
|
||||||
//! Text drawing, styling, and font assets.
|
|
||||||
pub use bevy_text::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_ui")]
|
|
||||||
pub mod ui {
|
|
||||||
//! User interface components and widgets.
|
|
||||||
pub use bevy_ui::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_winit")]
|
|
||||||
pub mod winit {
|
|
||||||
pub use bevy_winit::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_wgpu")]
|
|
||||||
pub mod wgpu {
|
|
||||||
//! A render backend utilizing [wgpu](https://github.com/gfx-rs/wgpu-rs).
|
|
||||||
pub use bevy_wgpu::*;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "bevy_dynamic_plugin")]
|
|
||||||
pub mod dynamic_plugin {
|
|
||||||
pub use bevy_dynamic_plugin::*;
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user