Skip to content

Update docs to match the new x.py defaults #813

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 2 commits into from
Jul 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ git submodule update --remote src/doc/rustc-dev-guide
git add -u
git commit -m "Update rustc-dev-guide"
# Note that you can use -i, which is short for --incremental, in the following command
./x.py test --incremental --stage 1 src/doc/rustc-dev-guide # This is optional and should succeed anyway
./x.py test --incremental src/doc/rustc-dev-guide # This is optional and should succeed anyway
# Open a PR in rust-lang/rust
```

Expand Down
5 changes: 4 additions & 1 deletion src/building/compiler-documenting.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@ since documentation is more about the content.

## Document everything

This uses the beta rustdoc, which usually but not always has the same output
as stage 1 rustdoc.

```bash
./x.py doc
```

## If you want to avoid the whole Stage 2 build
## If you want to be sure that the links behave the same as on CI

```bash
./x.py doc --stage 1
Expand Down
44 changes: 12 additions & 32 deletions src/building/how-to-build-and-run.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,6 @@ debug = true
# compiler.
codegen-units = 0

# Debuginfo level for most of Rust code, corresponds to the `-C debuginfo=N` option of `rustc`.
# `0` - no debug info
# `1` - line tables only - sufficient to generate backtraces that include line
# information and inlined functions, set breakpoints at source code
# locations, and step through execution in a debugger.
# `2` - full debug info with variable and type information
# Can be overridden for specific subsets of Rust code (rustc, std or tools).
# Debuginfo for tests run with compiletest is not controlled by this option
# and needs to be enabled separately with `debuginfo-level-tests`.
#
# Defaults to 2 if debug is true
debuginfo-level = 1

# Whether to always use incremental compilation when building rustc
incremental = true

Expand Down Expand Up @@ -147,10 +134,9 @@ To read more about the bootstrap process, [read this chapter][bootstrap].

## Building the Compiler

To build a compiler, run `./x.py build`. This will do the whole bootstrapping
process described above, producing a usable compiler toolchain from the source
code you have checked out. This takes a long time, so it is not usually what
you want to actually run (more on this later).
To build a compiler, run `./x.py build`. This will build up to the stage1 compiler,
including `rustdoc`, producing a usable compiler toolchain from the source
code you have checked out.

Note that building will require a relatively large amount of storage space.
You may want to have upwards of 10 or 15 gigabytes available to build the compiler.
Expand Down Expand Up @@ -190,7 +176,7 @@ Once you've created a config.toml, you are now ready to run
probably the best "go to" command for building a local rust:

```bash
./x.py build -i --stage 1 src/libstd
./x.py build -i src/libstd
```

