Most CMake configuration under compiler-rt/lib/*/tests have almost-the-same-but-not-quite functions of the form add_X_[unit]tests for compiling and running the tests.
Much of the logic is duplicated with minor variations across different sub-folders.
This can harm productivity for multiple reasons:
- For newcomers, resulting CMake files are very large, hard to understand, and hide the intention of the code.
- Changes for enabling certain architectures end up being unnecessarily large, as they get duplicated across multiple folders.
- Adding new sub-projects requires more effort than it should, as a developer has to again copy-n-paste the configuration, and it's not even clear from which sub-project it should be copy-n-pasted.
With this change the logic of compile-and-generate-a-set-of-tests is extracted into a function, which hopefully makes writing and reading CMake much easier.
As a part of refactoring, I've changed affected macros to functions, as it's much easier to write "safer" CMake code using functions (if such thing exists).