Build rust-analyzer with specific target for install/pgo xtask

This commit is contained in:
itsjunetime 2025-10-05 18:24:19 -05:00
parent f0b496cbc7
commit 359a91e5e7
No known key found for this signature in database
2 changed files with 19 additions and 10 deletions

View File

@ -145,12 +145,12 @@ fn install_server(sh: &Shell, opts: ServerOpt) -> anyhow::Result<()> {
);
if let Some(train_crate) = opts.pgo {
let target = detect_target(sh);
let build_cmd = cmd!(
sh,
"cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --profile={profile} --locked --features force-always-assert {features...}"
"cargo build --manifest-path ./crates/rust-analyzer/Cargo.toml --bin rust-analyzer --target {target} --profile={profile} --locked --features force-always-assert {features...}"
);
let target = detect_target(sh);
let profile = crate::pgo::gather_pgo_profile(sh, build_cmd, &target, train_crate)?;
install_cmd = crate::pgo::apply_pgo_to_cmd(install_cmd, &profile);
}

View File

@ -53,14 +53,23 @@ pub(crate) fn gather_pgo_profile<'a>(
// Merge profiles into a single file
let merged_profile = pgo_dir.join("merged.profdata");
let profile_files = std::fs::read_dir(pgo_dir)?.filter_map(|entry| {
let entry = entry.ok()?;
if entry.path().extension() == Some(OsStr::new("profraw")) {
Some(entry.path().to_str().unwrap().to_owned())
} else {
None
}
});
let profile_files = std::fs::read_dir(pgo_dir)?
.filter_map(|entry| {
let entry = entry.ok()?;
if entry.path().extension() == Some(OsStr::new("profraw")) {
Some(entry.path().to_str().unwrap().to_owned())
} else {
None
}
})
.collect::<Vec<_>>();
if profile_files.is_empty() {
anyhow::bail!(
"rust-analyzer analysis-stats produced no pgo files. This is a bug in rust-analyzer; please file an issue."
);
}
cmd!(sh, "{llvm_profdata} merge {profile_files...} -o {merged_profile}").run().context(
"cannot merge PGO profiles. Do you have the rustup `llvm-tools` component installed?",
)?;