Skip to content

Commit f0e17c6

Browse files
authored
Merge pull request rust-lang#24 from nikomatsakis/master
how to build and run compiler, first shot
2 parents 580f301 + 3b142e5 commit f0e17c6

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

src/how-to-build-and-run.md

+119
Original file line numberDiff line numberDiff line change
@@ -1 +1,120 @@
11
# How to build the compiler and run what you built
2+
3+
The compiler is built using a tool called `x.py`. You will need to
4+
have Python installed to run it. But before we get to that, if you're going to
5+
be hacking on rustc, you'll want to tweak the configuration of the compiler. The default
6+
configuration is oriented towards running the compiler as a user, not a developer.
7+
8+
### Create a config.toml
9+
10+
To start, copy [`config.toml.example`] to `config.toml`:
11+
12+
[`config.toml.example`]: https://github.com/rust-lang/rust/blob/master/config.toml.example
13+
14+
```bash
15+
> cd $RUST_CHECKOUT
16+
> cp config.toml.example config.toml
17+
```
18+
19+
Then you will want to open up the file and change the following
20+
settings (and possibly others, such as `llvm.ccache`):
21+
22+
```toml
23+
[llvm]
24+
# Enables LLVM assertions, which will check that the LLVM bitcode generated
25+
# by the compiler is internally consistent. These are particularly helpful
26+
# if you edit `trans`.
27+
assertions = true
28+
29+
[rust]
30+
# This enables some assertions, but more importantly it enables the `debug!` logging
31+
# macros that are essential for debugging rustc.
32+
debug-assertions = true
33+
34+
# This will make your build more parallel; it costs a bit of runtime
35+
# performance perhaps (less inlining) but it's worth it.
36+
codegen-units = 0
37+
38+
# I always enable full debuginfo, though debuginfo-lines is more important.
39+
debuginfo = true
40+
41+
# Gives you line numbers for backtraces.
42+
debuginfo-lines = true
43+
44+
# Using the system allocator (instead of jemalloc) means that tools
45+
# like valgrind and memcache work better.
46+
use-jemalloc = false
47+
```
48+
49+
### Running x.py and building a stage1 compiler
50+
51+
Once you've created a config.toml, you are now ready to run
52+
`x.py`. There are a lot of options here, but let's start with what is
53+
probably the best "go to" command for building a local rust:
54+
55+
```
56+
./x.py build -i --stage 1 src/libstd
57+
```
58+
59+
What this command will do is the following:
60+
61+
- Using the beta compiler (also called stage 0), it will build the
62+
standard library and rustc from the `src` directory. The resulting
63+
compiler is called the "stage 1" compiler.
64+
- During this build, the `-i` (or `--incremental`) switch enables incremental
65+
compilation, so that if you later rebuild after editing things in
66+
`src`, you can save a bit of time.
67+
- Using this stage 1 compiler, it will build the standard library.
68+
(this is what the `src/libstd`) means.
69+
70+
This is just a subset of the full rustc build. The **full** rustc build (what you
71+
get if you just say `./x.py build`) has quite a few more steps:
72+
73+
- Build stage1 rustc with stage0 compiler
74+
- Build libstd with stage1 compiler (up to here is the same)
75+
- Build rustc from `src` again, this time with the stage1 compiler (this part is new)
76+
- The resulting compiler here is called the "stage2" compiler
77+
- Build libstd with stage2 compiler
78+
- Build librustdoc and a bunch of other things
79+
80+
### Creating a rustup toolchain
81+
82+
Once you have successfully built rustc, you will have created a bunch
83+
of files in your `build` directory. In order to actually run the
84+
resulting rustc, we recommend creating rustup toolchains. The first
85+
one will run the stage1 compiler (which we built above). The second
86+
will execute the stage2 compiler (which we did not build, but which
87+
you will likely need to build at some point; for example, if you want
88+
to run the entire test suite).
89+
90+
```
91+
> rustup toolchain link stage1 build/<host-triple>/stage1
92+
> rustup toolchain link stage2 build/<host-triple>/stage2
93+
```
94+
95+
Now you can run the rustc you built with. If you run with `-vV`, you
96+
should see a version number ending in `-dev`, indicating a build from
97+
your local environment:
98+
99+
```
100+
> rustc +stage1 -vV
101+
rustc 1.25.0-dev
102+
binary: rustc
103+
commit-hash: unknown
104+
commit-date: unknown
105+
host: x86_64-unknown-linux-gnu
106+
release: 1.25.0-dev
107+
LLVM version: 4.0
108+
```
109+
110+
### Other x.py commands
111+
112+
Here are a few other useful x.py commands. We'll cover some of them in detail in other sections:
113+
114+
- Building things:
115+
- `./x.py clean` -- clean up the build directory (`rm -rf build` works too, but then you have to rebuild LLVM)
116+
- `./x.py build --stage 1` -- builds everything using the stage 1 compiler, not just up to libstd
117+
- `./x.py build` -- builds the stage2 compiler
118+
- Running tests (see the section [running tests](./running-tests.html) for more details):
119+
- `./x.py test --stage 1 src/libstd` -- runs the `#[test]` tests from libstd
120+
- `./x.py test --stage 1 src/test/run-pass` -- runs the `run-pass` test suite

0 commit comments

Comments
 (0)