add rustc build flags reflection

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-07-24 23:01:00 +00:00
parent 936d2915e2
commit 2100618d47
14 changed files with 119 additions and 5 deletions

27
src/macros/rustc.rs Normal file
View 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()
}