| The mechanics of the ``public_api`` command |
| =========================================== |
| |
| The build system, in combination with the header generation mechanism, |
| facilitates the fine grained ability to pick and choose the public API one wants |
| to expose on their platform. The public header files are always generated from |
| the corresponding ``.h.def`` files. A header generation command ``%%public_api`` |
| is listed in these files. In the generated header file, the header generator |
| replaces this command with the public API relevant for the target platform. |
| |
| Under the hood |
| -------------- |
| |
| When the header generator sees the ``%%public_api`` command, it looks up the |
| API config file for the platform in the path ``config/<platform>/api.td``. |
| The API config file lists two kinds of items: |
| |
| 1. The list of standards from which the public entities available on the platform |
| are derived from. |
| 2. For each header file exposed on the platfrom, the list of public members |
| provided in that header file. |
| |
| Note that, the header generator only learns the names of the public entities |
| from the header config file (the 2nd item from above.) The exact manner in which |
| the entities are to be declared is got from the standards (the 1st item from |
| above.) |
| |
| See the ground truth document for more information on how the standards are |
| formally listed in LLVM libc using LLVM table-gen files. |