Merge pull request #483 from apoelstra/2018-10-readme
improve README instructions for using `rustup` and for compiling separate crates
This commit is contained in:
commit
1cbed5ca35
4 changed files with 44 additions and 17 deletions
|
|
@ -18,9 +18,8 @@ before_script:
|
|||
if [ "$TRAVIS_EVENT_TYPE" = cron ]; then
|
||||
RUST_TOOLCHAIN=nightly
|
||||
else
|
||||
RUST_TOOLCHAIN=$(cat rust-toolchain)
|
||||
RUST_TOOLCHAIN=$(cat rust-version)
|
||||
fi
|
||||
- rm rust-toolchain
|
||||
# install Rust
|
||||
- curl https://build.travis-ci.org/files/rustup-init.sh -sSf | sh -s -- -y --default-toolchain "$RUST_TOOLCHAIN"
|
||||
- export PATH=$HOME/.cargo/bin:$PATH
|
||||
|
|
|
|||
56
README.md
56
README.md
|
|
@ -8,17 +8,19 @@ undergraduate research course at the [University of Saskatchewan][usask].
|
|||
## Building Miri
|
||||
|
||||
I recommend that you install [rustup][rustup] to obtain Rust. Miri comes with a
|
||||
`rust-toolchain` file so rustup will automatically pick a suitable nightly
|
||||
version. Then all you have to do is:
|
||||
`rust-version` file describing the latest supported nightly version of the Rust
|
||||
compiler toolchain. Then all you have to do is:
|
||||
|
||||
```sh
|
||||
cargo build
|
||||
cargo +nightly build
|
||||
```
|
||||
|
||||
with `+nightly` replaced with the appropriate nightly version of Rust.
|
||||
|
||||
## Running Miri
|
||||
|
||||
```sh
|
||||
cargo run tests/run-pass/vecs.rs # Or whatever test you like.
|
||||
cargo +nightly run tests/run-pass/vecs.rs # Or whatever test you like.
|
||||
```
|
||||
|
||||
## Running Miri with full libstd
|
||||
|
|
@ -28,15 +30,15 @@ Miri hits a call to such a function, execution terminates. To fix this, it is
|
|||
possible to compile libstd with full MIR:
|
||||
|
||||
```sh
|
||||
rustup component add rust-src
|
||||
cargo install xargo
|
||||
xargo/build.sh
|
||||
rustup component add --toolchain nightly rust-src
|
||||
cargo +nightly install xargo
|
||||
rustup run nightly xargo/build.sh
|
||||
```
|
||||
|
||||
Now you can run Miri against the libstd compiled by xargo:
|
||||
|
||||
```sh
|
||||
MIRI_SYSROOT=~/.xargo/HOST cargo run tests/run-pass-fullmir/hashmap.rs
|
||||
MIRI_SYSROOT=~/.xargo/HOST cargo +nightly run tests/run-pass-fullmir/hashmap.rs
|
||||
```
|
||||
|
||||
Notice that you will have to re-run the last step of the preparations above when
|
||||
|
|
@ -47,13 +49,39 @@ You can also set `-Zmiri-start-fn` to make Miri start evaluation with the
|
|||
|
||||
## Running Miri on your own project('s test suite)
|
||||
|
||||
Install Miri as a cargo subcommand with `cargo install --all-features`, and install
|
||||
a full libstd as described above.
|
||||
Install Miri as a cargo subcommand with `cargo install +nightly --all-features --path .`.
|
||||
|
||||
Then, inside your own project, use `MIRI_SYSROOT=~/.xargo/HOST cargo +nightly
|
||||
miri` to run your project, if it is a bin project, or run
|
||||
`MIRI_SYSROOT=~/.xargo/HOST cargo +nightly miri test` to run all tests in your
|
||||
project through Miri.
|
||||
Compile your project and its dependencies against a MIR-enabled libstd as described
|
||||
above:
|
||||
|
||||
1. Run `cargo clean` to eliminate any cached dependencies that were built against
|
||||
the non-MIR `libstd`.
|
||||
2. To run all tests in your project through, Miri, use
|
||||
`MIRI_SYSROOT=~/.xargo/HOST cargo +nightly miri test`.
|
||||
3. If you have a binary project, you can run it through Miri using
|
||||
`MIRI_SYSROOT=~/.xargo/HOST cargo +nightly miri`.
|
||||
|
||||
### Common Problems
|
||||
|
||||
When using the above instructions, you may encounter a number of confusing compiler
|
||||
errors.
|
||||
|
||||
#### "constant evaluation error: no mir for `<function>`"
|
||||
|
||||
You may have forgotten to set `MIRI_SYSROOT` when calling `cargo miri`, and
|
||||
your program called into `std` or `core`. Be sure to set `MIRI_SYSROOT=~/.xargo/HOST`.
|
||||
|
||||
#### "found possibly newer version of crate `std` which `<dependency>` depends on"
|
||||
|
||||
Your build directory may contain artifacts from an earlier build that did/did not
|
||||
have `MIRI_SYSROOT` set. Run `cargo clean` before switching from non-Miri to Miri
|
||||
builds and vice-versa.
|
||||
|
||||
#### "found crate `std` compiled by an incompatible version of rustc"
|
||||
|
||||
You may be running `cargo miri` with a different compiler version than the one
|
||||
used to build the MIR-enabled `std`. Be sure to consistently use the same toolchain,
|
||||
which should be the toolchain specified in the `rust-version` file.
|
||||
|
||||
## Miri `-Z` flags
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ branches:
|
|||
install:
|
||||
# install Rust
|
||||
- set PATH=C:\Program Files\Git\mingw64\bin;C:\msys64\mingw%MSYS2_BITS%\bin;%PATH%
|
||||
- set /p RUST_TOOLCHAIN=<rust-toolchain
|
||||
- set /p RUST_TOOLCHAIN=<rust-version
|
||||
- curl -sSf -o rustup-init.exe https://win.rustup.rs/
|
||||
- rustup-init.exe -y --default-host %TARGET% --default-toolchain %RUST_TOOLCHAIN%
|
||||
- set PATH=%USERPROFILE%\.cargo\bin;%PATH%
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue