Migrate `symbol-visibility` `run-make` test to rmake Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). Pretty scary! - The expected number of symbols on each check has been changed slightly to reflect the differences between `llvm_readobj` and `nm`, as I think the former will print hidden symbols once and visible symbols twice, while the latter will only print visible symbols. - The original test ran the same exact checks on `cdylib` twice, for seemingly no reason. I have removed it. - This may be possible to optimize some more? `llvm_readobj` could get called only once for each library type, and the regex could avoid being created repeatedly. I am not sure if these kinds of considerations are important for a `run-make` test. Demands a Windows try-job. try-job: x86_64-mingw
The run-make test suite
The run-make test suite contains tests which are the most flexible out of all
the 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:
- The new
rmake.rsversion: this allows run-make tests to be written in Rust (withrmake.rsas the main test file). - The legacy
Makefileversion: this is what run-make tests were written with before support forrmake.rswas introduced.
The implementation for collecting and building the rmake.rs recipes (or
Makefiles) are in
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:
-
First, we build the
run_make_supportlibrary in bootstrap as a tool lib. -
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 withinbuild/<target>/test/run-make/<test-name>/ rmake.exe # recipe binary rmake_out/ # sources from test sources copied overand copy non-
rmake.rsinput support files over tormake_out/. The support library is made available as an extern prelude. -
Finally, we run the recipe binary and set
rmake_out/as the working directory.
Formatting
Note that files under tests/ are not formatted by ./x fmt,
use rustfmt tests/path/to/file.rs to format a specific file if desired.