Skip to content

Refactor codegen backends in bootstrap #144787

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Aug 10, 2025

Conversation

Kobzol
Copy link
Member

@Kobzol Kobzol commented Aug 1, 2025

This PR refactors the codegen backend steps, in preparation to make more progress on the integration of the GCC codegen backend in bootstrap. It does several things:

  1. Splits the CodegenBackend step into two, one for clif and another one for gcc. Even though their code is mostly similar, that's IMO mostly fake similarity, and they do (or will) ultimately require different handling. This was already visible in the requirement of building GCC for cg_gcc, of course.
  2. It is now possible to build both backends (and dist cranelift) even if they are not specified in rust.codegen-backends. It was quite weird that it wasn't possible to even invoke the corresponding codegen backend if the backend wasn't specified in that array, as that array should ideally only change defaults (see later below).
  3. Changes the path specification of these steps to an alias. In other words, instead of compiler/rustc_codegen_cranelift, the step is now built only using rustc_codegen_cranelift or cg_clif. This is done to avoid an annoying clash with x build compiler, which would otherwise build both codegen backends after the 2) change.
  4. Made the copying of codegen backend artifacts more explicit, in particular in the Assemble step.
  5. Codifies the semantics of rust.codegen-backends, which now only affects the defaults of whether a codegen backend will be included in rustc's sysroot and whether it will be disted in x dist by default. We can change the behavior later, e.g. to dist cranelift by default in x dist once it becomes stabilized. Currently I left the existing behavior that we use on CI, I just tried to document it better.

I don't think that this requires a change tracker entry, because the defaults should work the same as before. It is just now possible to do x build/dist rustc_codegen_cranelift even if CLIF is not in the codegen-backends array. It is no longer possible to do ./x build compiler/rustc_codegen_cranelift though, not sure if that requires a change tracker entry.

There is one thing that I didn't touch yet, and that is the fact that rust.codegen-backends not only affects the default behavior of x dist w.r.t. Cranelift, but also of x test. In other words, x test rustc_codegen_cranelift still does not hing if cranelift isn't in rust.codegen-backends. I plan to take a look at this once I get to refactoring the test steps.

r? @jieyouxu

@rustbot
Copy link
Collaborator

rustbot commented Aug 1, 2025

jieyouxu is currently at their maximum review capacity.
They may take a while to respond.

@Kobzol Kobzol changed the title Refactor codegen backends Refactor codegen backends in bootstrap Aug 1, 2025
@rustbot rustbot added A-testsuite Area: The testsuite used to check the correctness of rustc 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 Aug 1, 2025
@rustbot
Copy link
Collaborator

rustbot commented Aug 1, 2025

This PR modifies src/bootstrap/src/core/config.

If appropriate, please update CONFIG_CHANGE_HISTORY in src/bootstrap/src/utils/change_tracker.rs.

This PR modifies bootstrap.example.toml.

If appropriate, please update CONFIG_CHANGE_HISTORY in src/bootstrap/src/utils/change_tracker.rs.

@rust-log-analyzer

This comment has been minimized.

@jieyouxu
Copy link
Member

jieyouxu commented Aug 5, 2025

@rustbot author

@rustbot rustbot 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-review Status: Awaiting review from the assignee but also interested parties. labels Aug 5, 2025
@Kobzol Kobzol force-pushed the codegen-backend-restructure branch from 588f96f to 0a3b2d7 Compare August 5, 2025 14:49
@Kobzol
Copy link
Member Author

Kobzol commented Aug 5, 2025

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 5, 2025
Copy link
Member

@jieyouxu jieyouxu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I have some nits/questions

@rustbot rustbot 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-review Status: Awaiting review from the assignee but also interested parties. labels Aug 6, 2025
@Kobzol
Copy link
Member Author

Kobzol commented Aug 6, 2025

Pushed review changes.

Copy link
Member

@jieyouxu jieyouxu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, two nits because I only just noticed

@Kobzol Kobzol force-pushed the codegen-backend-restructure branch from 4235812 to e89c64f Compare August 6, 2025 13:35
Copy link
Member

