@c Copyright (C) 1988-2021 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.

@node Header Dirs
@chapter Standard Header File Directories

@code{GCC_INCLUDE_DIR} means the same thing for native and cross.  It is
where GCC stores its private include files, and also where GCC
stores the fixed include files.  A cross compiled GCC runs
@code{fixincludes} on the header files in @file{$(tooldir)/include}.
(If the cross compilation header files need to be fixed, they must be
installed before GCC is built.  If the cross compilation header files
are already suitable for GCC, nothing special need be done).

@code{GPLUSPLUS_INCLUDE_DIR} means the same thing for native and cross.  It
is where @command{g++} looks first for header files.  The C++ library
installs only target independent header files in that directory.

@code{LOCAL_INCLUDE_DIR} is used only by native compilers.  GCC
doesn't install anything there.  It is normally
@file{/usr/local/include}.  This is where local additions to a packaged
system should place header files.

@code{CROSS_INCLUDE_DIR} is used only by cross compilers.  GCC
doesn't install anything there.

@code{TOOL_INCLUDE_DIR} is used for both native and cross compilers.  It
is the place for other packages to install header files that GCC will
use.  For a cross-compiler, this is the equivalent of
@file{/usr/include}.  When you build a cross-compiler,
@code{fixincludes} processes any header files in this directory.
