mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +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;
|
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 we're downloading a compiler from CI, we can use the same compiler for all stages other than 0.
|
||||||
if builder.download_rustc() {
|
if builder.download_rustc() {
|
||||||
builder.ensure(Std::new(target_compiler, target_compiler.host));
|
builder.ensure(Std::new(target_compiler, target_compiler.host));
|
||||||
@ -1772,6 +1815,9 @@ impl Step for Assemble {
|
|||||||
if target_compiler.stage == builder.top_stage {
|
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));
|
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;
|
return target_compiler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1880,11 +1926,6 @@ impl Step for Assemble {
|
|||||||
|
|
||||||
copy_codegen_backends_to_sysroot(builder, build_compiler, target_compiler);
|
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 {
|
if let Some(lld_install) = lld_install {
|
||||||
let src_exe = exe("lld", target_compiler.host);
|
let src_exe = exe("lld", target_compiler.host);
|
||||||
let dst_exe = exe("rust-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) {
|
maybe_install_llvm_bitcode_linker(build_compiler);
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that `libLLVM.so` ends up in the newly build compiler directory,
|
// 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.
|
// so that it can be found when the newly built `rustc` is run.
|
||||||
|
Loading…
Reference in New Issue
Block a user