crossbundle_derive/
lib.rs1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4use quote::quote;
5use syn::{parse_macro_input, ItemFn};
6
7fn crossbundle_main_logic(_attr: TokenStream, item: TokenStream) -> TokenStream {
8 let input = parse_macro_input!(item as ItemFn);
9 if input.sig.ident != "main" {
10 panic!("crossbundle_main can only be used on a function called 'main'")
11 }
12 TokenStream::from(quote! {
13 #[no_mangle]
14 #[cfg(target_os = "android")]
15 unsafe extern "C" fn ANativeActivity_onCreate(
16 activity: *mut std::os::raw::c_void,
17 saved_state: *mut std::os::raw::c_void,
18 saved_state_size: usize,
19 ) {
20 crossbow::ndk_glue::init(
21 activity as _,
22 saved_state as _,
23 saved_state_size as _,
24 main,
25 );
26 }
27
28 #[allow(unused)]
29 #input
30 })
31}
32
33#[proc_macro_attribute]
34pub fn crossbundle_main(attr: TokenStream, item: TokenStream) -> TokenStream {
35 crossbundle_main_logic(attr, item)
36}