Rollup merge of #128437 - onur-ozkan:handle-llvm-tools-properly, r=albertlarsan68,Kobzol

improve bootstrap to allow selecting llvm tools individually

Everything works as before, + now bootstrap allows for individually selecting LLVM tools (e.g., `x dist opt llvm-dis`) to include in the dist artifact.
This commit is contained in:
Matthias Krüger 2024-08-01 08:33:28 +02:00 committed by GitHub
commit cd525270f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2122,8 +2122,13 @@ impl Step for LlvmTools {
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
let default = should_build_extended_tool(run.builder, "llvm-tools");
// FIXME: allow using the names of the tools themselves?
run.alias("llvm-tools").default_condition(default)
let mut run = run.alias("llvm-tools");
for tool in LLVM_TOOLS {
run = run.alias(tool);
}
run.default_condition(default)
}
fn make_run(run: RunConfig<'_>) {
@ -2131,6 +2136,32 @@ fn make_run(run: RunConfig<'_>) {
}
fn run(self, builder: &Builder<'_>) -> Option<GeneratedTarball> {
fn tools_to_install(paths: &[PathBuf]) -> Vec<&'static str> {
let mut tools = vec![];
for path in paths {
let path = path.to_str().unwrap();
// Include all tools if path is 'llvm-tools'.
if path == "llvm-tools" {
return LLVM_TOOLS.to_owned();
}
for tool in LLVM_TOOLS {
if path == *tool {
tools.push(*tool);
}
}
}
// If no specific tool is requested, include all tools.
if tools.is_empty() {
tools = LLVM_TOOLS.to_owned();
}
tools
}
let target = self.target;
/* run only if llvm-config isn't used */
@ -2151,7 +2182,7 @@ fn run(self, builder: &Builder<'_>) -> Option<GeneratedTarball> {
// Prepare the image directory
let src_bindir = builder.llvm_out(target).join("bin");
let dst_bindir = format!("lib/rustlib/{}/bin", target.triple);
for tool in LLVM_TOOLS {
for tool in tools_to_install(&builder.paths) {
let exe = src_bindir.join(exe(tool, target));
tarball.add_file(&exe, &dst_bindir, 0o755);
}