Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_derive/src/bevy_main.rs
6598 views
1
use proc_macro::TokenStream;
2
use quote::quote;
3
use syn::{parse_macro_input, ItemFn};
4
5
pub fn bevy_main(_attr: TokenStream, item: TokenStream) -> TokenStream {
6
let input = parse_macro_input!(item as ItemFn);
7
assert_eq!(
8
input.sig.ident, "main",
9
"`bevy_main` can only be used on a function called 'main'."
10
);
11
12
TokenStream::from(quote! {
13
// SAFETY: `#[bevy_main]` should only be placed on a single `main` function
14
// TODO: Potentially make `bevy_main` and unsafe attribute as there is a safety
15
// guarantee required from the caller.
16
#[unsafe(no_mangle)]
17
#[cfg(target_os = "android")]
18
fn android_main(android_app: bevy::android::android_activity::AndroidApp) {
19
let _ = bevy::android::ANDROID_APP.set(android_app);
20
main();
21
}
22
23
#[allow(unused)]
24
#input
25
})
26
}
27
28