-
Notifications
You must be signed in to change notification settings - Fork 12.9k
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
complicated build stages #119946
Comments
Note that there's been lots of prior discussion on this: |
I think some of this logic is also just wrong. For instance: rust/src/bootstrap/src/core/build_steps/tool.rs Lines 822 to 840 in 288daeb
This copies the clippy/miri built with the stage N compiler into the stage N sysroot. But that makes no sense: for rustc we copy the rustc built with the stage N compiler into the stage N+1 sysroot. The same should happen here. Currently, miri.exe that is copied to the stage 1 sysroot needs to be loaded with the libraries that are in the stage 2 sysroot. Clearly that makes no sense. |
So specifically, currently we're copying from stage1-tools-bin to stage1/bin. But we're also copying from stage1-rustc to stage2/bin. One of these has to be wrong, I think -- and I think it's the tools that are wrong. |
Additional ref. to this issue: https://rust-lang.zulipchat.com/#narrow/stream/326414-t-infra.2Fbootstrap/topic/Stage.20for.20copying.20tools.20into.20the.20sysroot |
Fix cargo staging for run-make tests Follow-up to rust-lang#130642 (comment) to make sure that when ``` $ COMPILETEST_FORCE_STAGE0=1 ./x test run-make --stage 0 ``` is used, bootstrap cargo is used in order to avoid building stage 1 rustc. Note that run-make tests are usually not written with `--stage 0` in mind and some tests may rely on stage1 rustc (nightly) behavior, and it is expected that some tests will fail under this invocation. This PR also fixes `tool::Cargo` staging in compiletest when preparing for `run-make` test mode, by chopping off a stage from the `compiler` passed to `tool::Cargo` such that when the user invokes with stage `N` ``` ./x test run-make --stage N ``` the `run-make` test suite will be tested against the cargo built by stage `N` compiler. Let's take `N=1`, i.e. `--stage 1`, without chopping off a stage, previously `./x test run-make --stage 1` will cause stage 1 rustc + std to be built, then stage 2 rustc, and cargo will be produced by the stage 2 rustc, which is clearly not what we want. By chopping off a stage, it means that cargo will be produced by the stage 1 rustc. cc rust-lang#119946, rust-lang#59864. See discussions regarding the tool staging at https://rust-lang.zulipchat.com/#narrow/stream/326414-t-infra.2Fbootstrap/topic/.E2.9C.94.20stage1.20run-make.20tests.20now.20need.20stage2.20rustc.20built.20for.20c.2E.2E.2E.
Current approach on bootstrap stages adds too much complexity on the bootstrap codebase; the complexity continues to grow with the additional changes made on bootstrap and it's not even functioning correctly (like writing incorrect stages to stdout on certain commands).
One possible solution could be to handle stage behaviours as part of the
Step
trait individually onStep
implementation.Some references to why current implementation of step calculations is making things so difficult/complicated:
rust/src/bootstrap/src/core/build_steps/compile.rs
Lines 839 to 847 in ef32456
rust/src/bootstrap/src/core/build_steps/compile.rs
Lines 905 to 926 in ef32456
Particularly, the behaviors of the force_use_stage function are not really useful for all use cases (for instance, see #118233 and #118918)
rust/src/bootstrap/src/lib.rs
Lines 1403 to 1417 in ef32456
@rustbot label +T-bootstrap
The text was updated successfully, but these errors were encountered: