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
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