aboutsummaryrefslogtreecommitdiff
path: root/rtic-macros/src/codegen/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rtic-macros/src/codegen/main.rs')
-rw-r--r--rtic-macros/src/codegen/main.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/rtic-macros/src/codegen/main.rs b/rtic-macros/src/codegen/main.rs
index 5612796..80f2cf6 100644
--- a/rtic-macros/src/codegen/main.rs
+++ b/rtic-macros/src/codegen/main.rs
@@ -1,4 +1,3 @@
-use super::{assertions, post_init, pre_init};
use crate::{
analyze::Analysis,
codegen::{bindings, util},
@@ -7,8 +6,12 @@ use crate::{
use proc_macro2::TokenStream as TokenStream2;
use quote::quote;
+use super::{assertions, extra_mods, post_init, pre_init};
+
/// Generates code for `fn main`
pub fn codegen(app: &App, analysis: &Analysis) -> TokenStream2 {
+ let extra_mods_stmts = extra_mods::codegen(app, analysis);
+
let assertion_stmts = assertions::codegen(app, analysis);
let pre_init_stmts = pre_init::codegen(app, analysis);
@@ -40,9 +43,18 @@ pub fn codegen(app: &App, analysis: &Analysis) -> TokenStream2 {
let main = util::suffixed("main");
let init_name = &app.init.name;
+
+ let init_args = if app.args.core {
+ quote!(core.into(), executors_size)
+ } else {
+ quote!(executors_size)
+ };
+
let msp_check = bindings::check_stack_overflow_before_init(app, analysis);
quote!(
+ #(#extra_mods_stmts)*
+
#[doc(hidden)]
#[no_mangle]
unsafe extern "C" fn #main() -> ! {
@@ -63,7 +75,7 @@ pub fn codegen(app: &App, analysis: &Analysis) -> TokenStream2 {
// Wrap late_init_stmts in a function to ensure that stack space is reclaimed.
__rtic_init_resources(||{
- let (shared_resources, local_resources) = #init_name(#init_name::Context::new(core.into(), executors_size));
+ let (shared_resources, local_resources) = #init_name(#init_name::Context::new(#init_args));
#(#post_init_stmts)*
});