Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 0 deletions src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
# Building and debugging `rustc`

- [How to build and run the compiler](./building/how-to-build-and-run.md)
- [Quickstart](./building/quickstart.md)
- [Prerequisites](./building/prerequisites.md)
- [Suggested Workflows](./building/suggested.md)
- [Distribution artifacts](./building/build-install-distribution-artifacts.md)
Expand Down
5 changes: 5 additions & 0 deletions src/building/how-to-build-and-run.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
The compiler is built using a tool called `x.py`. You will need to
have Python installed to run it.

## Quick Start

For a less in-depth quick-start of getting the compiler running, see [quickstart](./quickstart.md).


## Get the source code

The main repository is [`rust-lang/rust`][repo]. This contains the compiler,
Expand Down
60 changes: 60 additions & 0 deletions src/building/quickstart.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Quickstart

This is a quickstart guide about getting the compiler running. For more information in the individual steps,
see the other pages in this chapter.

First, clone the repository:

```sh
git clone https://github.com/rust-lang/rust.git
cd rust
```

When building the compiler, we don't use `cargo` directly, instead we use a wrapper called "x".
On Unix-like platforms, use `./x`. On Windows, use `.\x.ps1`. This guide will use `./x`.
Copy link
Member

Choose a reason for hiding this comment

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

./x should work on Windows too, if run from powershell, because it'll autocomplete the extension.

Copy link
Member Author

Choose a reason for hiding this comment

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

oh, i will remove the sentence about windows and hope no one gets confused


We need to create a configuration for the build. Use `./x setup` to create a good default.

```sh
./x setup
```

Then, we can build the compiler. Use `./x build` to build the compiler, standard library and a few tools.
You can also `./x check` to just check it.
All these commands can take specific components/paths as arguments, for example `./x check compiler` to just check the compiler.

```sh
./x build
```

> When doing a change to the compiler that does not affect the way it compiles the standard library
(so for example, a change to an error message), use `--keep-stage-std 1` to avoid recompiling it.

After building the compiler and standard library, you now have a working compiler toolchain.
You can use it with rustup by linking it.

```sh
rustup toolchain link stage1 build/host/stage1
```

Now you have a toolchain called `stage1` linked to your build. You can use it to test the compiler.

```sh
rustc +stage testfile.rs
```

After doing a change, you can run the compiler test suite with `./x test`.

`./x test` runs the full test suite, which is slow and rarely what you want.
Usually, `./x test tests/ui` is what you want after a comiler change,
testing all "UI" tests that invoke the compiler on a specific test file and check the output.

```sh
./x test tests/ui
```

> `./x suggest` can also be helpful for suggesting which tests to run after a change.

Congrats, you are now ready to make a change to the compiler! If you have more questions,
[the full chapter](./how-to-build-and-run.md) might contain the answers, and if it doesn't,
feel free to ask for help on [Zulip](https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp).