aboutsummaryrefslogtreecommitdiff
path: root/embassy-macros/src/macros
diff options
context:
space:
mode:
authorJesse Braham <[email protected]>2023-05-16 09:34:38 -0700
committerJesse Braham <[email protected]>2023-05-16 09:37:25 -0700
commit4e9ed223a9c489ec75d2d928e26d5a83c2cdf5d4 (patch)
treeed26a470a327b98fbf4a4b56df9803f7ccc0d784 /embassy-macros/src/macros
parent56f2e0c9a02f6db9fe4e3a72a9b7fdd160a90aa8 (diff)
Allow for an optional user-defined entry macro when targeting RISC-V
Diffstat (limited to 'embassy-macros/src/macros')
-rw-r--r--embassy-macros/src/macros/main.rs22
1 files changed, 18 insertions, 4 deletions
diff --git a/embassy-macros/src/macros/main.rs b/embassy-macros/src/macros/main.rs
index 6ae77398d..5c099f68a 100644
--- a/embassy-macros/src/macros/main.rs
+++ b/embassy-macros/src/macros/main.rs
@@ -1,16 +1,30 @@
1use darling::FromMeta; 1use darling::FromMeta;
2use proc_macro2::TokenStream; 2use proc_macro2::TokenStream;
3use quote::quote; 3use quote::quote;
4use syn::{ReturnType, Type}; 4use syn::{Expr, ReturnType, Type};
5 5
6use crate::util::ctxt::Ctxt; 6use crate::util::ctxt::Ctxt;
7 7
8#[derive(Debug, FromMeta)] 8#[derive(Debug, FromMeta)]
9struct Args {} 9struct Args {
10 #[darling(default)]
11 entry: Option<String>,
12}
13
14pub fn riscv(args: syn::AttributeArgs) -> TokenStream {
15 let maybe_entry = match Args::from_list(&args) {
16 Ok(args) => args.entry,
17 Err(e) => return e.write_errors(),
18 };
19
20 let entry = maybe_entry.unwrap_or("riscv_rt::entry".into());
21 let entry = match Expr::from_string(&entry) {
22 Ok(expr) => expr,
23 Err(e) => return e.write_errors(),
24 };
10 25
11pub fn riscv() -> TokenStream {
12 quote! { 26 quote! {
13 #[riscv_rt::entry] 27 #[#entry]
14 fn main() -> ! { 28 fn main() -> ! {
15 let mut executor = ::embassy_executor::Executor::new(); 29 let mut executor = ::embassy_executor::Executor::new();
16 let executor = unsafe { __make_static(&mut executor) }; 30 let executor = unsafe { __make_static(&mut executor) };