Repository navigation
Expand file tree
/
Copy pathbuild.rs
More file actions
95 lines (85 loc) · 4.01 KB
/
Copy pathbuild.rs
File metadata and controls
95 lines (85 loc) · 4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
fn main() {
#[cfg(windows)]
{
// Ensure the Windows 10 SDK rc.exe path is present in PATH for winres
if let Ok(path) = std::env::var("PATH") {
let win_sdk_bin = r"D:\Windows Kits\10\bin\10.0.22621.0\x64";
if std::path::Path::new(win_sdk_bin).exists() && !path.contains(win_sdk_bin) {
std::env::set_var("PATH", format!("{};{}", win_sdk_bin, path));
}
}
let mut res = winres::WindowsResource::new();
res.set_icon("assets/icon.ico");
res.set("FileDescription", "DLSS 5 Studio - Ultra-low latency DLSS 5 & OptiScaler Manager");
res.set("ProductName", "DLSS 5 Studio");
res.set("OriginalFilename", "dlss-studio.exe");
if let Err(e) = res.compile() {
eprintln!("cargo:warning=Failed to compile Windows resource: {}", e);
}
}
let out_dir = std::env::var("OUT_DIR").unwrap_or_else(|_| ".".to_string());
// Compress embedded payloads to minimize binary footprint
let addon_src = std::path::Path::new("assets/dlss5-lab-overlay.addon64");
if addon_src.exists() {
let raw = std::fs::read(addon_src).expect("Failed to read dlss5-lab-overlay.addon64");
let compressed = miniz_oxide::deflate::compress_to_vec(&raw, 10);
let dest = std::path::Path::new(&out_dir).join("dlss5-lab-overlay.addon64.deflate");
std::fs::write(&dest, &compressed).expect("Failed to write compressed overlay addon");
println!("cargo:rerun-if-changed=assets/dlss5-lab-overlay.addon64");
}
let css_src = std::path::Path::new("assets/style.css");
if css_src.exists() {
let raw = std::fs::read(css_src).expect("Failed to read style.css");
let compressed = miniz_oxide::deflate::compress_to_vec(&raw, 10);
let dest = std::path::Path::new(&out_dir).join("style.css.deflate");
std::fs::write(&dest, &compressed).expect("Failed to write compressed style.css");
println!("cargo:rerun-if-changed=assets/style.css");
}
let payload_dest = std::path::Path::new(&out_dir).join("installer_payload.bin");
let mut chosen_exe: Option<std::path::PathBuf> = None;
// 1. Prioritize clean release binary
let release_exe = std::path::PathBuf::from("target/release/dlss-studio.exe");
if release_exe.exists() {
chosen_exe = Some(release_exe);
} else if let Ok(entries) = std::fs::read_dir("target/release") {
// 2. Check for versioned portable release binary in target/release
for entry in entries.flatten() {
let path = entry.path();
if path.is_file() {
let name = path.file_name().unwrap_or_default().to_string_lossy();
if name.starts_with("dlss-studio") && name.contains("portable") && name.ends_with(".exe") {
chosen_exe = Some(path);
break;
}
}
}
}
if chosen_exe.is_none() {
if let Ok(entries) = std::fs::read_dir("dist") {
for entry in entries.flatten() {
let path = entry.path();
if path.is_file() {
let name = path.file_name().unwrap_or_default().to_string_lossy();
if name.starts_with("dlss-studio") && name.contains("portable") && name.ends_with(".exe") {
chosen_exe = Some(path);
break;
}
}
}
}
}
// 3. Fallback to debug only if no release binary exists anywhere
if chosen_exe.is_none() {
let debug_exe = std::path::PathBuf::from("target/debug/dlss-studio.exe");
if debug_exe.exists() {
chosen_exe = Some(debug_exe);
}
}
if let Some(src) = chosen_exe {
let _ = std::fs::copy(src, &payload_dest);
} else if !payload_dest.exists() {
let _ = std::fs::write(&payload_dest, &[]);
}
println!("cargo:rerun-if-changed=target/release/dlss-studio.exe");
println!("cargo:rerun-if-changed=target/debug/dlss-studio.exe");
}