Skip to main content

bootstrap/core/debuggers/
lldb.rs

1use std::path::PathBuf;
2
3use crate::core::builder::Builder;
4use crate::core::config::DebuggerPath;
5use crate::utils::exec::command;
6
7pub(crate) struct Lldb {
8    pub(crate) lldb_exe: PathBuf,
9    pub(crate) lldb_version: String,
10}
11
12pub(crate) fn discover_lldb(builder: &Builder<'_>) -> Option<Lldb> {
13    // If a path to a LLDB binary was provided, it has to exist and return some version, to avoid
14    // silent failures.
15    let (lldb_exe, explicitly_set_lldb) = match &builder.config.lldb {
16        Some(DebuggerPath::Path(path)) => (path.clone(), true),
17        Some(DebuggerPath::Discover) => (PathBuf::from("lldb"), false),
18        None => return None,
19    };
20
21    let mut cmd = command(&lldb_exe);
22    cmd.arg("--version");
23
24    if !explicitly_set_lldb {
25        cmd = cmd.allow_failure();
26    }
27    let lldb_version = cmd.run_capture(builder).stdout_if_ok().filter(|v| !v.trim().is_empty())?;
28
29    Some(Lldb { lldb_exe, lldb_version })
30}