add rustc build flags reflection
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
936d2915e2
commit
2100618d47
14 changed files with 119 additions and 5 deletions
|
@ -1,5 +1,6 @@
|
|||
mod admin;
|
||||
mod cargo;
|
||||
mod rustc;
|
||||
mod utils;
|
||||
|
||||
use proc_macro::TokenStream;
|
||||
|
@ -11,3 +12,6 @@ pub fn admin_command_dispatch(args: TokenStream, input: TokenStream) -> TokenStr
|
|||
|
||||
#[proc_macro_attribute]
|
||||
pub fn cargo_manifest(args: TokenStream, input: TokenStream) -> TokenStream { cargo::manifest(args, input) }
|
||||
|
||||
#[proc_macro]
|
||||
pub fn rustc_flags_capture(args: TokenStream) -> TokenStream { rustc::flags_capture(args) }
|
||||
|
|
27
src/macros/rustc.rs
Normal file
27
src/macros/rustc.rs
Normal file
|
@ -0,0 +1,27 @@
|
|||
use proc_macro::TokenStream;
|
||||
use quote::quote;
|
||||
|
||||
pub(super) fn flags_capture(args: TokenStream) -> TokenStream {
|
||||
let cargo_crate_name = std::env::var("CARGO_CRATE_NAME");
|
||||
let crate_name = match cargo_crate_name.as_ref() {
|
||||
Err(_) => return args,
|
||||
Ok(crate_name) => crate_name.trim_start_matches("conduit_"),
|
||||
};
|
||||
|
||||
let flag = std::env::args().collect::<Vec<_>>();
|
||||
let ret = quote! {
|
||||
#[conduit_core::ctor]
|
||||
fn _set_rustc_flags() {
|
||||
let flags = &[#( #flag ),*];
|
||||
conduit_core::info::rustc::FLAGS.lock().expect("locked").insert(#crate_name, flags);
|
||||
}
|
||||
|
||||
// static strings have to be yanked on module unload
|
||||
#[conduit_core::dtor]
|
||||
fn _unset_rustc_flags() {
|
||||
conduit_core::info::rustc::FLAGS.lock().expect("locked").remove(#crate_name);
|
||||
}
|
||||
};
|
||||
|
||||
ret.into()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue