about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-06-09 03:18:49 +0000
committerbors <bors@rust-lang.org>2024-06-09 03:18:49 +0000
commit13423befc40fffe23ccc6dd06868142cff9428fe (patch)
tree4a6ce69f6a61bb750ec0bd7887098570f483f5a9
parenta595f3218e1204bad6f4d3451d318b2c0c56d570 (diff)
parente7409d2130b3065169ab3933fb7fb515ef0303a6 (diff)
downloadrust-13423befc40fffe23ccc6dd06868142cff9428fe.tar.gz
rust-13423befc40fffe23ccc6dd06868142cff9428fe.zip
Auto merge of #126087 - jieyouxu:rmake-docs, r=Kobzol
run-make: add some basic docs about the test suite's setup

r? `@Kobzol`
-rw-r--r--tests/run-make/README.md43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/run-make/README.md b/tests/run-make/README.md
new file mode 100644
index 00000000000..a6c1b4b7db7
--- /dev/null
+++ b/tests/run-make/README.md
@@ -0,0 +1,43 @@
+# The `run-make` test suite
+
+The `run-make` test suite contains tests which are the most flexible out of all
+the [rust-lang/rust](https://github.com/rust-lang/rust) test suites. `run-make`
+tests can basically contain arbitrary code, and are supported by the
+[`run_make_support`] library.
+
+## Infrastructure
+
+There are two kinds of run-make tests:
+
+1. The new `rmake.rs` version: this allows run-make tests to be written in Rust
+   (with `rmake.rs` as the main test file).
+2. The legacy `Makefile` version: this is what run-make tests were written with
+   before support for `rmake.rs` was introduced.
+
+The implementation for collecting and building the `rmake.rs` recipes (or
+`Makefile`s) are in
+[`src/tools/compiletest/src/runtest.rs`](../../src/tools/compiletest/src/runtest.rs),
+in `run_rmake_v2_test` and `run_rmake_legacy_test`.
+
+### Rust-based `run-make` tests: `rmake.rs`
+
+The setup for the `rmake.rs` version is a 3-stage process:
+
+1. First, we build the [`run_make_support`] library in bootstrap as a tool lib.
+2. Then, we compile the `rmake.rs` "recipe" linking the support library and its
+   dependencies in, and provide a bunch of env vars. We setup a directory
+   structure within `build/<target>/test/run-make/`
+
+   ```
+   <test-name>/
+       rmake.exe              # recipe binary
+       rmake_out/             # sources from test sources copied over
+   ```
+
+   and copy non-`rmake.rs` input support files over to `rmake_out/`. The
+   support library is made available as an [*extern prelude*][extern_prelude].
+3. Finally, we run the recipe binary and set `rmake_out/` as the working
+   directory.
+
+[`run_make_support`]: ../../src/tools/run-make-support
+[extern_prelude]: https://doc.rust-lang.org/reference/names/preludes.html#extern-prelude