unbreak individual module building

Matthew Dillon dillon at apollo.backplane.com
Sun Nov 12 11:41:24 PST 2006


:     No, all files outside of the machine headers MUST include <machine/*.h>,
:     NEVER <cpu/*.h>.

   I should explain this a bit more.  What is happening here is that
   there are platform architecture specific includes <machine/*.h> and
   there are cpu architecture specific includes <cpu/*.h>

   BUT all #include lines must go via <machine/*.h> in order to give the
   platform architecture a chance to override or enhance/add-to the 
   cpu architecture.

   This means that a header file must exist in <machine/*.h> for every
   header in <cpu/*.h>.  I did not want to create a mess of forwarding-only
   header files in the platform architectures - amoung other things this
   would make it difficult to impossible to keep everything synchronized
   when adding or removing cpu architecture headers, since (potentially)
   many platforms might reference the same cpu architecture.  Also, certain
   platforms such as VKERNEL might wind up referencing any number of
   different cpu architectures depending on 'machine_arch' directive in
   the kernel config file.

   Because of all this the buildworld (in src/include/Makefile*) and
   buildkernel (in src/Makefile.inc1) targets synthesize the 'missing'
   <machine/*.h> header files by either creating a forwarding header
   file to <cpu/*.h> or simply copying the <cpu/*.h> to the machine/
   sub directory in the object tree or in /usr/include.

   This allows us to omit pure forwarding header files.  It also means 
   that ALL sources must access platform or cpu architecture headers
   via <machine/*.h> or risk becoming a porting nightmare when we expand
   to other cpu architectures.

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>





More information about the Submit mailing list