
We always strive to test libc++ as close as possible to the way we are actually shipping it. This was approximated reasonably well by setting up the minimal driver flags when running the test suite, however we were running the test suite against the library located in the build directory. This patch improves the situation by installing the library (the headers, the built library, modules, etc) into a fake location and then running the test suite against that fake "installation root". This should open the door to getting rid of the temporary copy of the headers we make during the build process, however this is left for a future improvement. Note that this adds quite a bit of verbosity whenever running the test suite because we install the headers beforehand every time. We should be able to override this to silence it, however CMake doesn't currently give us a way to do that, see https://gitlab.kitware.com/cmake/cmake/-/issues/26085.
The "module partitions" for the std module
The files in this directory contain the exported named declarations per header. These files are used for the following purposes:
- During testing exported named declarations are tested against the named declarations in the associated header. This excludes reserved names; they are not exported.
- Generate the module std.
These use cases require including the required headers for these "partitions" at different locations. This means the user of these "partitions" are responsible for including the proper header and validating whether the header can be loaded in the current libc++ configuration. For example "include " fails when locales are not available. The "partitions" use the libc++ feature macros to export the declarations available in the current configuration. This configuration is available if the user includes the `__config' header.
We use .inc
files that we include from the top-level module instead of
using real C++ module partitions. This is a lot faster than module partitions,
see this for details.