That involves a few diagrams, but essentially, we have two layers:
- the libcu++ layer, which has some of our extensions and implementations specific to our platform.
- the libc++ layer, which is a modified upstream libc++.
A header in the libcu++ layer defines the libc++ internal macros in a certain way, and then includes the applicable libc++ header.
This is the current architecture, but we're moving away towards a more integrated approach where almost everything is in the libc++ layer.