mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-17 01:13:11 +00:00
Auto merge of #121967 - nikic:libllvm-linker-script, r=Mark-Simulacrum
Replace libLLVM symlink with linker script It turns out that the libLLVM-N.so -> libLLVM.so.N.1 symlink is also needed when projects like miri link against librustc_driver.so. As such, we have to distribute it in real rustup components like rustc-dev, rather than only for download-ci-llvm. To avoid actually distributing symlinks (which are not supported or not fully supported by the rustup infrastructure) replace it with a linker script that does the same thing instead. Fixes https://github.com/rust-lang/rust/issues/121889. r? `@cuviper`
This commit is contained in:
commit
bfe762e0ed
@ -2035,10 +2035,18 @@ fn install_llvm_file(
|
||||
// If we have a symlink like libLLVM-18.so -> libLLVM.so.18.1, install the target of the
|
||||
// symlink, which is what will actually get loaded at runtime.
|
||||
builder.install(&t!(fs::canonicalize(source)), destination, 0o644);
|
||||
|
||||
let full_dest = destination.join(source.file_name().unwrap());
|
||||
if install_symlink {
|
||||
// If requested, also install the symlink. This is used by download-ci-llvm.
|
||||
let full_dest = destination.join(source.file_name().unwrap());
|
||||
// For download-ci-llvm, also install the symlink, to match what LLVM does. Using a
|
||||
// symlink is fine here, as this is not a rustup component.
|
||||
builder.copy(&source, &full_dest);
|
||||
} else {
|
||||
// Otherwise, replace the symlink with an equivalent linker script. This is used when
|
||||
// projects like miri link against librustc_driver.so. We don't use a symlink, as
|
||||
// these are not allowed inside rustup components.
|
||||
let link = t!(fs::read_link(source));
|
||||
t!(std::fs::write(full_dest, format!("INPUT({})\n", link.display())));
|
||||
}
|
||||
} else {
|
||||
builder.install(&source, destination, 0o644);
|
||||
|
Loading…
Reference in New Issue
Block a user