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}