Allow using self-contained LLD in bootstrap by Kobzol · Pull Request #135001 · rust-lang/rust (original) (raw)

Conversation

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})

Kobzol

@Kobzol

…ntained"` is used

Before, we just used the global lld anyway.

@Kobzol

Not all targets support these flags, so we cannot just pass them to the tests unconditionally. Before, we were using a linker arg (-Clink-arg=-fuse-ld=lld), which circumvented this in a hacky way.

@rustbot rustbot added S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

T-bootstrap

Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)

labels

Jan 1, 2025

onur-ozkan

@bors bors added S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-review

Status: Awaiting review from the assignee but also interested parties.

labels

Jan 3, 2025

bors added a commit to rust-lang-ci/rust that referenced this pull request

Jan 4, 2025

@bors

…iaskrgr

Rollup of 7 pull requests

Successful merges:

r? @ghost @rustbot modify labels: rollup

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Jan 4, 2025

@rust-timer

Rollup merge of rust-lang#135001 - Kobzol:bootstrap-mcp-510, r=onur-ozkan

Allow using self-contained LLD in bootstrap

In rust-lang#116278, I added a "self-contained" mode to the rust.use-lld bootstrap option, which was designed for using the built-in LLD for linking compiler artifacts. However, this was later reverted in rust-lang#118810.

This PR brings the old logic back, which switches LLD in bootstrap from -fuse-ld=lld to MCP510 way of passing linker flags to enable LLD (both external and self-contained). So this does two changes:

  1. Goes from -fuse-ld=lld to MCP510
  2. Actually makes it possible to use the self-contained LLD to compile compiler artifacts

Regarding the second commit: Since rust-lang#86113, we have been passing -fuse-ld=lld as a target flag to all tests when use-lld = true is enabled. This kind of worked for all tests, since it was just a linker argument, which has bypassed any compiler checks, and probably resulted only in some warning if the given target linker didn't actually support LLD. However, after the first commit, some tests actually start failing with this approach:

error: linker flavor `gnu-lld-cc` is incompatible with the current target
   |
   = note: compatible flavors are: llbc, ptx

So the second commit removes the passing of LLD flags as target flags to tests. I don't think that it's a good idea to pass specific compiler flags to all tests unconditionally, tbh. The doctest command from rust-lang#86113 doesn't go through compiletest anymore, and doctests should be quite a lot faster since rust-lang#126245 in general.

CC @the8472

If someone has a beefy machine, it would be nice to test whether this doesn't regress test execution speed. How to do that:

  1. Enable rust.use-lld = true and rust.lld = true in config.toml
  2. Benchmark ./x test tests/ui --force-rerun between master and this PR

Once this is tested in the wild, I would like to make the self-contained LLD the default in CI, hopefully to make CI builds faster.

r? @onur-ozkan

@Kobzol Kobzol deleted the bootstrap-mcp-510 branch

January 4, 2025 13:33

@bors bors added S-waiting-on-author

Status: This is awaiting some action (such as code changes or more information) from the author.

and removed S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

labels

Jan 9, 2025

@jieyouxu jieyouxu added merged-by-bors

This PR was explicitly merged by bors.

S-waiting-on-bors

Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-author

Status: This is awaiting some action (such as code changes or more information) from the author.

labels

Jan 9, 2025

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request

Apr 4, 2025

@matthiaskrgr

…trochenkov

Use target-agnostic LLD flags in bootstrap for use-lld

Before, I hardcoded LLD flags that pretty much only worked on GNU. The right way is to use -Zlinker-features instead though.

I think that this should also make this work on Windows mingw, and thus @petrochenkov's workaround is no longer necessary.

Fixes: rust-lang#139372 Closes: rust-lang#139375

r? @lqd

rust-timer added a commit to rust-lang-ci/rust that referenced this pull request

Apr 5, 2025

@rust-timer

Rollup merge of rust-lang#139378 - Kobzol:bootstrap-use-lld-fix, r=petrochenkov

Use target-agnostic LLD flags in bootstrap for use-lld

Before, I hardcoded LLD flags that pretty much only worked on GNU. The right way is to use -Zlinker-features instead though.

I think that this should also make this work on Windows mingw, and thus @petrochenkov's workaround is no longer necessary.

Fixes: rust-lang#139372 Closes: rust-lang#139375

r? @lqd