Skip to content

Commit b1009c4

Browse files
committed
more editing
1 parent 925465e commit b1009c4

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

CONTRIBUTING.md

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ contact us (`oli-obk` and `RalfJ`) on the [Rust Zulip].
1414

1515
## Preparing the build environment
1616

17-
Miri heavily relies on internal rustc interfaces to execute MIR. Still, some
18-
things (like adding support for a new intrinsic or a shim for an external
19-
function being called) can be done by working just on the Miri side.
17+
Miri heavily relies on internal and unstable rustc interfaces to execute MIR,
18+
which means it is important that you install a version of rustc that Miri
19+
actually works with.
2020

2121
The `rust-version` file contains the commit hash of rustc that Miri is currently
2222
tested against. Other versions will likely not work. After installing
@@ -25,13 +25,15 @@ install that exact version of rustc as a toolchain:
2525
```
2626
./rustup-toolchain
2727
```
28+
This will set up a rustup toolchain called `miri` and set it as an override for
29+
the current directory.
2830

2931
[`rustup-toolchain-install-master`]: https://github.com/kennytm/rustup-toolchain-install-master
3032

3133
## Building and testing Miri
3234

3335
Invoking Miri requires getting a bunch of flags right and setting up a custom
34-
sysroot with xargo. The `miri` script takes care of that for you. With the
36+
sysroot with xargo. The `miri` script takes care of that for you. With the
3537
build environment prepared, compiling Miri is just one command away:
3638

3739
```
@@ -76,7 +78,7 @@ MIRI_LOG=info ./miri run tests/run-pass/vecs.rs
7678
```
7779

7880
Setting `MIRI_LOG` like this will configure logging for Miri itself as well as
79-
the `rustc_middle::mir::interpret` and `rustc_mir::interpret` modules in rustc. You
81+
the `rustc_middle::mir::interpret` and `rustc_mir::interpret` modules in rustc. You
8082
can also do more targeted configuration, e.g. the following helps debug the
8183
stacked borrows implementation:
8284

@@ -90,8 +92,8 @@ evaluation error was originally raised.
9092
### Testing `cargo miri`
9193

9294
Working with the driver directly gives you full control, but you also lose all
93-
the convenience provided by cargo. Once your test case depends on a crate, it
94-
is probably easier to test it with the cargo wrapper. You can install your
95+
the convenience provided by cargo. Once your test case depends on a crate, it
96+
is probably easier to test it with the cargo wrapper. You can install your
9597
development version of Miri using
9698

9799
```
@@ -105,27 +107,33 @@ There's a test for the cargo wrapper in the `test-cargo-miri` directory; run
105107
`./run-test.py` in there to execute it. Like `./miri test`, this respects the
106108
`MIRI_TEST_TARGET` environment variable to execute the test for another target.
107109

108-
### Fixing Miri when rustc changes
110+
## Advanced topic: other build environments
109111

110-
Miri is heavily tied to rustc internals, so it is very common that rustc changes
111-
break Miri. Usually, Miri will require changes similar to the other consumers
112-
of the changed rustc API, so reading the rustc PR diff is a good way to get an
113-
idea for what is needed.
112+
We described above the simplest way to get a working build environment for Miri,
113+
which is to use the version of rustc indicated by `rustc-version`. But
114+
sometimes, that is not enough.
115+
116+
### Updating `rustc-version`
117+
118+
The `rustc-version` file is regularly updated to keep Miri close to the latest
119+
version of rustc. Usually, new contributors do not have to worry about this. But
120+
sometimes a newer rustc is needed for a patch, and sometimes Miri needs fixing
121+
for changes in rustc. In both cases, `rustc-version` needs updating.
114122

115123
To update the `rustc-version` file and install the latest rustc, you can run:
116124
```
117125
./rustup-toolchain HEAD
118126
```
119127

120-
Now try `./miri test`, and submit a PR once that works again. Even if you choose
121-
not to use `./rustup-toolchain`, it is important that the `rustc-version` file
122-
is updated, as our CI makes sure that Miri works well with that particular
123-
version of rustc.
128+
Now edit Miri until `./miri test` passes, and submit a PR. Generally, it is
129+
preferred to separate updating `rustc-version` and doing what it takes to get
130+
Miri working again, from implementing new features that rely on the updated
131+
rustc. This avoids blocking all Miri development on landing a big PR.
124132

125-
## Advanced topic: Building Miri with a locally built rustc
133+
### Building Miri with a locally built rustc
126134

127135
A big part of the Miri driver lives in rustc, so working on Miri will sometimes
128-
require using a locally built rustc. The bug you want to fix may actually be on
136+
require using a locally built rustc. The bug you want to fix may actually be on
129137
the rustc side, or you just need to get more detailed trace of the execution
130138
than what is possible with release builds -- in both cases, you should develop
131139
miri against a rustc you compiled yourself, with debug assertions (and hence

0 commit comments

Comments
 (0)