bootstrap/core/debuggers/cdb.rs
1use std::env;
2use std::path::PathBuf;
3
4use crate::core::config::TargetSelection;
5
6pub(crate) struct Cdb {
7 pub(crate) cdb: PathBuf,
8}
9
10/// FIXME: This CDB discovery code was very questionable when it was in
11/// compiletest, and it's just as questionable now that it's in bootstrap.
12pub(crate) fn discover_cdb(target: TargetSelection) -> Option<Cdb> {
13 if !cfg!(windows) || !target.ends_with("-pc-windows-msvc") {
14 return None;
15 }
16
17 let pf86 =
18 PathBuf::from(env::var_os("ProgramFiles(x86)").or_else(|| env::var_os("ProgramFiles"))?);
19 let cdb_arch = if cfg!(target_arch = "x86") {
20 "x86"
21 } else if cfg!(target_arch = "x86_64") {
22 "x64"
23 } else if cfg!(target_arch = "aarch64") {
24 "arm64"
25 } else if cfg!(target_arch = "arm") {
26 "arm"
27 } else {
28 return None; // No compatible CDB.exe in the Windows 10 SDK
29 };
30
31 let mut path = pf86;
32 path.push(r"Windows Kits\10\Debuggers"); // We could check 8.1 etc. too?
33 path.push(cdb_arch);
34 path.push(r"cdb.exe");
35
36 if !path.exists() {
37 return None;
38 }
39
40 Some(Cdb { cdb: path })
41}