forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			30 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
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.
 |