mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 14:31:55 +00:00
Rollup merge of #130302 - onur-ozkan:130040-with-fixes, r=Kobzol
add llvm-bitcode-linker and llvm-tools bins to ci-rustc's sysroot https://github.com/rust-lang/rust/pull/130040 is [reverted](https://github.com/rust-lang/rust/pull/130292) because adding component binaries directly to the dist tarball of the compiler caused conflicts (see https://github.com/rust-lang/rust/issues/130291 and https://github.com/rust-lang/rustup/issues/4019). This PR solves the original problem without touching the dist tarball. r? Kobzol
This commit is contained in:
commit
97475df89d
@ -1760,6 +1760,49 @@ impl Step for Assemble {
|
||||
return target_compiler;
|
||||
}
|
||||
|
||||
// We prepend this bin directory to the user PATH when linking Rust binaries. To
|
||||
// avoid shadowing the system LLD we rename the LLD we provide to `rust-lld`.
|
||||
let libdir = builder.sysroot_libdir(target_compiler, target_compiler.host);
|
||||
let libdir_bin = libdir.parent().unwrap().join("bin");
|
||||
t!(fs::create_dir_all(&libdir_bin));
|
||||
|
||||
if builder.config.llvm_enabled(target_compiler.host) {
|
||||
let llvm::LlvmResult { llvm_config, .. } =
|
||||
builder.ensure(llvm::Llvm { target: target_compiler.host });
|
||||
if !builder.config.dry_run() && builder.config.llvm_tools_enabled {
|
||||
let llvm_bin_dir =
|
||||
command(llvm_config).arg("--bindir").run_capture_stdout(builder).stdout();
|
||||
let llvm_bin_dir = Path::new(llvm_bin_dir.trim());
|
||||
|
||||
// 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);
|
||||
let src_path = llvm_bin_dir.join(&tool_exe);
|
||||
// When using `download-ci-llvm`, some of the tools
|
||||
// may not exist, so skip trying to copy them.
|
||||
if src_path.exists() {
|
||||
builder.copy_link(&src_path, &libdir_bin.join(&tool_exe));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let maybe_install_llvm_bitcode_linker = |compiler| {
|
||||
if builder.config.llvm_bitcode_linker_enabled {
|
||||
let src_path = builder.ensure(crate::core::build_steps::tool::LlvmBitcodeLinker {
|
||||
compiler,
|
||||
target: target_compiler.host,
|
||||
extra_features: vec![],
|
||||
});
|
||||
let tool_exe = exe("llvm-bitcode-linker", target_compiler.host);
|
||||
builder.copy_link(&src_path, &libdir_bin.join(tool_exe));
|
||||
}
|
||||
};
|
||||
|
||||
// If we're downloading a compiler from CI, we can use the same compiler for all stages other than 0.
|
||||
if builder.download_rustc() {
|
||||
builder.ensure(Std::new(target_compiler, target_compiler.host));
|
||||
@ -1772,6 +1815,9 @@ impl Step for Assemble {
|
||||
if target_compiler.stage == builder.top_stage {
|
||||
builder.info(&format!("Creating a sysroot for stage{stage} compiler (use `rustup toolchain link 'name' build/host/stage{stage}`)", stage=target_compiler.stage));
|
||||
}
|
||||
|
||||
maybe_install_llvm_bitcode_linker(target_compiler);
|
||||
|
||||
return target_compiler;
|
||||
}
|
||||
|
||||
@ -1880,11 +1926,6 @@ impl Step for Assemble {
|
||||
|
||||
copy_codegen_backends_to_sysroot(builder, build_compiler, target_compiler);
|
||||
|
||||
// We prepend this bin directory to the user PATH when linking Rust binaries. To
|
||||
// avoid shadowing the system LLD we rename the LLD we provide to `rust-lld`.
|
||||
let libdir = builder.sysroot_libdir(target_compiler, target_compiler.host);
|
||||
let libdir_bin = libdir.parent().unwrap().join("bin");
|
||||
t!(fs::create_dir_all(&libdir_bin));
|
||||
if let Some(lld_install) = lld_install {
|
||||
let src_exe = exe("lld", target_compiler.host);
|
||||
let dst_exe = exe("rust-lld", target_compiler.host);
|
||||
@ -1920,40 +1961,7 @@ impl Step for Assemble {
|
||||
);
|
||||
}
|
||||
|
||||
if builder.config.llvm_enabled(target_compiler.host) {
|
||||
let llvm::LlvmResult { llvm_config, .. } =
|
||||
builder.ensure(llvm::Llvm { target: target_compiler.host });
|
||||
if !builder.config.dry_run() && builder.config.llvm_tools_enabled {
|
||||
let llvm_bin_dir =
|
||||
command(llvm_config).arg("--bindir").run_capture_stdout(builder).stdout();
|
||||
let llvm_bin_dir = Path::new(llvm_bin_dir.trim());
|
||||
|
||||
// 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);
|
||||
let src_path = llvm_bin_dir.join(&tool_exe);
|
||||
// When using `download-ci-llvm`, some of the tools
|
||||
// may not exist, so skip trying to copy them.
|
||||
if src_path.exists() {
|
||||
builder.copy_link(&src_path, &libdir_bin.join(&tool_exe));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if builder.config.llvm_bitcode_linker_enabled {
|
||||
let src_path = builder.ensure(crate::core::build_steps::tool::LlvmBitcodeLinker {
|
||||
compiler: build_compiler,
|
||||
target: target_compiler.host,
|
||||
extra_features: vec![],
|
||||
});
|
||||
let tool_exe = exe("llvm-bitcode-linker", target_compiler.host);
|
||||
builder.copy_link(&src_path, &libdir_bin.join(tool_exe));
|
||||
}
|
||||
maybe_install_llvm_bitcode_linker(build_compiler);
|
||||
|
||||
// Ensure that `libLLVM.so` ends up in the newly build compiler directory,
|
||||
// so that it can be found when the newly built `rustc` is run.
|
||||
|
Loading…
Reference in New Issue
Block a user