@jieyouxu jieyouxu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks

@jieyouxu
Copy link
Member

jieyouxu commented Aug 6, 2025

@bors r+ rollup=never (build system changes, just in case)

@bors
Copy link
Collaborator

bors commented Aug 6, 2025

📌 Commit e89c64f has been approved by jieyouxu

It is now in the queue for this repository.

@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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 6, 2025
@Zalathar
Copy link
Contributor

Zalathar commented Aug 7, 2025

Let's run a never PR while I investigate the recent rollup failure.

@bors p=1

@Zalathar
Copy link
Contributor

Zalathar commented Aug 7, 2025

Undoing my previous priority bump, since the immediate scheduling concern was solved.

@bors p=0

@lqd
Copy link
Member

lqd commented Aug 8, 2025

I knew it, we may need to close the tree

@Kobzol
Copy link
Member Author

Kobzol commented Aug 8, 2025

@/bors treeclosed=100 A test is failing on CI.

I guess we just comment out the test for now?

@Kobzol
Copy link
Member Author

Kobzol commented Aug 8, 2025

#145116 landed, so reopening the tree.

@/bors treeclosed-

@Kobzol
Copy link
Member Author

Kobzol commented Aug 8, 2025

@bors retry

@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 Aug 8, 2025
github-actions bot pushed a commit to rust-lang/miri that referenced this pull request Aug 9, 2025
Revert #143906

This reverts commit 71f04692c32e181ab566c01942f1418dec8662d4, reversing changes made to 995ca3e532b48b689567533e6b736675e38b741e.

Reverts rust-lang/rust#143906, which was merged in rust-lang/rust#145043.

It seems like it is causing test failures on CI that block merges (rust-lang/rust#144787 (comment).

try-job: x86_64-gnu-aux
@bors
Copy link
Collaborator

bors commented Aug 10, 2025

⌛ Testing commit 1a2ee80 with merge 915a766...

@bors
Copy link
Collaborator

bors commented Aug 10, 2025

☀️ Test successful - checks-actions
Approved by: jieyouxu
Pushing 915a766 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Aug 10, 2025
@bors bors merged commit 915a766 into rust-lang:master Aug 10, 2025
11 checks passed
@rustbot rustbot added this to the 1.91.0 milestone Aug 10, 2025
Copy link
Contributor

What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing 41ede7b (parent) -> 915a766 (this PR)

Test differences

Show 3 test diffs

Stage 0

  • core::builder::tests::snapshot::dist_cranelift_by_default: [missing] -> pass (J0)

Additionally, 2 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard 915a766b2f9fd53a8cd7b1fad003d3f8e488ff4b --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-aarch64-apple: 5653.7s -> 6853.5s (21.2%)
  2. aarch64-apple: 6505.5s -> 5195.7s (-20.1%)
  3. dist-apple-various: 3785.8s -> 4428.3s (17.0%)
  4. x86_64-apple-2: 5102.1s -> 5874.6s (15.1%)
  5. dist-loongarch64-musl: 4959.9s -> 5497.4s (10.8%)
  6. x86_64-mingw-2: 7602.0s -> 8335.7s (9.7%)
  7. x86_64-apple-1: 6599.6s -> 7223.5s (9.5%)
  8. aarch64-gnu-llvm-19-2: 2650.6s -> 2404.4s (-9.3%)
  9. tidy: 104.3s -> 113.6s (8.9%)
  10. dist-riscv64-linux: 4767.1s -> 5090.6s (6.8%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (915a766): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

Results (primary 2.3%, secondary -2.3%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
2.3% [1.1%, 3.5%] 2
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.3% [-2.3%, -2.3%] 1
All ❌✅ (primary) 2.3% [1.1%, 3.5%] 2

Cycles

This benchmark run did not return any relevant results for this metric.

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 463.257s -> 463.478s (0.05%)
Artifact size: 377.39 MiB -> 377.38 MiB (-0.00%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-testsuite Area: The testsuite used to check the correctness of rustc 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. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants