| Index: tools/gn/docs/reference.md
|
| diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md
|
| index c55f42e05b394327fe6bb25e2d7d6a0715f91954..ad3ac85676af7484335a90a07b9eeb3dbfb8eeb0 100644
|
| --- a/tools/gn/docs/reference.md
|
| +++ b/tools/gn/docs/reference.md
|
| @@ -1011,6 +1011,7 @@
|
| ```
|
| Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
|
| defines, include_dirs, ldflags, lib_dirs, libs
|
| + precompiled_header, precompiled_source
|
|
|
| ```
|
|
|
| @@ -1209,6 +1210,7 @@
|
| ```
|
| Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
|
| defines, include_dirs, ldflags, lib_dirs, libs
|
| + precompiled_header, precompiled_source
|
| Deps: data_deps, deps, forward_dependent_configs_from, public_deps
|
| Dependent configs: all_dependent_configs, public_configs
|
| General: check_includes, configs, data, inputs, output_name,
|
| @@ -1920,6 +1922,7 @@
|
| ```
|
| Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
|
| defines, include_dirs, ldflags, lib_dirs, libs
|
| + precompiled_header, precompiled_source
|
| Deps: data_deps, deps, forward_dependent_configs_from, public_deps
|
| Dependent configs: all_dependent_configs, public_configs
|
| General: check_includes, configs, data, inputs, output_name,
|
| @@ -1960,6 +1963,7 @@
|
| ```
|
| Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
|
| defines, include_dirs, ldflags, lib_dirs, libs
|
| + precompiled_header, precompiled_source
|
| Deps: data_deps, deps, forward_dependent_configs_from, public_deps
|
| Dependent configs: all_dependent_configs, public_configs
|
| General: check_includes, configs, data, inputs, output_name,
|
| @@ -1983,6 +1987,7 @@
|
| ```
|
| Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
|
| defines, include_dirs, ldflags, lib_dirs, libs
|
| + precompiled_header, precompiled_source
|
| Deps: data_deps, deps, forward_dependent_configs_from, public_deps
|
| Dependent configs: all_dependent_configs, public_configs
|
| General: check_includes, configs, data, inputs, output_name,
|
| @@ -2292,6 +2297,20 @@
|
| Posix systems:
|
| output_prefix = "lib"
|
|
|
| + precompiled_header_type [string]
|
| + Valid for: "cc", "cxx", "objc", "objcxx"
|
| +
|
| + Type of precompiled headers. If undefined or the empty string,
|
| + precompiled headers will not be used for this tool. Otherwise
|
| + use "msvc" which is the only currently supported value.
|
| +
|
| + For precompiled headers to be used for a given target, the
|
| + target (or a config applied to it) must also specify a
|
| + "precompiled_header" and, for "msvc"-style headers, a
|
| + "precompiled_source" value.
|
| +
|
| + See "gn help precompiled_header" for more.
|
| +
|
| restat [boolean]
|
| Valid for: all tools (optional, defaults to false)
|
|
|
| @@ -2332,6 +2351,7 @@
|
| ```
|
|
|
| ### **Expansions for tool variables**
|
| +
|
| ```
|
| All paths are relative to the root build directory, which is the
|
| current directory for running all tools. These expansions are
|
| @@ -3242,6 +3262,30 @@
|
|
|
| ```
|
|
|
| +### **Controlling includes individually**
|
| +
|
| +```
|
| + If only certain includes are problematic, you can annotate them
|
| + individually rather than disabling header checking on an entire
|
| + target. Add the string "nogncheck" to the include line:
|
| +
|
| + #include "foo/something_weird.h" // nogncheck (bug 12345)
|
| +
|
| + It is good form to include a reference to a bug (if the include is
|
| + improper, or some other comment expressing why the header checker
|
| + doesn't work for this particular case.
|
| +
|
| + The most common reason to need "nogncheck" is conditional includes.
|
| + The header checker does not understand the preprocessor, so may flag
|
| + some includes as improper even if the dependencies and #defines are
|
| + always matched correctly:
|
| +
|
| + #if defined(ENABLE_DOOM_MELON)
|
| + #include "doom_melon/beam_controller.h" // nogncheck
|
| + #endif
|
| +
|
| +```
|
| +
|
| ### **Example**
|
|
|
| ```
|
| @@ -3772,6 +3816,77 @@
|
|
|
|
|
| ```
|
| +## **precompiled_header**: [string] Header file to precompile.
|
| +
|
| +```
|
| + Precompiled headers will be used when a target specifies this
|
| + value, or a config applying to this target specifies this value.
|
| + In addition, the tool corresponding to the source files must also
|
| + specify precompiled headers (see "gn help tool"). The tool
|
| + will also specify what type of precompiled headers to use.
|
| +
|
| + The precompiled header/source variables can be specified on a target
|
| + or a config, but must be the same for all configs applying to a given
|
| + target since a target can only have one precompiled header.
|
| +
|
| +```
|
| +
|
| +### **MSVC precompiled headers**
|
| +
|
| +```
|
| + When using MSVC-style precompiled headers, the "precompiled_header"
|
| + value is a string corresponding to the header. This is NOT a path
|
| + to a file that GN recognises, but rather the exact string that appears
|
| + in quotes after an #include line in source code. The compiler will
|
| + match this string against includes or forced includes (/FI).
|
| +
|
| + MSVC also requires a source file to compile the header with. This must
|
| + be specified by the "precompiled_source" value. In contrast to the
|
| + header value, this IS a GN-style file name, and tells GN which source
|
| + file to compile to make the .pch file used for subsequent compiles.
|
| +
|
| + If you use both C and C++ sources, the precompiled header and source
|
| + file will be compiled using both tools. You will want to make sure
|
| + to wrap C++ includes in __cplusplus #ifdefs so the file will compile
|
| + in C mode.
|
| +
|
| + For example, if the toolchain specifies MSVC headers:
|
| +
|
| + toolchain("vc_x64") {
|
| + ...
|
| + tool("cxx") {
|
| + precompiled_header_type = "msvc"
|
| + ...
|
| +
|
| + You might make a config like this:
|
| +
|
| + config("use_precompiled_headers") {
|
| + precompiled_header = "build/precompile.h"
|
| + precompiled_source = "//build/precompile.cc"
|
| +
|
| + # Either your source files should #include "build/precompile.h"
|
| + # first, or you can do this to force-include the header.
|
| + cflags = [ "/FI$precompiled_header" ]
|
| + }
|
| +
|
| + And then define a target that uses the config:
|
| +
|
| + executable("doom_melon") {
|
| + configs += [ ":use_precompiled_headers" ]
|
| + ...
|
| +
|
| +
|
| +
|
| +```
|
| +## **precompiled_source**: [file name] Source file to precompile.
|
| +
|
| +```
|
| + The source file that goes along with the precompiled_header when
|
| + using "msvc"-style precompiled headers. It will be implicitly added
|
| + to the sources of the target. See "gn help precompiled_header".
|
| +
|
| +
|
| +```
|
| ## **public**: Declare public header files for a target.
|
|
|
| ```
|
|
|