add legacy mode and some cleanup
This commit is contained in:
@@ -31,16 +31,27 @@ fn main() {
|
||||
}
|
||||
|
||||
fn generate_loader_entry() {
|
||||
let seed = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_nanos() as u64
|
||||
^ (std::process::id() as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15);
|
||||
let name = format!("x{:06x}", seed & 0xFFFF_FF);
|
||||
let name = match std::env::var("BACKSTAGE_LOADER_EXPORT").ok().as_deref() {
|
||||
Some("ReflectiveLoader") => "ReflectiveLoader".to_string(),
|
||||
Some(value) => panic!("unsupported BACKSTAGE_LOADER_EXPORT value: {value}"),
|
||||
None => {
|
||||
let seed = std::env::var("BACKSTAGE_LOADER_SEED")
|
||||
.ok()
|
||||
.and_then(|value| value.parse::<u64>().ok())
|
||||
.unwrap_or_else(|| {
|
||||
SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_nanos() as u64
|
||||
^ (std::process::id() as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15)
|
||||
});
|
||||
format!("x{:06x}", seed & 0xFFFF_FF)
|
||||
}
|
||||
};
|
||||
|
||||
let src = format!(
|
||||
"// Generated by build.rs — do not edit.\n\
|
||||
// Randomized per-build reflective loader export name.\n\
|
||||
// Version-selected reflective loader export name.\n\
|
||||
pub(crate) const LOADER_EXPORT: &[u8] = b\"{name}\\0\";\n\
|
||||
\n\
|
||||
#[unsafe(no_mangle)]\n\
|
||||
@@ -52,5 +63,6 @@ fn generate_loader_entry() {
|
||||
let out_dir = std::env::var("OUT_DIR").unwrap();
|
||||
std::fs::write(std::path::Path::new(&out_dir).join("loader_entry.rs"), src)
|
||||
.expect("failed to write loader_entry.rs");
|
||||
println!("cargo:rerun-if-changed=loader_entry.rs");
|
||||
}
|
||||
println!("cargo:rerun-if-env-changed=BACKSTAGE_LOADER_EXPORT");
|
||||
println!("cargo:rerun-if-env-changed=BACKSTAGE_LOADER_SEED");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user