add legacy mode and some cleanup

This commit is contained in:
KingKDot
2026-08-20 09:01:27 -05:00
parent 3b6adf7b97
commit a9b7ca67ea
14 changed files with 257 additions and 100 deletions
+21 -9
View File
@@ -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");
}