This change introduces a new CMake cache variable
`COMPILER_RT_ENABLE_TEST_SUITES` that allows users to have fine-grained
control over which test suites are included and therefore run when
running `ninja check-all`.
For example building with `COMPILER_RT_ENABLE_TEST_SUITES=builtins;asan`
will only enable the builtins and asan tests under `compiler-rt/tests`.
The default value of `COMPILER_RT_INCLUDE_TESTS` is `all` which is a
special value that includes everything and it being the default means
this patch preserves existing behavior. Note this new option only has
affect when `COMPILER_RT_INCLUDE_TESTS` is On.
The primary use case for this change is it allows controlling tests that
don't have a corresponding runtime to be enabled/disabled. An example of
this is the `shadowcallstack` test suite. `-fbounds-safety` also has a
downstream test suite in compiler-rt like this. Previously there was no
way to disable including these tests when `COMPILER_RT_INCLUDE_TESTS`
was on.
The `-fbounds-safety` test suite will be upstreamed once the necessary
clang pieces exist upstream.
A side benefit of this change is it allows building runtimes but not
testing some of them which can be useful in some testing environments
(e.g. smoke-test). It is not the primary motivation though.
While the existing `COMPILER_RT_BUILD_<NAME>` options can be used to
prevent running tests (by not building corresponding runtimes) that
isn't a good solution because it:
* Doesn't work for tests that have no corresponding runtime to be built
like `shadowcallstack` because there's no CMake option for it.
* Requires specifying multiple CMake options to disable building each
runtime that we don't want tested. This approach disallows "building
but not testing certain runtimes" and also is annoying to maintain
because its effectively a subtractive list (you say what you don't
want) that has to be updated everytime a new runtime is introduced
whereas COMPILER_RT_ENABLE_TEST_SUITES is an additive list (you say
what you want) that doesn't need modifying everytime a new runtime is
introduced.
To implement this all test directories in `compiler-rt/test` are now
added through the `compiler_rt_test_runtime()` function which has been
adapted to accommodate all use cases.
Assisted-by: Claude Code
rdar://176477660