This may *look* like it only builds `libstd`, but that is not the case.
Expand Down Expand Up @@ -220,8 +206,8 @@ there is a (hacky) workaround. See [the section on "recommended
workflows"](./suggested.md) below.

Note that this whole command just gives you a subset of the full `rustc`
build. The **full** `rustc` build (what you get if you just say `./x.py
build`) has quite a few more steps:
build. The **full** `rustc` build (what you get if you say `./x.py build
--stage 2 src/rustc`) has quite a few more steps:

- Build `librustc` and `rustc` with the stage1 compiler.
- The resulting compiler here is called the "stage2" compiler.
Expand All @@ -244,12 +230,6 @@ Build the libcore and libproc_macro library only
./x.py build src/libcore src/libproc_macro
```

Build only libcore up to Stage 1

```bash
./x.py build src/libcore --stage 1
```

Sometimes you might just want to test if the part you’re working on can
compile. Using these commands you can test that it compiles before doing
a bigger build to make sure it works with the compiler. As shown before
Expand Down Expand Up @@ -296,16 +276,16 @@ Here are a few other useful `x.py` commands. We'll cover some of them in detail
in other sections:

- Building things:
- `./x.py build --stage 1` – builds everything using the stage 1 compiler,
- `./x.py build` – builds everything using the stage 1 compiler,
not just up to `libstd`
- `./x.py build` – builds the stage2 compiler
- `./x.py build --stage 2` – builds the stage2 compiler
- Running tests (see the [section on running tests](../tests/running.html) for
more details):
- `./x.py test --stage 1 src/libstd` – runs the `#[test]` tests from `libstd`
- `./x.py test --stage 1 src/test/ui` – runs the `ui` test suite
- `./x.py test --stage 1 src/test/ui/const-generics` - runs all the tests in
- `./x.py test src/libstd` – runs the `#[test]` tests from `libstd`
- `./x.py test src/test/ui` – runs the `ui` test suite
- `./x.py test src/test/ui/const-generics` - runs all the tests in
the `const-generics/` subdirectory of the `ui` test suite
- `./x.py test --stage 1 src/test/ui/const-generics/const-types.rs` - runs
- `./x.py test src/test/ui/const-generics/const-types.rs` - runs
the single test `const-types.rs` from the `ui` test suite

### Cleaning out build directories
Expand Down
8 changes: 4 additions & 4 deletions src/building/suggested.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@ don't work (but that is easily detected and fixed).

The sequence of commands you want is as follows:

- Initial build: `./x.py build -i --stage 1 src/libstd`
- Initial build: `./x.py build -i src/libstd`
- As [documented above](#command), this will build a functional
stage1 compiler as part of running all stage0 commands (which include
building a `libstd` compatible with the stage1 compiler) as well as the
first few steps of the "stage 1 actions" up to "stage1 (sysroot stage1)
builds libstd".
- Subsequent builds: `./x.py build -i --stage 1 src/libstd --keep-stage 1`
- Subsequent builds: `./x.py build -i src/libstd --keep-stage 1`
- Note that we added the `--keep-stage 1` flag here

As mentioned, the effect of `--keep-stage 1` is that we just *assume* that the
Expand All @@ -84,8 +84,8 @@ rebuild. That ought to fix the problem.

You can also use `--keep-stage 1` when running tests. Something like this:

- Initial test run: `./x.py test -i --stage 1 src/test/ui`
- Subsequent test run: `./x.py test -i --stage 1 src/test/ui --keep-stage 1`
- Initial test run: `./x.py test -i src/test/ui`
- Subsequent test run: `./x.py test -i src/test/ui --keep-stage 1`

## Fine-tuning optimizations

Expand Down
10 changes: 5 additions & 5 deletions src/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -361,12 +361,12 @@ You can find documentation style guidelines in [RFC 1574][rfc1574].

[rfc1574]: https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text

In many cases, you don't need a full `./x.py doc`, which will build the entire
stage 2 compiler and compile the various books published on
In many cases, you don't need a full `./x.py doc --stage 2`, which will build
the entire stage 2 compiler and compile the various books published on
[doc.rust-lang.org][docs]. When updating documentation for the standard library,
first try `./x.py doc --stage 0 src/libstd`. If that fails, or if you need to
see the output from the latest version of `rustdoc`, use `--stage 1` instead of
`--stage 0`. Results should appear in `build/$TARGET/crate-docs`.
first try `./x.py doc src/libstd`. If that fails, or if you need to
see the output from the latest version of `rustdoc`, add `--stage 1`.
Results should appear in `build/$TARGET/crate-docs`.

[docs]: https://doc.rust-lang.org

Expand Down
42 changes: 20 additions & 22 deletions src/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,19 +175,19 @@ should still read the rest of the section:
| Command | When to use it |
| --- | --- |
| `x.py check` | Quick check to see if things compile; rust-analyzer can run this automatically for you |
| `x.py build --stage 0 src/libstd` | Build only the standard library, without building the compiler |
| `x.py build --stage 1 src/libstd` | Build just the 1st stage of the compiler, along with the standard library; this is faster than building stage 2 and usually good enough |
| `x.py build --stage 1 --keep-stage 1 src/libstd` | Build the 1st stage of the compiler and skips rebuilding the standard library; this is useful after you've done an ordinary stage1 build to skip compilation time, but it can cause weird problems. (Just do a regular build to resolve.) |
| `x.py test --stage 1 [--keep-stage 1]` | Run the test suite using the stage1 compiler |
| `x.py test --stage 1 --bless [--keep-stage 1]` | Run the test suite using the stage1 compiler _and_ update expected test output. |
| `x.py build` | Do a full 2-stage build. You almost never want to do this. |
| `x.py test` | Do a full 2-stage build and run all tests. You almost never want to do this. |
| `x.py build --stage 0 [src/libstd]` | Build only the standard library, without building the compiler |
| `x.py build src/libstd` | Build just the 1st stage of the compiler, along with the standard library; this is faster than building stage 2 and usually good enough |
| `x.py build --keep-stage 1 src/libstd` | Build the 1st stage of the compiler and skips rebuilding the standard library; this is useful after you've done an ordinary stage1 build to skip compilation time, but it can cause weird problems. (Just do a regular build to resolve.) |
| `x.py test [--keep-stage 1]` | Run the test suite using the stage1 compiler |
| `x.py test --bless [--keep-stage 1]` | Run the test suite using the stage1 compiler _and_ update expected test output. |
| `x.py build --stage 2 src/rustc` | Do a full 2-stage build. You almost never want to do this. |
| `x.py test --stage 2` | Do a full 2-stage build and run all tests. You almost never want to do this. |

To do a full 2-stage build of the whole compiler, you should run this (after
updating `config.toml` as mentioned above):

```sh
./x.py build
./x.py build --stage 2 src/rustc
```

In the process, this will also necessarily build the standard libraries, and it
Expand All @@ -203,10 +203,10 @@ For most contributions, you only need to build stage 1, which saves a lot of tim

```sh
# Build the compiler (stage 1)
./x.py build --stage 1 src/libstd
./x.py build src/libstd

# Subsequent builds
./x.py build --stage 1 --keep-stage 1 src/libstd
./x.py build --keep-stage 1 src/libstd
```

This will take a while, especially the first time. Be wary of accidentally
Expand All @@ -228,17 +228,17 @@ different test suites [in this chapter][testing].

```sh
# First build
./x.py test --stage 1 src/test/ui
./x.py test src/test/ui

# Subsequent builds
./x.py test --stage 1 src/test/ui --keep-stage 1
./x.py test src/test/ui --keep-stage 1
```

If your changes impact test output, you can use `--bless` to automatically
update the `.stderr` files of the affected tests:

```sh
./x.py test --stage 1 src/test/ui --keep-stage 1 --bless
./x.py test src/test/ui --keep-stage 1 --bless
```

While working on the compiler, it can be helpful to see if the code just
Expand Down Expand Up @@ -290,7 +290,7 @@ planning to use a recently added nightly feature. Instead, you can just build
stage 0, which uses the current beta compiler.

```sh
./x.py build --stage 0 src/libstd
./x.py build --stage 0
```

```sh
Expand All @@ -303,17 +303,15 @@ stage 0, which uses the current beta compiler.

`rustdoc` uses `rustc` internals (and, of course, the standard library), so you
will have to build the compiler and `std` once before you can build `rustdoc`.
As before, you can use `./x.py build` to do this.

However, in practice, stage 1 should be sufficient. The first time you build,
As before, you can use `./x.py build` to do this. The first time you build,
the stage-1 compiler will also be built.

```sh
# First build
./x.py build --stage 1 src/tools/rustdoc
./x.py build

# Subsequent builds
./x.py build --stage 1 --keep-stage 1 src/tools/rustdoc
./x.py build --keep-stage 1
```

As with the compiler, you can do a fast check build:
Expand All @@ -326,13 +324,13 @@ Rustdoc has two types of tests: content tests and UI tests.

```sh
# Content tests
./x.py test --stage 1 src/test/rustdoc
./x.py test src/test/rustdoc

# UI tests
./x.py test --stage 1 src/test/rustdoc-ui
./x.py test src/test/rustdoc-ui

# Both at once
./x.py test --stage 1 src/test/rustdoc src/test/rustdoc-ui
./x.py test src/test/rustdoc src/test/rustdoc-ui
```

### Contributing code to other Rust projects
Expand Down
2 changes: 1 addition & 1 deletion src/queries/profiling.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ address [issue 42678](https://github.com/rust-lang/rust/issues/42678).
Compile the compiler, up to at least stage 1:

```
python x.py --stage 1
x.py build src/libstd
```

### 2. Run `rustc`, with flags
Expand Down
4 changes: 2 additions & 2 deletions src/rustdoc.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ does is call the `main()` that's in this crate's `lib.rs`, though.)

## Cheat sheet

* Use `./x.py build --stage 1 src/libstd src/tools/rustdoc` to make a usable
* Use `./x.py build` to make a usable
rustdoc you can run on other projects.
* Add `src/libtest` to be able to use `rustdoc --test`.
* If you've used `rustup toolchain link local /path/to/build/$TARGET/stage1`
Expand All @@ -41,7 +41,7 @@ does is call the `main()` that's in this crate's `lib.rs`, though.)
* The completed docs will be available in `build/$TARGET/doc/std`, though the
bundle is meant to be used as though you would copy out the `doc` folder to
a web server, since that's where the CSS/JS and landing page are.
* Use `x.py test --stage 1 src/test/rustdoc*` to run the tests using a stage1 rustdoc.
* Use `x.py test src/test/rustdoc*` to run the tests using a stage1 rustdoc.
* See [rustdoc internals] for more information about tests.
* Most of the HTML printing code is in `html/format.rs` and `html/render.rs`.
It's in a bunch of `fmt::Display` implementations and supplementary
Expand Down
35 changes: 17 additions & 18 deletions src/tests/running.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ you will almost never want to use! – is as follows:
./x.py test
```

This will build the full stage 2 compiler and then run the whole test
This will build the stage 1 compiler and then run the whole test
suite. You probably don't want to do this very often, because it takes
a very long time, and anyway bors / travis will do it for you. (Often,
I will run this command in the background after opening a PR that I
Expand All @@ -29,35 +29,34 @@ If you are building gdb from source, you will need to configure with
## Running a subset of the test suites

When working on a specific PR, you will usually want to run a smaller
set of tests, and with a stage 1 build. For example, a good "smoke
test" that can be used after modifying rustc to see if things are
generally working correctly would be the following:
set of tests. For example, a good "smoke test" that can be used after
modifying rustc to see if things are generally working correctly would be the
following:

```bash
./x.py test --stage 1 src/test/{ui,compile-fail}
./x.py test src/test/{ui,compile-fail}
```

This will run the `ui` and `compile-fail` test suites,
and only with the stage 1 build. Of course, the choice of test suites
is somewhat arbitrary, and may not suit the task you are doing. For
example, if you are hacking on debuginfo, you may be better off with
the debuginfo test suite:
This will run the `ui` and `compile-fail` test suites. Of course, the choice
of test suites is somewhat arbitrary, and may not suit the task you are
doing. For example, if you are hacking on debuginfo, you may be better off
with the debuginfo test suite:

```bash
./x.py test --stage 1 src/test/debuginfo
./x.py test src/test/debuginfo
```

If you only need to test a specific subdirectory of tests for any
given test suite, you can pass that directory to `x.py test`:

```bash
./x.py test --stage 1 src/test/ui/const-generics
./x.py test src/test/ui/const-generics
```

Likewise, you can test a single file by passing its path:

```bash
./x.py test --stage 1 src/test/ui/const-generics/const-test.rs
./x.py test src/test/ui/const-generics/const-test.rs
```

### Run only the tidy script
Expand All @@ -81,7 +80,7 @@ Likewise, you can test a single file by passing its path:
### Run tests on the standard library using a stage 1 compiler

```bash
> ./x.py test src/libstd --stage 1
> ./x.py test src/libstd
```

By listing which test suites you want to run you avoid having to run
Expand All @@ -99,7 +98,7 @@ you may pass the full file path to achieve this, or alternatively one
may invoke `x.py` with the `--test-args` option:

```bash
./x.py test --stage 1 src/test/ui --test-args issue-1234
./x.py test src/test/ui --test-args issue-1234
```

Under the hood, the test runner invokes the standard rust test runner
Expand All @@ -114,7 +113,7 @@ making a new test, you can pass `--bless` to the test subcommand. E.g.
if some tests in `src/test/ui` are failing, you can run

```text
./x.py test --stage 1 src/test/ui --bless
./x.py test src/test/ui --bless
```

to automatically adjust the `.stderr`, `.stdout` or `.fixed` files of
Expand All @@ -130,7 +129,7 @@ exists in the test file. For example, you can run all the tests in
`src/test/ui` as `check-pass`:

```bash
./x.py test --stage 1 src/test/ui --pass check
./x.py test src/test/ui --pass check
```

By passing `--pass $mode`, you can reduce the testing time. For each
Expand All @@ -144,7 +143,7 @@ You can further enable the `--incremental` flag to save additional
time in subsequent rebuilds:

```bash
./x.py test --stage 1 src/test/ui --incremental --test-args issue-1234
./x.py test src/test/ui --incremental --test-args issue-1234
```

If you don't want to include the flag with every command, you can
Expand Down