You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/inside-rust/stage0-redesign/index.md
+23-13Lines changed: 23 additions & 13 deletions
Original file line number
Diff line number
Diff line change
@@ -25,32 +25,42 @@ Notably, this means that after [redesign stage 0 std #119899](https://github.com
25
25
- Consequently, default (test, check, bench) stage values in the library profile are no longer `0`, but instead defaults to `1`.
26
26
- Some additional `cfg(bootstrap)` usages may be needed in the compiler sources for dogfooding unstable library features.
27
27
28
-
## Motivation
28
+
## Comparison of common invocations
29
29
30
-
The previous stage 0 bootstrapping sequence was a source of endless confusion for compiler, library and bootstrap contributors alike, because std had to support being built by *both* a previous beta rustc and in-tree rustc, with `cfg(bootstrap)` in std sources necessary to distinguish between them. By adjusting the stage 0 bootstrap sequence to instead use a precompiled stage 0 std instead of building the in-tree std, we hope to (1) simplify library development workflow to no longer need `cfg(bootstrap)` and (2) enable simplifying some bootstrap logic related to building in-tree std in stage 0.
30
+
For `profile = "library"`:
31
31
32
-
This was [originally proposed by @jyn514 in the MCP rust-lang/compiler-team#619](https://github.com/rust-lang/compiler-team/issues/619).
32
+
| Invocation | Before stage 0 std redesign | After stage 0 std redesign |
For `profile = "tools"`, by default not affected if `download-rustc` is enabled.
33
48
34
49
## What does this mean for a typical library workflow?
35
50
36
51
- Crucially, `./x {build,test,check} library --stage 0` becomes no-op and are no longer supported. Building the in-tree std now requires a stage 1 compiler.
37
52
- Consequently, library contributors are *strongly* encouraged to enable `rust.download-rustc = "if-unchanged"` to avoid having to build a stage 1 compiler. Note that this is the default for `profile = "library"`, but you may need to specify it manually if you don't use a `profile`.
38
53
-`cfg(bootstrap)` should no longer be needed for library sources.
39
54
40
-
### Caveat: `libtest` changes
41
-
42
-
See the *Recommended config: have `compiletest` instead depend on precompiled stage 0 libtest* section below.
43
-
44
55
## What does this mean for a typical compiler workflow?
45
56
46
57
- If unstable library features are being dogfooded, some additional `cfg(bootstrap)` usages may now be needed in compiler sources.
47
58
48
-
### Caveat: `libtest` changes
59
+
##Why are we making this change?
49
60
50
-
See the *Recommended config: have `compiletest`instead depend on precompiled stage 0 libtest* section below.
61
+
The previous stage 0 bootstrapping sequence was a source of endless confusion for compiler, library and bootstrap contributors alike, because std had to support being built by *both* a previous beta rustc and in-tree rustc, with `cfg(bootstrap)` in std sources necessary to distinguish between them. By adjusting the stage 0 bootstrap sequence to instead use a precompiled stage 0 std instead of building the in-tree std, we hope to:
51
62
52
-
## Recommended config: have `compiletest` instead depend on precompiled stage 0 libtest
63
+
1. Simplify library development workflow to no longer need `cfg(bootstrap)`, and
64
+
2. Enable simplifying some bootstrap logic related to building in-tree std in stage 0.
53
65
54
-
`compiletest` currently depends on in-tree libtest. For workflows that involve building the compiler, this can cause `compiletest` rebuilds if stage 1 library is rebuilt as a consequence of compiler changes. If you don't intend to change libtest, you can [specify `build.compiletest-use-stage0-libtest = true` to instead have `compiletest` depend on precompiled stage 0 libtest](https://github.com/rust-lang/rust/pull/139386). That way, compiler test iterations can avoid rebuilding `compiletest` unnecessarily. This is already the default unless the `dist` profile is used.
55
-
56
-
Note that some CI jobs have `build.compiletest-use-stage0-libtest = true` set while others have `build.compiletest-use-stage0-libtest = false`, meaning that libtest programmatic API changes can require adding `cfg(bootstrap)`/`cfg(not(bootstrap))` to `compiletest`'s libtest API use sites. However, in practice we expect this to be very rare.
66
+
This was [originally proposed by @jyn514 in the MCP rust-lang/compiler-team#619](https://github.com/rust-lang/compiler-team/issues/619).
0 commit comments