Skip to content
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

Add quickstart for how to build and run the compiler #1951

Merged
merged 2 commits into from
Mar 31, 2024
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
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
64 changes: 64 additions & 0 deletions src/building/quickstart.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# 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".
It is invoked with `./x`.

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 +stage1 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](../tests/ui.md) that invoke the compiler on a specific test file and check the output.

```sh
./x test tests/ui
Noratrieb marked this conversation as resolved.
Show resolved Hide resolved
```

Use `--bless` if you've made a change and want to update the `.stderr` files with the new output.

> `./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,
Noratrieb marked this conversation as resolved.
Show resolved Hide resolved
[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).

If you use VSCode, `./x setup` will ask you if you want to set up the config. For other editors, check out [suggested workflows](./suggested.md).