From 9bcbc58eba8563e6b829941d65c42a24476e7048 Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Wed, 8 Dec 2021 18:35:53 -0600 Subject: [PATCH] Install llvm tools to sysroot when assembling local toolchain Some projects (e.g. the `bootimage` crate) may require the user to install the `llvm-tools-preview` rustup component. However, this cannot be easily done with a locally built toolchain. To allow a local toolchain to be used a drop-in replacement for a normal rustup toolchain in more cases, this PR copies the built LLVM tools to the sysoot. From the perspective a tool looking at the sysroot, this is equivalent to installing `llvm-tools-preview`. --- src/bootstrap/compile.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 007ca9f7f5a92..186b5e92d33e3 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -28,6 +28,7 @@ use crate::dist; use crate::native; use crate::tool::SourceType; use crate::util::{exe, is_debug_info, is_dylib, symlink_dir}; +use crate::LLVM_TOOLS; use crate::{Compiler, DependencyType, GitRepo, Mode}; #[derive(Debug, PartialOrd, Ord, Copy, Clone, PartialEq, Eq, Hash)] @@ -1164,6 +1165,16 @@ impl Step for Assemble { let llvm_bin_dir = output(Command::new(llvm_config_bin).arg("--bindir")); let llvm_bin_dir = Path::new(llvm_bin_dir.trim()); builder.copy(&llvm_bin_dir.join(&src_exe), &libdir_bin.join(&dst_exe)); + + // Since we've already built the LLVM tools, install them to the sysroot. + // This is the equivalent of installing the `llvm-tools-preview` component via + // rustup, and lets developers use a locally built toolchain to + // build projects that expect llvm tools to be present in the sysroot + // (e.g. the `bootimage` crate). + for tool in LLVM_TOOLS { + let tool_exe = exe(tool, target_compiler.host); + builder.copy(&llvm_bin_dir.join(&tool_exe), &libdir_bin.join(&tool_exe)); + } } }