1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#![recursion_limit = "128"]
mod builder;
mod contexted;
mod host;
mod launchable;
mod parser;
use proc_macro::TokenStream;
#[proc_macro_attribute]
pub fn kernel(_attr: TokenStream, func: TokenStream) -> TokenStream {
let func: syn::ItemFn = syn::parse(func).expect("Not a function");
let ptx_str = builder::compile_tokens(&func).expect("Failed to compile to PTX");
host::func2caller(&ptx_str, &func).into()
}
#[proc_macro_derive(Contexted)]
pub fn contexted(input: TokenStream) -> TokenStream {
contexted::contexted(syn::parse(input).unwrap()).into()
}
#[proc_macro]
pub fn define_launchable(item: TokenStream) -> TokenStream {
launchable::generate(item.into()).into()
}