Skip to content

Commit

Permalink
Auto merge of rust-lang#137036 - jieyouxu:drivers-license, r=Kobzol
Browse files Browse the repository at this point in the history
Include version number of libs being built in cargo lib metadata (esp. `librustc_driver*.so`)

Previously, on a non-stable channel, it's possible for two builds from different versioned sources (e.g. 1.84.0 vs 1.84.1) to produce a `librustc_driver*.so` with the same filename hashes. This causes problems with side-by-side installs wrt. linker search paths because 1.84.1 rustc bin and 1.84.0 rustc bin may try to link to the "same" `librustc_driver*.so` (same filename hash) but fail because the contents of the so is actually different.

We try to mitigate this by including the version number of artifacts being built via `__CARGO_DEFAULT_LIB_METADATA` (kind of an ugly hack, but I don't think cargo has a way for us to tell cargo to use a package version override).

Fixes rust-lang#136701 (mitigates, really).

### Testing

Tested manually[^host] by:

```bash
$ cat src/version
1.86.0
$ ./x build library # w/ compiler profile, (non-stable) dev channel
$ lddtree build/host/stage1/bin/rustc
rustc => build/host/stage1/bin/rustc (interpreter => /lib64/ld-linux-x86-64.so.2)
    librustc_driver-ea1b1b2291881cc4.so => build/host/stage1/bin/../lib/librustc_driver-ea1b1b2291881cc4.so
[...]
```

and observing that changing `src/version` to bump a point release causes `librustc_driver*.so` to have a different hash while sources are unmodified otherwise.

```bash
$ cat src/version
1.86.1
$ ./x build library # w/ compiler profile, (non-stable) dev channel
$ lddtree build/host/stage1/bin/rustc
rustc => build/host/stage1/bin/rustc (interpreter => /lib64/ld-linux-x86-64.so.2)
    librustc_driver-746badadbcb74721.so => build/host/stage1/bin/../lib/librustc_driver-746badadbcb74721.so
[...]
```

cc `@clan` `@demize` could you check that if you backport this change against 1.84.{0,1} as reported in rust-lang#136701, that the produced `rustc` binary works, under the context of the Gentoo build system setup?

[^host]: on a `x86_64-unknown-linux-gnu` host, no cross
  • Loading branch information
bors committed Feb 26, 2025
2 parents 2b3cef8 + 4f87987 commit 2af87ea
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/bootstrap/src/core/builder/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,12 @@ impl Builder<'_> {
Mode::Codegen => metadata.push_str("codegen"),
_ => {}
}
// `rustc_driver`'s version number is always `0.0.0`, which can cause linker search path
// problems on side-by-side installs because we don't include the version number of the
// `rustc_driver` being built. This can cause builds of different version numbers to produce
// `librustc_driver*.so` artifacts that end up with identical filename hashes.
metadata.push_str(&self.version);

cargo.env("__CARGO_DEFAULT_LIB_METADATA", &metadata);

if cmd_kind == Kind::Clippy {
Expand Down

0 comments on commit 2af87ea

Please sign in to comment.