Index: tools/gn/docs/reference.md |
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md |
index 356712fd399d6230c06bbe42b4c46942d01f3424..4cc5f1211596b8a97f0e7331de73a1b92ea5e458 100644 |
--- a/tools/gn/docs/reference.md |
+++ b/tools/gn/docs/reference.md |
@@ -7,10 +7,10 @@ |
``` |
See "gn help buildargs" for an overview of how build arguments work. |
- Most operations take a build directory. The build arguments are taken |
- from the previous build done in that directory. If a command specifies |
- --args, it will override the previous arguments stored in the build |
- directory, and use the specified ones. |
+ Most operations take a build directory. The build arguments are taken from |
+ the previous build done in that directory. If a command specifies --args, it |
+ will override the previous arguments stored in the build directory, and use |
+ the specified ones. |
The args specified will be saved to the build directory for subsequent |
commands. Specifying --args="" will clear all build arguments. |
@@ -20,9 +20,8 @@ |
### **Formatting** |
``` |
- The value of the switch is interpreted in GN syntax. For typical usage |
- of string arguments, you will need to be careful about escaping of |
- quotes. |
+ The value of the switch is interpreted in GN syntax. For typical usage of |
+ string arguments, you will need to be careful about escaping of quotes. |
``` |
@@ -38,7 +37,6 @@ |
gn desc out/Default --args="some_list=[1, false, \"foo\"]" |
- |
``` |
## **\--[no]color**: Forces colored output on or off. |
@@ -68,28 +66,26 @@ |
Note that this interacts with "--root" in a possibly incorrect way. |
It would be nice to test the edge cases and document or fix. |
- |
``` |
## **\--fail-on-unused-args**: Treat unused build args as fatal errors. |
``` |
- If you set a value in a build's "gn args" and never use it in the |
- build (in a declare_args() block), GN will normally print an error |
- but not fail the build. |
+ If you set a value in a build's "gn args" and never use it in the build (in |
+ a declare_args() block), GN will normally print an error but not fail the |
+ build. |
- In many cases engineers would use build args to enable or disable |
- features that would sometimes get removed. It would by annoying to |
- block work for typically benign problems. In Chrome in particular, |
- flags might be configured for build bots in a separate infrastructure |
- repository, or a declare_args block might be changed in a third party |
- repository. Treating these errors as blocking forced complex multi- |
- way patches to land what would otherwise be simple changes. |
- |
- In some cases, such concerns are not as important, and a mismatch |
- in build flags between the invoker of the build and the build files |
- represents a critical mismatch that should be immediately fixed. Such |
- users can set this flag to force GN to fail in that case. |
+ In many cases engineers would use build args to enable or disable features |
+ that would sometimes get removed. It would by annoying to block work for |
+ typically benign problems. In Chrome in particular, flags might be configured |
+ for build bots in a separate infrastructure repository, or a declare_args |
+ block might be changed in a third party repository. Treating these errors as |
+ blocking forced complex multi- way patches to land what would otherwise be |
+ simple changes. |
+ In some cases, such concerns are not as important, and a mismatch in build |
+ flags between the invoker of the build and the build files represents a |
+ critical mismatch that should be immediately fixed. Such users can set this |
+ flag to force GN to fail in that case. |
``` |
## **\--markdown**: Write help output in the Markdown format. |
@@ -117,18 +113,17 @@ |
``` |
This is useful when running as a part of another script. |
- |
``` |
## **\--root**: Explicitly specify source root. |
``` |
- Normally GN will look up in the directory tree from the current |
- directory to find a ".gn" file. The source root directory specifies |
- the meaning of "//" beginning with paths, and the BUILD.gn file |
- in that directory will be the first thing loaded. |
+ Normally GN will look up in the directory tree from the current directory to |
+ find a ".gn" file. The source root directory specifies the meaning of "//" |
+ beginning with paths, and the BUILD.gn file in that directory will be the |
+ first thing loaded. |
- Specifying --root allows GN to do builds in a specific directory |
- regardless of the current directory. |
+ Specifying --root allows GN to do builds in a specific directory regardless |
+ of the current directory. |
``` |
@@ -139,62 +134,58 @@ |
gn desc //out/Default --root="C:\Users\BObama\My Documents\foo" |
- |
``` |
## **\--runtime-deps-list-file**: Save runtime dependencies for targets in file. |
``` |
--runtime-deps-list-file=<filename> |
- Where <filename> is a text file consisting of the labels, one per |
- line, of the targets for which runtime dependencies are desired. |
+ Where <filename> is a text file consisting of the labels, one per line, of |
+ the targets for which runtime dependencies are desired. |
- See "gn help runtime_deps" for a description of how runtime |
- dependencies are computed. |
+ See "gn help runtime_deps" for a description of how runtime dependencies are |
+ computed. |
``` |
### **Runtime deps output file** |
``` |
- For each target requested, GN will write a separate runtime dependency |
- file. The runtime dependency file will be in the output directory |
- alongside the output file of the target, with a ".runtime_deps" |
- extension. For example, if the target "//foo:bar" is listed in the |
- input file, and that target produces an output file "bar.so", GN |
- will create a file "bar.so.runtime_deps" in the build directory. |
- |
- If a source set, action, copy, or group is listed, the runtime deps |
- file will correspond to the .stamp file corresponding to that target. |
- This is probably not useful; the use-case for this feature is |
- generally executable targets. |
+ For each target requested, GN will write a separate runtime dependency file. |
+ The runtime dependency file will be in the output directory alongside the |
+ output file of the target, with a ".runtime_deps" extension. For example, if |
+ the target "//foo:bar" is listed in the input file, and that target produces |
+ an output file "bar.so", GN will create a file "bar.so.runtime_deps" in the |
+ build directory. |
- The runtime dependency file will list one file per line, with no |
- escaping. The files will be relative to the root_build_dir. The first |
- line of the file will be the main output file of the target itself |
- (in the above example, "bar.so"). |
+ If a source set, action, copy, or group is listed, the runtime deps file will |
+ correspond to the .stamp file corresponding to that target. This is probably |
+ not useful; the use-case for this feature is generally executable targets. |
+ The runtime dependency file will list one file per line, with no escaping. |
+ The files will be relative to the root_build_dir. The first line of the file |
+ will be the main output file of the target itself (in the above example, |
+ "bar.so"). |
``` |
## **\--script-executable**: Set the executable used to execute scripts. |
``` |
- By default GN searches the PATH for Python to execute scripts in |
- action targets and exec_script calls. This flag allows the |
- specification of a specific Python executable or potentially |
- a different language interpreter. |
- |
+ By default GN searches the PATH for Python to execute scripts in action |
+ targets and exec_script calls. This flag allows the specification of a |
+ specific Python executable or potentially a different language |
+ interpreter. |
``` |
## **\--threads**: Specify number of worker threads. |
``` |
- GN runs many threads to load and run build files. This can make |
- debugging challenging. Or you may want to experiment with different |
- values to see how it affects performance. |
+ GN runs many threads to load and run build files. This can make debugging |
+ challenging. Or you may want to experiment with different values to see how |
+ it affects performance. |
- The parameter is the number of worker threads. This does not count the |
- main thread (so there are always at least two). |
+ The parameter is the number of worker threads. This does not count the main |
+ thread (so there are always at least two). |
``` |
@@ -203,7 +194,6 @@ |
``` |
gen gen out/Default --threads=1 |
- |
``` |
## **\--time**: Outputs a summary of how long everything took. |
@@ -217,16 +207,15 @@ |
``` |
gn gen out/Default --time |
- |
``` |
## **\--tracelog**: Writes a Chrome-compatible trace log to the given file. |
``` |
- The trace log will show file loads, executions, scripts, and writes. |
- This allows performance analysis of the generation step. |
+ The trace log will show file loads, executions, scripts, and writes. This |
+ allows performance analysis of the generation step. |
- To view the trace, open Chrome and navigate to "chrome://tracing/", |
- then press "Load" and specify the file you passed to this parameter. |
+ To view the trace, open Chrome and navigate to "chrome://tracing/", then |
+ press "Load" and specify the file you passed to this parameter. |
``` |
@@ -235,14 +224,13 @@ |
``` |
gn gen out/Default --tracelog=mytrace.trace |
- |
``` |
## **-v**: Verbose logging. |
``` |
This will spew logging events to the console for debugging issues. |
- Good luck! |
+ Good luck! |
``` |
## **gn analyze <out_dir> <input_path> <output_path>** |
@@ -254,73 +242,66 @@ |
out_dir is the path to the build directory. |
- input_path is a path to a file containing a JSON object with three |
- fields: |
+ input_path is a path to a file containing a JSON object with three fields: |
- "files": A list of the filenames to check. |
- - "test_targets": A list of the labels for targets that |
- are needed to run the tests we wish to run. |
- |
- - "additional_compile_targets": A list of the labels for |
- targets that we wish to rebuild, but aren't necessarily needed |
- for testing. The important difference between this field and |
- "test_targets" is that if an item in the |
- additional_compile_targets list refers to a group, then |
- any dependencies of that group will be returned if they are out |
- of date, but the group itself does not need to be. If the |
- dependencies themselves are groups, the same filtering is |
- repeated. This filtering can be used to avoid rebuilding |
- dependencies of a group that are unaffected by the input files. |
- The list may also contain the string "all" to refer to a |
- pseudo-group that contains every root target in the build |
- graph. |
- |
- This filtering behavior is also known as "pruning" the list |
- of compile targets. |
- |
- output_path is a path indicating where the results of the command |
- are to be written. The results will be a file containing a JSON |
- object with one or more of following fields: |
+ - "test_targets": A list of the labels for targets that are needed to run |
+ the tests we wish to run. |
+ |
+ - "additional_compile_targets": A list of the labels for targets that we |
+ wish to rebuild, but aren't necessarily needed for testing. The important |
+ difference between this field and "test_targets" is that if an item in |
+ the additional_compile_targets list refers to a group, then any |
+ dependencies of that group will be returned if they are out of date, but |
+ the group itself does not need to be. If the dependencies themselves are |
+ groups, the same filtering is repeated. This filtering can be used to |
+ avoid rebuilding dependencies of a group that are unaffected by the input |
+ files. The list may also contain the string "all" to refer to a |
+ pseudo-group that contains every root target in the build graph. |
+ |
+ This filtering behavior is also known as "pruning" the list of compile |
+ targets. |
+ |
+ output_path is a path indicating where the results of the command are to be |
+ written. The results will be a file containing a JSON object with one or more |
+ of following fields: |
- "compile_targets": A list of the labels derived from the input |
- compile_targets list that are affected by the input files. |
- Due to the way the filtering works for compile targets as |
- described above, this list may contain targets that do not appear |
- in the input list. |
+ compile_targets list that are affected by the input files. Due to the way |
+ the filtering works for compile targets as described above, this list may |
+ contain targets that do not appear in the input list. |
- - "test_targets": A list of the labels from the input |
- test_targets list that are affected by the input files. This list |
- will be a proper subset of the input list. |
+ - "test_targets": A list of the labels from the input test_targets list that |
+ are affected by the input files. This list will be a proper subset of the |
+ input list. |
- - "invalid_targets": A list of any names from the input that |
- do not exist in the build graph. If this list is non-empty, |
- the "error" field will also be set to "Invalid targets". |
+ - "invalid_targets": A list of any names from the input that do not exist in |
+ the build graph. If this list is non-empty, the "error" field will also be |
+ set to "Invalid targets". |
- "status": A string containing one of three values: |
- "Found dependency" |
- "No dependency" |
- - "Found dependency (all)" |
+ - "Found dependency (all) " |
- In the first case, the lists returned in compile_targets and |
- test_targets should be passed to ninja to build. In the second |
- case, nothing was affected and no build is necessary. In the third |
- case, GN could not determine the correct answer and returned the |
- input as the output in order to be safe. |
+ In the first case, the lists returned in compile_targets and test_targets |
+ should be passed to ninja to build. In the second case, nothing was |
+ affected and no build is necessary. In the third case, GN could not |
+ determine the correct answer and returned the input as the output in order |
+ to be safe. |
- - "error": This will only be present if an error occurred, and |
- will contain a string describing the error. This includes cases |
- where the input file is not in the right format, or contains |
- invalid targets. |
- The command returns 1 if it is unable to read the input file or write |
- the output file, or if there is something wrong with the build such |
- that gen would also fail, and 0 otherwise. In particular, it returns |
- 0 even if the "error" key is non-empty and a non-fatal error |
- occurred. In other words, it tries really hard to always write |
- something to the output JSON and convey errors that way rather than |
- via return codes. |
+ - "error": This will only be present if an error occurred, and will contain |
+ a string describing the error. This includes cases where the input file is |
+ not in the right format, or contains invalid targets. |
+ The command returns 1 if it is unable to read the input file or write the |
+ output file, or if there is something wrong with the build such that gen |
+ would also fail, and 0 otherwise. In particular, it returns 0 even if the |
+ "error" key is non-empty and a non-fatal error occurred. In other words, it |
+ tries really hard to always write something to the output JSON and convey |
+ errors that way rather than via return codes. |
``` |
## **gn args <out_dir> [\--list] [\--short] [\--args]** |
@@ -334,41 +315,41 @@ |
### **Usage** |
``` |
gn args <out_dir> |
- Open the arguments for the given build directory in an editor |
- (as specified by the EDITOR environment variable). If the given |
- build directory doesn't exist, it will be created and an empty |
- args file will be opened in the editor. You would type something |
- like this into that file: |
+ Open the arguments for the given build directory in an editor (as |
+ specified by the EDITOR environment variable). If the given build |
+ directory doesn't exist, it will be created and an empty args file will |
+ be opened in the editor. You would type something like this into that |
+ file: |
enable_doom_melon=false |
os="android" |
- Note: you can edit the build args manually by editing the file |
- "args.gn" in the build directory and then running |
- "gn gen <out_dir>". |
+ Note: you can edit the build args manually by editing the file "args.gn" |
+ in the build directory and then running "gn gen <out_dir>". |
gn args <out_dir> --list[=<exact_arg>] [--short] |
- Lists all build arguments available in the current configuration, |
- or, if an exact_arg is specified for the list flag, just that one |
- build argument. |
- |
- The output will list the declaration location, default value, and |
- comment preceeding the declaration. If --short is specified, |
- only the names and values will be printed. |
- |
- If the out_dir is specified, the build configuration will be |
- taken from that build directory. The reason this is needed is that |
- the definition of some arguments is dependent on the build |
- configuration, so setting some values might add, remove, or change |
- the default values for other arguments. Specifying your exact |
- configuration allows the proper arguments to be displayed. |
- |
- Instead of specifying the out_dir, you can also use the |
- command-line flag to specify the build configuration: |
+ Lists all build arguments available in the current configuration, or, if |
+ an exact_arg is specified for the list flag, just that one build |
+ argument. |
+ |
+ The output will list the declaration location, default value, and comment |
+ preceeding the declaration. If --short is specified, only the names and |
+ values will be printed. |
+ |
+ If the out_dir is specified, the build configuration will be taken from |
+ that build directory. The reason this is needed is that the definition of |
+ some arguments is dependent on the build configuration, so setting some |
+ values might add, remove, or change the default values for other |
+ arguments. Specifying your exact configuration allows the proper |
+ arguments to be displayed. |
+ |
+ Instead of specifying the out_dir, you can also use the command-line flag |
+ to specify the build configuration: |
--args=<exact list of args to use> |
``` |
### **Examples** |
+ |
``` |
gn args out/Debug |
Opens an editor with the args for out/Debug. |
@@ -378,7 +359,8 @@ |
build. |
gn args out/Debug --list=target_cpu |
- Prints information about the "target_cpu" argument for the out/Debug |
+ Prints information about the "target_cpu" argument for the " |
+ "out/Debug |
build. |
gn args --list --args="os=\"android\" enable_doom_melon=true" |
@@ -386,22 +368,20 @@ |
given arguments set (which may affect the values of other |
arguments). |
- |
``` |
## **gn check <out_dir> [<label_pattern>] [\--force]** |
``` |
- GN's include header checker validates that the includes for C-like |
- source files match the build dependency graph. |
+ GN's include header checker validates that the includes for C-like source |
+ files match the build dependency graph. |
- "gn check" is the same thing as "gn gen" with the "--check" flag |
- except that this command does not write out any build files. It's |
- intended to be an easy way to manually trigger include file checking. |
+ "gn check" is the same thing as "gn gen" with the "--check" flag except that |
+ this command does not write out any build files. It's intended to be an easy |
+ way to manually trigger include file checking. |
- The <label_pattern> can take exact labels or patterns that match more |
- than one (although not general regular expressions). If specified, |
- only those matching targets will be checked. See |
- "gn help label_pattern" for details. |
+ The <label_pattern> can take exact labels or patterns that match more than |
+ one (although not general regular expressions). If specified, only those |
+ matching targets will be checked. See "gn help label_pattern" for details. |
``` |
@@ -409,96 +389,92 @@ |
``` |
--force |
- Ignores specifications of "check_includes = false" and checks |
- all target's files that match the target label. |
+ Ignores specifications of "check_includes = false" and checks all |
+ target's files that match the target label. |
``` |
### **What gets checked** |
``` |
- The .gn file may specify a list of targets to be checked. Only these |
- targets will be checked if no label_pattern is specified on the |
- command line. Otherwise, the command-line list is used instead. See |
- "gn help dotfile". |
+ The .gn file may specify a list of targets to be checked. Only these targets |
+ will be checked if no label_pattern is specified on the command line. |
+ Otherwise, the command-line list is used instead. See "gn help dotfile". |
- Targets can opt-out from checking with "check_includes = false" |
- (see "gn help check_includes"). |
+ Targets can opt-out from checking with "check_includes = false" (see |
+ "gn help check_includes"). |
For targets being checked: |
- - GN opens all C-like source files in the targets to be checked and |
- scans the top for includes. |
+ - GN opens all C-like source files in the targets to be checked and scans |
+ the top for includes. |
- Includes with a "nogncheck" annotation are skipped (see |
"gn help nogncheck"). |
- - Only includes using "quotes" are checked. <brackets> are assumed |
- to be system includes. |
+ - Only includes using "quotes" are checked. <brackets> are assumed to be |
+ system includes. |
- - Include paths are assumed to be relative to either the source root |
- or the "root_gen_dir" and must include all the path components. |
- (It might be nice in the future to incorporate GN's knowledge of |
- the include path to handle other include styles.) |
+ - Include paths are assumed to be relative to either the source root or the |
+ "root_gen_dir" and must include all the path components. (It might be |
+ nice in the future to incorporate GN's knowledge of the include path to |
+ handle other include styles.) |
- - GN does not run the preprocessor so will not understand |
- conditional includes. |
+ - GN does not run the preprocessor so will not understand conditional |
+ includes. |
- - Only includes matching known files in the build are checked: |
- includes matching unknown paths are ignored. |
+ - Only includes matching known files in the build are checked: includes |
+ matching unknown paths are ignored. |
For an include to be valid: |
- - The included file must be in the current target, or there must |
- be a path following only public dependencies to a target with the |
- file in it ("gn path" is a good way to diagnose problems). |
+ - The included file must be in the current target, or there must be a path |
+ following only public dependencies to a target with the file in it |
+ ("gn path" is a good way to diagnose problems). |
- - There can be multiple targets with an included file: only one |
- needs to be valid for the include to be allowed. |
+ - There can be multiple targets with an included file: only one needs to be |
+ valid for the include to be allowed. |
- - If there are only "sources" in a target, all are considered to |
- be public and can be included by other targets with a valid public |
- dependency path. |
+ - If there are only "sources" in a target, all are considered to be public |
+ and can be included by other targets with a valid public dependency path. |
- - If a target lists files as "public", only those files are |
- able to be included by other targets. Anything in the sources |
- will be considered private and will not be includable regardless |
- of dependency paths. |
+ - If a target lists files as "public", only those files are able to be |
+ included by other targets. Anything in the sources will be considered |
+ private and will not be includable regardless of dependency paths. |
- - Ouptuts from actions are treated like public sources on that |
- target. |
+ - Ouptuts from actions are treated like public sources on that target. |
- - A target can include headers from a target that depends on it |
- if the other target is annotated accordingly. See |
- "gn help allow_circular_includes_from". |
+ - A target can include headers from a target that depends on it if the |
+ other target is annotated accordingly. See "gn help |
+ allow_circular_includes_from". |
``` |
### **Advice on fixing problems** |
``` |
- If you have a third party project that uses relative includes, |
- it's generally best to exclude that target from checking altogether |
- via "check_includes = false". |
+ If you have a third party project that uses relative includes, it's generally |
+ best to exclude that target from checking altogether via |
+ "check_includes = false". |
- If you have conditional includes, make sure the build conditions |
- and the preprocessor conditions match, and annotate the line with |
- "nogncheck" (see "gn help nogncheck" for an example). |
+ If you have conditional includes, make sure the build conditions and the |
+ preprocessor conditions match, and annotate the line with "nogncheck" (see |
+ "gn help nogncheck" for an example). |
If two targets are hopelessly intertwined, use the |
- "allow_circular_includes_from" annotation. Ideally each should have |
- identical dependencies so configs inherited from those dependencies |
- are consistent (see "gn help allow_circular_includes_from"). |
+ "allow_circular_includes_from" annotation. Ideally each should have identical |
+ dependencies so configs inherited from those dependencies are consistent (see |
+ "gn help allow_circular_includes_from"). |
- If you have a standalone header file or files that need to be shared |
- between a few targets, you can consider making a source_set listing |
- only those headers as public sources. With only header files, the |
- source set will be a no-op from a build perspective, but will give a |
- central place to refer to those headers. That source set's files |
- will still need to pass "gn check" in isolation. |
+ If you have a standalone header file or files that need to be shared between |
+ a few targets, you can consider making a source_set listing only those |
+ headers as public sources. With only header files, the source set will be a |
+ no-op from a build perspective, but will give a central place to refer to |
+ those headers. That source set's files will still need to pass "gn check" in |
+ isolation. |
- In rare cases it makes sense to list a header in more than one |
- target if it could be considered conceptually a member of both. |
+ In rare cases it makes sense to list a header in more than one target if it |
+ could be considered conceptually a member of both. |
``` |
@@ -514,7 +490,6 @@ |
gn check out/Default "//foo/* |
Check only the files in targets in the //foo directory tree. |
- |
``` |
## **gn clean <out_dir>** |
@@ -524,15 +499,16 @@ |
``` |
-## **gn desc <out_dir> <label or pattern> [<what to show>] [\--blame] [\--format=json]** |
+## **gn desc <out_dir> <label or pattern> [<what to show>] [\--blame] "** |
+### **[\--format=json]** |
``` |
- Displays information about a given target or config. The build |
- build parameters will be taken for the build in the given <out_dir>. |
+ Displays information about a given target or config. The build build |
+ parameters will be taken for the build in the given <out_dir>. |
- The <label or pattern> can be a target label, a config label, or a |
- label pattern (see "gn help label_pattern"). A label pattern will |
- only match targets. |
+ The <label or pattern> can be a target label, a config label, or a label |
+ pattern (see "gn help label_pattern"). A label pattern will only match |
+ targets. |
``` |
@@ -567,19 +543,17 @@ |
visibility |
runtime_deps |
- Compute all runtime deps for the given target. This is a |
- computed list and does not correspond to any GN variable, unlike |
- most other values here. |
+ Compute all runtime deps for the given target. This is a computed list |
+ and does not correspond to any GN variable, unlike most other values |
+ here. |
- The output is a list of file names relative to the build |
- directory. See "gn help runtime_deps" for how this is computed. |
- This also works with "--blame" to see the source of the |
- dependency. |
+ The output is a list of file names relative to the build directory. See |
+ "gn help runtime_deps" for how this is computed. This also works with |
+ "--blame" to see the source of the dependency. |
``` |
### **Shared flags** |
- |
``` |
--all-toolchains |
Normally only inputs in the default toolchain will be included. |
@@ -599,47 +573,42 @@ |
``` |
--blame |
- Used with any value specified on a config, this will name |
- the config that cause that target to get the flag. This doesn't |
- currently work for libs and lib_dirs because those are inherited |
- and are more complicated to figure out the blame (patches |
- welcome). |
+ Used with any value specified on a config, this will name the config that |
+ cause that target to get the flag. This doesn't currently work for libs |
+ and lib_dirs because those are inherited and are more complicated to |
+ figure out the blame (patches welcome). |
``` |
### **Configs** |
``` |
- The "configs" section will list all configs that apply. For targets |
- this will include configs specified in the "configs" variable of |
- the target, and also configs pushed onto this target via public |
- or "all dependent" configs. |
+ The "configs" section will list all configs that apply. For targets this will |
+ include configs specified in the "configs" variable of the target, and also |
+ configs pushed onto this target via public or "all dependent" configs. |
- Configs can have child configs. Specifying --tree will show the |
- hierarchy. |
+ Configs can have child configs. Specifying --tree will show the hierarchy. |
``` |
### **Printing outputs** |
``` |
- The "outputs" section will list all outputs that apply, including |
- the outputs computed from the tool definition (eg for "executable", |
- "static_library", ... targets). |
+ The "outputs" section will list all outputs that apply, including the outputs |
+ computed from the tool definition (eg for "executable", "static_library", ... |
+ targets). |
``` |
### **Printing deps** |
``` |
- Deps will include all public, private, and data deps (TODO this could |
- be clarified and enhanced) sorted in order applying. The following |
- may be used: |
+ Deps will include all public, private, and data deps (TODO this could be |
+ clarified and enhanced) sorted in order applying. The following may be used: |
--all |
- Collects all recursive dependencies and prints a sorted flat list. |
- Also usable with --tree (see below). |
- |
+ Collects all recursive dependencies and prints a sorted flat list. Also |
+ usable with --tree (see below). |
--as=(buildfile|label|output) |
How to print targets. |
@@ -658,31 +627,27 @@ |
ignored. |
--tree |
- Print a dependency tree. By default, duplicates will be elided |
- with "..." but when --all and -tree are used together, no |
- eliding will be performed. |
+ Print a dependency tree. By default, duplicates will be elided with "..." |
+ but when --all and -tree are used together, no eliding will be performed. |
- The "deps", "public_deps", and "data_deps" will all be |
- included in the tree. |
- |
- Tree output can not be used with the filtering or output flags: |
- --as, --type, --testonly. |
+ The "deps", "public_deps", and "data_deps" will all be included in the |
+ tree. |
+ Tree output can not be used with the filtering or output flags: --as, |
+ --type, --testonly. |
--type=(action|copy|executable|group|loadable_module|shared_library| |
source_set|static_library) |
Restrict outputs to targets matching the given type. If |
unspecified, no filtering will be performed. |
- |
``` |
### **Note** |
``` |
- This command will show the full name of directories and source files, |
- but when directories and source paths are written to the build file, |
- they will be adjusted to be relative to the build directory. So the |
- values for paths displayed by this command won't match (but should |
- mean the same thing). |
+ This command will show the full name of directories and source files, but |
+ when directories and source paths are written to the build file, they will be |
+ adjusted to be relative to the build directory. So the values for paths |
+ displayed by this command won't match (but should mean the same thing). |
``` |
@@ -700,16 +665,15 @@ |
Shows defines set for the //base:base target, annotated by where |
each one was set from. |
- |
``` |
## **gn format [\--dump-tree] (\--stdin | <build_file>)** |
``` |
Formats .gn file to a standard format. |
- The contents of some lists ('sources', 'deps', etc.) will be sorted to |
- a canonical order. To suppress this, you can add a comment of the form |
- "# NOSORT" immediately preceeding the assignment. e.g. |
+ The contents of some lists ('sources', 'deps', etc.) will be sorted to a |
+ canonical order. To suppress this, you can add a comment of the form "# |
+ NOSORT" immediately preceeding the assignment. e.g. |
# NOSORT |
sources = [ |
@@ -723,39 +687,38 @@ |
``` |
--dry-run |
- Does not change or output anything, but sets the process exit code |
- based on whether output would be different than what's on disk. |
- This is useful for presubmit/lint-type checks. |
+ Does not change or output anything, but sets the process exit code based |
+ on whether output would be different than what's on disk. This is useful |
+ for presubmit/lint-type checks. |
- Exit code 0: successful format, matches on disk. |
- Exit code 1: general failure (parse error, etc.) |
- Exit code 2: successful format, but differs from on disk. |
--dump-tree |
- For debugging, dumps the parse tree to stdout and does not update |
- the file or print formatted output. |
+ For debugging, dumps the parse tree to stdout and does not update the |
+ file or print formatted output. |
--stdin |
- Read input from stdin and write to stdout rather than update |
- a file in-place. |
+ Read input from stdin and write to stdout rather than update a file |
+ in-place. |
``` |
### **Examples** |
``` |
gn format //some/BUILD.gn |
- gn format some\BUILD.gn |
+ gn format some\\BUILD.gn |
gn format /abspath/some/BUILD.gn |
gn format --stdin |
- |
``` |
## **gn gen**: Generate ninja files. |
``` |
gn gen [<ide options>] <out_dir> |
- Generates ninja files from the current tree and puts them in the given |
- output directory. |
+ Generates ninja files from the current tree and puts them in the given output |
+ directory. |
The output directory can be a source-repo-absolute path name such as: |
//out/foo |
@@ -783,10 +746,10 @@ |
"json" - JSON file containing target information |
--filters=<path_prefixes> |
- Semicolon-separated list of label patterns used to limit the set |
- of generated projects (see "gn help label_pattern"). Only |
- matching targets and their dependencies will be included in the |
- solution. Only used for Visual Studio, Xcode and JSON. |
+ Semicolon-separated list of label patterns used to limit the set of |
+ generated projects (see "gn help label_pattern"). Only matching targets |
+ and their dependencies will be included in the solution. Only used for |
+ Visual Studio, Xcode and JSON. |
``` |
@@ -794,13 +757,12 @@ |
``` |
--sln=<file_name> |
- Override default sln file name ("all"). Solution file is written |
- to the root build directory. |
+ Override default sln file name ("all"). Solution file is written to the |
+ root build directory. |
--no-deps |
- Don't include targets dependencies to the solution. Changes the |
- way how --filters option works. Only directly matching targets are |
- included. |
+ Don't include targets dependencies to the solution. Changes the way how |
+ --filters option works. Only directly matching targets are included. |
``` |
@@ -808,18 +770,17 @@ |
``` |
--workspace=<file_name> |
- Override defaut workspace file name ("all"). The workspace file |
- is written to the root build directory. |
+ Override defaut workspace file name ("all"). The workspace file is |
+ written to the root build directory. |
--ninja-extra-args=<string> |
This string is passed without any quoting to the ninja invocation |
- command-line. Can be used to configure ninja flags, like "-j" if |
- using goma for example. |
+ command-line. Can be used to configure ninja flags, like "-j" if using |
+ goma for example. |
--root-target=<target_name> |
- Name of the target corresponding to "All" target in Xcode. |
- If unset, "All" invokes ninja without any target |
- and builds everything. |
+ Name of the target corresponding to "All" target in Xcode. If unset, |
+ "All" invokes ninja without any target and builds everything. |
``` |
@@ -827,9 +788,9 @@ |
``` |
--root-target=<target_name> |
- Name of the root target for which the QtCreator project will be |
- generated to contain files of it and its dependencies. If unset, |
- the whole build graph will be emitted. |
+ Name of the root target for which the QtCreator project will be generated |
+ to contain files of it and its dependencies. If unset, the whole build |
+ graph will be emitted. |
``` |
@@ -837,45 +798,41 @@ |
### **Eclipse IDE Support** |
``` |
- GN DOES NOT generate Eclipse CDT projects. Instead, it generates a |
- settings file which can be imported into an Eclipse CDT project. The |
- XML file contains a list of include paths and defines. Because GN does |
- not generate a full .cproject definition, it is not possible to |
- properly define includes/defines for each file individually. |
- Instead, one set of includes/defines is generated for the entire |
- project. This works fairly well but may still result in a few indexer |
- issues here and there. |
+ GN DOES NOT generate Eclipse CDT projects. Instead, it generates a settings |
+ file which can be imported into an Eclipse CDT project. The XML file contains |
+ a list of include paths and defines. Because GN does not generate a full |
+ .cproject definition, it is not possible to properly define includes/defines |
+ for each file individually. Instead, one set of includes/defines is generated |
+ for the entire project. This works fairly well but may still result in a few |
+ indexer issues here and there. |
``` |
### **Generic JSON Output** |
``` |
- Dumps target information to JSON file and optionally invokes python |
- script on generated file. |
- See comments at the beginning of json_project_writer.cc and |
+ Dumps target information to JSON file and optionally invokes python script on |
+ generated file. See comments at the beginning of json_project_writer.cc and |
desc_builder.cc for overview of JSON file format. |
--json-file-name=<json_file_name> |
Overrides default file name (project.json) of generated JSON file. |
--json-ide-script=<path_to_python_script> |
- Executes python script after the JSON file is generated. |
- Path can be project absolute (//), system absolute (/) or |
- relative, in which case the output directory will be base. |
- Path to generated JSON file will be first argument when invoking |
- script. |
+ Executes python script after the JSON file is generated. Path can be |
+ project absolute (//), system absolute (/) or relative, in which case the |
+ output directory will be base. Path to generated JSON file will be first |
+ argument when invoking script. |
--json-ide-script-args=<argument> |
Optional second argument that will passed to executed script. |
- |
``` |
## **gn help <anything>** |
``` |
- Yo dawg, I heard you like help on your help so I put help on the help |
- in the help. |
+ Yo dawg, I heard you like help on your help so I put help on the help in the |
+ help. |
You can also use "all" as the parameter to get all help at once. |
@@ -895,20 +852,18 @@ |
gn help --markdown all |
Dump all help to stdout in markdown format. |
- |
``` |
## **gn ls <out_dir> [<label_pattern>] [\--all-toolchains] [\--as=...]** |
``` |
[--type=...] [--testonly=...] |
- Lists all targets matching the given pattern for the given build |
- directory. By default, only targets in the default toolchain will |
- be matched unless a toolchain is explicitly supplied. |
+ Lists all targets matching the given pattern for the given build directory. |
+ By default, only targets in the default toolchain will be matched unless a |
+ toolchain is explicitly supplied. |
- If the label pattern is unspecified, list all targets. The label |
- pattern is not a general regular expression (see |
- "gn help label_pattern"). If you need more complex expressions, |
- pipe the result through grep. |
+ If the label pattern is unspecified, list all targets. The label pattern is |
+ not a general regular expression (see "gn help label_pattern"). If you need |
+ more complex expressions, pipe the result through grep. |
``` |
@@ -973,32 +928,30 @@ |
Lists all variants of the target //base:base (it may be referenced |
in multiple toolchains). |
- |
``` |
## **gn path <out_dir> <target_one> <target_two>** |
``` |
- Finds paths of dependencies between two targets. Each unique path |
- will be printed in one group, and groups will be separate by newlines. |
- The two targets can appear in either order (paths will be found going |
- in either direction). |
+ Finds paths of dependencies between two targets. Each unique path will be |
+ printed in one group, and groups will be separate by newlines. The two |
+ targets can appear in either order (paths will be found going in either |
+ direction). |
- By default, a single path will be printed. If there is a path with |
- only public dependencies, the shortest public path will be printed. |
- Otherwise, the shortest path using either public or private |
- dependencies will be printed. If --with-data is specified, data deps |
- will also be considered. If there are multiple shortest paths, an |
- arbitrary one will be selected. |
+ By default, a single path will be printed. If there is a path with only |
+ public dependencies, the shortest public path will be printed. Otherwise, the |
+ shortest path using either public or private dependencies will be printed. If |
+ --with-data is specified, data deps will also be considered. If there are |
+ multiple shortest paths, an arbitrary one will be selected. |
``` |
### **Interesting paths** |
``` |
- In a large project, there can be 100's of millions of unique paths |
- between a very high level and a common low-level target. To make the |
- output more useful (and terminate in a reasonable time), GN will not |
- revisit sub-paths previously known to lead to the target. |
+ In a large project, there can be 100's of millions of unique paths between a |
+ very high level and a common low-level target. To make the output more useful |
+ (and terminate in a reasonable time), GN will not revisit sub-paths |
+ previously known to lead to the target. |
``` |
@@ -1006,16 +959,16 @@ |
``` |
--all |
- Prints all "interesting" paths found rather than just the first |
- one. Public paths will be printed first in order of increasing |
- length, followed by non-public paths in order of increasing length. |
+ Prints all "interesting" paths found rather than just the first one. |
+ Public paths will be printed first in order of increasing length, followed |
+ by non-public paths in order of increasing length. |
--public |
Considers only public paths. Can't be used with --with-data. |
--with-data |
- Additionally follows data deps. Without this flag, only public and |
- private linked deps will be followed. Can't be used with --public. |
+ Additionally follows data deps. Without this flag, only public and private |
+ linked deps will be followed. Can't be used with --public. |
``` |
@@ -1024,34 +977,32 @@ |
``` |
gn path out/Default //base //tools/gn |
- |
``` |
## **gn refs <out_dir> (<label_pattern>|<label>|<file>|@<response_file>)* [\--all]** |
``` |
[--all-toolchains] [--as=...] [--testonly=...] [--type=...] |
- Finds reverse dependencies (which targets reference something). The |
- input is a list containing: |
+ Finds reverse dependencies (which targets reference something). The input is |
+ a list containing: |
- Target label: The result will be which targets depend on it. |
- - Config label: The result will be which targets list the given |
- config in its "configs" or "public_configs" list. |
+ - Config label: The result will be which targets list the given config in |
+ its "configs" or "public_configs" list. |
- - Label pattern: The result will be which targets depend on any |
- target matching the given pattern. Patterns will not match |
- configs. These are not general regular expressions, see |
- "gn help label_pattern" for details. |
+ - Label pattern: The result will be which targets depend on any target |
+ matching the given pattern. Patterns will not match configs. These are not |
+ general regular expressions, see "gn help label_pattern" for details. |
- - File name: The result will be which targets list the given file in |
- its "inputs", "sources", "public", "data", or "outputs". |
- Any input that does not contain wildcards and does not match a |
- target or a config will be treated as a file. |
+ - File name: The result will be which targets list the given file in its |
+ "inputs", "sources", "public", "data", or "outputs". Any input that does |
+ not contain wildcards and does not match a target or a config will be |
+ treated as a file. |
- - Response file: If the input starts with an "@", it will be |
- interpreted as a path to a file containing a list of labels or |
- file names, one per line. This allows us to handle long lists |
- of inputs without worrying about command line limits. |
+ - Response file: If the input starts with an "@", it will be interpreted as |
+ a path to a file containing a list of labels or file names, one per line. |
+ This allows us to handle long lists of inputs without worrying about |
+ command line limits. |
``` |
@@ -1060,13 +1011,12 @@ |
``` |
--all |
When used without --tree, will recurse and display all unique |
- dependencies of the given targets. For example, if the input is |
- a target, this will output all targets that depend directly or |
- indirectly on the input. If the input is a file, this will output |
- all targets that depend directly or indirectly on that file. |
+ dependencies of the given targets. For example, if the input is a target, |
+ this will output all targets that depend directly or indirectly on the |
+ input. If the input is a file, this will output all targets that depend |
+ directly or indirectly on that file. |
When used with --tree, turns off eliding to show a complete tree. |
- |
--all-toolchains |
Normally only inputs in the default toolchain will be included. |
This switch will turn on matching all toolchains. |
@@ -1089,29 +1039,26 @@ |
root build directory. |
-q |
- Quiet. If nothing matches, don't print any output. Without this |
- option, if there are no matches there will be an informational |
- message printed which might interfere with scripts processing the |
- output. |
- |
+ Quiet. If nothing matches, don't print any output. Without this option, if |
+ there are no matches there will be an informational message printed which |
+ might interfere with scripts processing the output. |
--testonly=(true|false) |
Restrict outputs to targets with the testonly flag set |
accordingly. When unspecified, the target's testonly flags are |
ignored. |
--tree |
- Outputs a reverse dependency tree from the given target. |
- Duplicates will be elided. Combine with --all to see a full |
- dependency tree. |
- |
- Tree output can not be used with the filtering or output flags: |
- --as, --type, --testonly. |
+ Outputs a reverse dependency tree from the given target. Duplicates will |
+ be elided. Combine with --all to see a full dependency tree. |
+ Tree output can not be used with the filtering or output flags: --as, |
+ --type, --testonly. |
--type=(action|copy|executable|group|loadable_module|shared_library| |
source_set|static_library) |
Restrict outputs to targets matching the given type. If |
unspecified, no filtering will be performed. |
+ |
``` |
### **Examples (target input)** |
@@ -1158,39 +1105,37 @@ |
Display the executable file names of all test executables |
potentially affected by a change to the given file. |
- |
``` |
## **action**: Declare a target that runs a script a single time. |
``` |
- This target type allows you to run a script a single time to produce |
- one or more output files. If you want to run a script once for each of |
- a set of input files, see "gn help action_foreach". |
+ This target type allows you to run a script a single time to produce one or |
+ more output files. If you want to run a script once for each of a set of |
+ input files, see "gn help action_foreach". |
``` |
### **Inputs** |
``` |
- In an action the "sources" and "inputs" are treated the same: |
- they're both input dependencies on script execution with no special |
- handling. If you want to pass the sources to your script, you must do |
- so explicitly by including them in the "args". Note also that this |
- means there is no special handling of paths since GN doesn't know |
- which of the args are paths and not. You will want to use |
- rebase_path() to convert paths to be relative to the root_build_dir. |
- |
- You can dynamically write input dependencies (for incremental rebuilds |
- if an input file changes) by writing a depfile when the script is run |
- (see "gn help depfile"). This is more flexible than "inputs". |
+ In an action the "sources" and "inputs" are treated the same: they're both |
+ input dependencies on script execution with no special handling. If you want |
+ to pass the sources to your script, you must do so explicitly by including |
+ them in the "args". Note also that this means there is no special handling of |
+ paths since GN doesn't know which of the args are paths and not. You will |
+ want to use rebase_path() to convert paths to be relative to the |
+ root_build_dir. |
- If the command line length is very long, you can use response files |
- to pass args to your script. See "gn help response_file_contents". |
+ You can dynamically write input dependencies (for incremental rebuilds if an |
+ input file changes) by writing a depfile when the script is run (see "gn help |
+ depfile"). This is more flexible than "inputs". |
- It is recommended you put inputs to your script in the "sources" |
- variable, and stuff like other Python files required to run your |
- script in the "inputs" variable. |
+ If the command line length is very long, you can use response files to pass |
+ args to your script. See "gn help response_file_contents". |
+ It is recommended you put inputs to your script in the "sources" variable, |
+ and stuff like other Python files required to run your script in the "inputs" |
+ variable. |
The "deps" and "public_deps" for an action will always be |
completed before any part of the action is run so it can depend on |
the output of previous steps. The "data_deps" will be built if the |
@@ -1203,9 +1148,8 @@ |
### **Outputs** |
``` |
- You should specify files created by your script by specifying them in |
- the "outputs". |
- |
+ You should specify files created by your script by specifying them in the |
+ "outputs". |
The script will be executed with the given arguments with the current |
directory being that of the root build directory. If you pass files |
to your script, see "gn help rebase_path" for how to convert |
@@ -1216,7 +1160,6 @@ |
``` |
### **File name handling** |
- |
``` |
All output files must be inside the output directory of the build. |
You would generally use |$target_out_dir| or |$target_gen_dir| to |
@@ -1242,48 +1185,44 @@ |
sources = [ "my_configuration.txt" ] |
outputs = [ "$target_gen_dir/insightful_output.txt" ] |
- # Our script imports this Python file so we want to rebuild if it |
- # changes. |
+ # Our script imports this Python file so we want to rebuild if it changes. |
inputs = [ "helper_library.py" ] |
- # Note that we have to manually pass the sources to our script if |
- # the script needs them as inputs. |
+ # Note that we have to manually pass the sources to our script if the |
+ # script needs them as inputs. |
args = [ "--out", rebase_path(target_gen_dir, root_build_dir) ] + |
rebase_path(sources, root_build_dir) |
} |
- |
``` |
## **action_foreach**: Declare a target that runs a script over a set of files. |
``` |
- This target type allows you to run a script once-per-file over a set |
- of sources. If you want to run a script once that takes many files as |
- input, see "gn help action". |
+ This target type allows you to run a script once-per-file over a set of |
+ sources. If you want to run a script once that takes many files as input, see |
+ "gn help action". |
``` |
### **Inputs** |
``` |
- The script will be run once per file in the "sources" variable. The |
- "outputs" variable should specify one or more files with a source |
- expansion pattern in it (see "gn help source_expansion"). The output |
- file(s) for each script invocation should be unique. Normally you |
- use "{{source_name_part}}" in each output file. |
- |
- If your script takes additional data as input, such as a shared |
- configuration file or a Python module it uses, those files should be |
- listed in the "inputs" variable. These files are treated as |
- dependencies of each script invocation. |
+ The script will be run once per file in the "sources" variable. The "outputs" |
+ variable should specify one or more files with a source expansion pattern in |
+ it (see "gn help source_expansion"). The output file(s) for each script |
+ invocation should be unique. Normally you use "{{source_name_part}}" in each |
+ output file. |
- If the command line length is very long, you can use response files |
- to pass args to your script. See "gn help response_file_contents". |
+ If your script takes additional data as input, such as a shared configuration |
+ file or a Python module it uses, those files should be listed in the "inputs" |
+ variable. These files are treated as dependencies of each script invocation. |
- You can dynamically write input dependencies (for incremental rebuilds |
- if an input file changes) by writing a depfile when the script is run |
- (see "gn help depfile"). This is more flexible than "inputs". |
+ If the command line length is very long, you can use response files to pass |
+ args to your script. See "gn help response_file_contents". |
+ You can dynamically write input dependencies (for incremental rebuilds if an |
+ input file changes) by writing a depfile when the script is run (see "gn help |
+ depfile"). This is more flexible than "inputs". |
The "deps" and "public_deps" for an action will always be |
completed before any part of the action is run so it can depend on |
the output of previous steps. The "data_deps" will be built if the |
@@ -1294,7 +1233,6 @@ |
``` |
### **Outputs** |
- |
``` |
The script will be executed with the given arguments with the current |
directory being that of the root build directory. If you pass files |
@@ -1306,7 +1244,6 @@ |
``` |
### **File name handling** |
- |
``` |
All output files must be inside the output directory of the build. |
You would generally use |$target_out_dir| or |$target_gen_dir| to |
@@ -1327,8 +1264,8 @@ |
### **Example** |
``` |
- # Runs the script over each IDL file. The IDL script will generate |
- # both a .cc and a .h file for each input. |
+ # Runs the script over each IDL file. The IDL script will generate both a .cc |
+ # and a .h file for each input. |
action_foreach("my_idl") { |
script = "idl_processor.py" |
sources = [ "foo.idl", "bar.idl" ] |
@@ -1341,9 +1278,9 @@ |
outputs = [ "$target_gen_dir/{{source_name_part}}.h", |
"$target_gen_dir/{{source_name_part}}.cc" ] |
- # Note that since "args" is opaque to GN, if you specify paths |
- # here, you will need to convert it to be relative to the build |
- # directory using "rebase_path()". |
+ # Note that since "args" is opaque to GN, if you specify paths here, you |
+ # will need to convert it to be relative to the build directory using |
+ # rebase_path(). |
args = [ |
"{{source}}", |
"-o", |
@@ -1351,8 +1288,6 @@ |
"/{{source_name_part}}.h" ] |
} |
- |
- |
``` |
## **assert**: Assert an expression is true at generation time. |
@@ -1365,28 +1300,27 @@ |
``` |
-### **Examples**: |
+### **Examples** |
+ |
``` |
assert(is_win) |
- assert(defined(sources), "Sources must be defined") |
- |
+ assert(defined(sources), "Sources must be defined"); |
``` |
## **bundle_data**: [iOS/OS X] Declare a target without output. |
``` |
- This target type allows to declare data that is required at runtime. |
- It is used to inform "create_bundle" targets of the files to copy |
- into generated bundle, see "gn help create_bundle" for help. |
+ This target type allows to declare data that is required at runtime. It is |
+ used to inform "create_bundle" targets of the files to copy into generated |
+ bundle, see "gn help create_bundle" for help. |
- The target must define a list of files as "sources" and a single |
- "outputs". If there are multiple files, source expansions must be |
- used to express the output. The output must reference a file inside |
- of {{bundle_root_dir}}. |
+ The target must define a list of files as "sources" and a single "outputs". |
+ If there are multiple files, source expansions must be used to express the |
+ output. The output must reference a file inside of {{bundle_root_dir}}. |
This target can be used on all platforms though it is designed only to |
- generate iOS/OS X bundle. In cross-platform projects, it is advised to |
- put it behind iOS/Mac conditionals. |
+ generate iOS/OS X bundle. In cross-platform projects, it is advised to put it |
+ behind iOS/Mac conditionals. |
See "gn help create_bundle" for more information. |
@@ -1429,33 +1363,30 @@ |
] |
} |
- |
``` |
## **config**: Defines a configuration object. |
``` |
- Configuration objects can be applied to targets and specify sets of |
- compiler flags, includes, defines, etc. They provide a way to |
- conveniently group sets of this configuration information. |
+ Configuration objects can be applied to targets and specify sets of compiler |
+ flags, includes, defines, etc. They provide a way to conveniently group sets |
+ of this configuration information. |
A config is referenced by its label just like a target. |
- The values in a config are additive only. If you want to remove a flag |
- you need to remove the corresponding config that sets it. The final |
- set of flags, defines, etc. for a target is generated in this order: |
+ The values in a config are additive only. If you want to remove a flag you |
+ need to remove the corresponding config that sets it. The final set of flags, |
+ defines, etc. for a target is generated in this order: |
- 1. The values specified directly on the target (rather than using a |
- config. |
+ 1. The values specified directly on the target (rather than using a config. |
2. The configs specified in the target's "configs" list, in order. |
- 3. Public_configs from a breadth-first traversal of the dependency |
+ 3. Public_configs from a breadth-first traversal of the dependency tree in |
+ the order that the targets appear in "deps". |
+ 4. All dependent configs from a breadth-first traversal of the dependency |
tree in the order that the targets appear in "deps". |
- 4. All dependent configs from a breadth-first traversal of the |
- dependency tree in the order that the targets appear in "deps". |
``` |
### **Variables valid in a config definition** |
- |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
@@ -1483,27 +1414,24 @@ |
configs = [ ":myconfig" ] |
} |
- |
``` |
## **copy**: Declare a target that copies files. |
### **File name handling** |
``` |
- All output files must be inside the output directory of the build. |
- You would generally use |$target_out_dir| or |$target_gen_dir| to |
- reference the output or generated intermediate file directories, |
- respectively. |
+ All output files must be inside the output directory of the build. You would |
+ generally use |$target_out_dir| or |$target_gen_dir| to reference the output |
+ or generated intermediate file directories, respectively. |
- Both "sources" and "outputs" must be specified. Sources can include |
- as many files as you want, but there can only be one item in the |
- outputs list (plural is used for the name for consistency with |
- other target types). |
+ Both "sources" and "outputs" must be specified. Sources can include as many |
+ files as you want, but there can only be one item in the outputs list (plural |
+ is used for the name for consistency with other target types). |
- If there is more than one source file, your output name should specify |
- a mapping from each source file to an output file name using source |
- expansion (see "gn help source_expansion"). The placeholders will |
- look like "{{source_name_part}}", for example. |
+ If there is more than one source file, your output name should specify a |
+ mapping from each source file to an output file name using source expansion |
+ (see "gn help source_expansion"). The placeholders will look like |
+ "{{source_name_part}}", for example. |
``` |
@@ -1516,39 +1444,36 @@ |
outputs = [ "$target_out_dir/mydll.dll" ] |
} |
- # Write a rule to copy several files to the target generated files |
- # directory. |
+ # Write a rule to copy several files to the target generated files directory. |
copy("myfiles") { |
sources = [ "data1.dat", "data2.dat", "data3.dat" ] |
- # Use source expansion to generate output files with the |
- # corresponding file names in the gen dir. This will just copy each |
- # file. |
+ # Use source expansion to generate output files with the corresponding file |
+ # names in the gen dir. This will just copy each file. |
outputs = [ "$target_gen_dir/{{source_file_part}}" ] |
} |
- |
``` |
## **create_bundle**: [iOS/OS X] Build an OS X / iOS bundle. |
``` |
This target generates an iOS/OS X bundle (which is a directory with a |
- well-know structure). This target does not define any sources, instead |
- they are computed from all "bundle_data" target this one depends on |
- transitively (the recursion stops at "create_bundle" targets). |
+ well-know structure). This target does not define any sources, instead they |
+ are computed from all "bundle_data" target this one depends on transitively |
+ (the recursion stops at "create_bundle" targets). |
- The "bundle_*_dir" properties must be defined. They will be used for |
- the expansion of {{bundle_*_dir}} rules in "bundle_data" outputs. |
+ The "bundle_*_dir" properties must be defined. They will be used for the |
+ expansion of {{bundle_*_dir}} rules in "bundle_data" outputs. |
This target can be used on all platforms though it is designed only to |
- generate iOS/OS X bundle. In cross-platform projects, it is advised to |
- put it behind iOS/Mac conditionals. |
+ generate iOS/OS X bundle. In cross-platform projects, it is advised to put it |
+ behind iOS/Mac conditionals. |
- If a create_bundle is specified as a data_deps for another target, the |
- bundle is considered a leaf, and its public and private dependencies |
- will not contribute to any data or data_deps. Required runtime |
- dependencies should be placed in the bundle. A create_bundle can |
- declare its own explicit data and data_deps, however. |
+ If a create_bundle is specified as a data_deps for another target, the bundle |
+ is considered a leaf, and its public and private dependencies will not |
+ contribute to any data or data_deps. Required runtime dependencies should be |
+ placed in the bundle. A create_bundle can declare its own explicit data and |
+ data_deps, however. |
``` |
@@ -1556,17 +1481,17 @@ |
``` |
Some bundle needs to be code signed as part of the build (on iOS all |
- application needs to be code signed to run on a device). The code |
- signature can be configured via the code_signing_script variable. |
+ application needs to be code signed to run on a device). The code signature |
+ can be configured via the code_signing_script variable. |
- If set, code_signing_script is the path of a script that invoked after |
- all files have been moved into the bundle. The script must not change |
- any file in the bundle, but may add new files. |
+ If set, code_signing_script is the path of a script that invoked after all |
+ files have been moved into the bundle. The script must not change any file in |
+ the bundle, but may add new files. |
- If code_signing_script is defined, then code_signing_outputs must also |
- be defined and non-empty to inform when the script needs to be re-run. |
- The code_signing_args will be passed as is to the script (so path have |
- to be rebased) and additional inputs may be listed with the variable |
+ If code_signing_script is defined, then code_signing_outputs must also be |
+ defined and non-empty to inform when the script needs to be re-run. The |
+ code_signing_args will be passed as is to the script (so path have to be |
+ rebased) and additional inputs may be listed with the variable |
code_signing_sources. |
``` |
@@ -1585,9 +1510,9 @@ |
### **Example** |
``` |
- # Defines a template to create an application. On most platform, this |
- # is just an alias for an "executable" target, but on iOS/OS X, it |
- # builds an application bundle. |
+ # Defines a template to create an application. On most platform, this is just |
+ # an alias for an "executable" target, but on iOS/OS X, it builds an |
+ # application bundle. |
template("app") { |
if (!is_ios && !is_mac) { |
executable(target_name) { |
@@ -1675,47 +1600,45 @@ |
} |
} |
- |
``` |
## **declare_args**: Declare build arguments. |
``` |
- Introduces the given arguments into the current scope. If they are |
- not specified on the command line or in a toolchain's arguments, |
- the default values given in the declare_args block will be used. |
- However, these defaults will not override command-line values. |
+ Introduces the given arguments into the current scope. If they are not |
+ specified on the command line or in a toolchain's arguments, the default |
+ values given in the declare_args block will be used. However, these defaults |
+ will not override command-line values. |
See also "gn help buildargs" for an overview. |
The precise behavior of declare args is: |
- 1. The declare_arg block executes. Any variables in the enclosing |
- scope are available for reading. |
+ 1. The declare_arg block executes. Any variables in the enclosing scope are |
+ available for reading. |
- 2. At the end of executing the block, any variables set within that |
- scope are saved globally as build arguments, with their current |
- values being saved as the "default value" for that argument. |
+ 2. At the end of executing the block, any variables set within that scope |
+ are saved globally as build arguments, with their current values being |
+ saved as the "default value" for that argument. |
- 3. User-defined overrides are applied. Anything set in "gn args" |
- now overrides any default values. The resulting set of variables |
- is promoted to be readable from the following code in the file. |
+ 3. User-defined overrides are applied. Anything set in "gn args" now |
+ overrides any default values. The resulting set of variables is promoted |
+ to be readable from the following code in the file. |
This has some ramifications that may not be obvious: |
- - You should not perform difficult work inside a declare_args block |
- since this only sets a default value that may be discarded. In |
- particular, don't use the result of exec_script() to set the |
- default value. If you want to have a script-defined default, set |
- some default "undefined" value like [], "", or -1, and after |
- the declare_args block, call exec_script if the value is unset by |
- the user. |
- |
- - Any code inside of the declare_args block will see the default |
- values of previous variables defined in the block rather than |
- the user-overridden value. This can be surprising because you will |
- be used to seeing the overridden value. If you need to make the |
- default value of one arg dependent on the possibly-overridden |
- value of another, write two separate declare_args blocks: |
+ - You should not perform difficult work inside a declare_args block since |
+ this only sets a default value that may be discarded. In particular, |
+ don't use the result of exec_script() to set the default value. If you |
+ want to have a script-defined default, set some default "undefined" value |
+ like [], "", or -1, and after the declare_args block, call exec_script if |
+ the value is unset by the user. |
+ |
+ - Any code inside of the declare_args block will see the default values of |
+ previous variables defined in the block rather than the user-overridden |
+ value. This can be surprising because you will be used to seeing the |
+ overridden value. If you need to make the default value of one arg |
+ dependent on the possibly-overridden value of another, write two separate |
+ declare_args blocks: |
declare_args() { |
enable_foo = true |
@@ -1737,9 +1660,8 @@ |
If you want to override the (default disabled) Doom Melon: |
gn --args="enable_doom_melon=true enable_teleporter=false" |
- This also sets the teleporter, but it's already defaulted to on so |
- it will have no effect. |
- |
+ This also sets the teleporter, but it's already defaulted to on so it will |
+ have no effect. |
``` |
## **defined**: Returns whether an identifier is defined. |
@@ -1750,18 +1672,18 @@ |
You can pass an identifier: |
defined(foo) |
- which will return true or false depending on whether foo is defined in |
- the current scope. |
+ which will return true or false depending on whether foo is defined in the |
+ current scope. |
You can also check a named scope: |
defined(foo.bar) |
- which will return true or false depending on whether bar is defined in |
- the named scope foo. It will throw an error if foo is not defined or |
- is not a scope. |
+ which will return true or false depending on whether bar is defined in the |
+ named scope foo. It will throw an error if foo is not defined or is not a |
+ scope. |
``` |
-### **Example**: |
+### **Example** |
``` |
template("mytemplate") { |
@@ -1777,7 +1699,6 @@ |
} |
} |
- |
``` |
## **exec_script**: Synchronously run a script and return the output. |
@@ -1788,13 +1709,13 @@ |
file_dependencies = []) |
Runs the given script, returning the stdout of the script. The build |
- generation will fail if the script does not exist or returns a nonzero |
- exit code. |
+ generation will fail if the script does not exist or returns a nonzero exit |
+ code. |
- The current directory when executing the script will be the root |
- build directory. If you are passing file names, you will want to use |
- the rebase_path() function to make file names relative to this |
- path (see "gn help rebase_path"). |
+ The current directory when executing the script will be the root build |
+ directory. If you are passing file names, you will want to use the |
+ rebase_path() function to make file names relative to this path (see "gn help |
+ rebase_path"). |
``` |
@@ -1802,48 +1723,45 @@ |
``` |
filename: |
- File name of python script to execute. Non-absolute names will |
- be treated as relative to the current build file. |
+ File name of python script to execute. Non-absolute names will be treated |
+ as relative to the current build file. |
arguments: |
- A list of strings to be passed to the script as arguments. |
- May be unspecified or the empty list which means no arguments. |
+ A list of strings to be passed to the script as arguments. May be |
+ unspecified or the empty list which means no arguments. |
input_conversion: |
- Controls how the file is read and parsed. |
- See "gn help input_conversion". |
+ Controls how the file is read and parsed. See "gn help input_conversion". |
- If unspecified, defaults to the empty string which causes the |
- script result to be discarded. exec script will return None. |
+ If unspecified, defaults to the empty string which causes the script |
+ result to be discarded. exec script will return None. |
dependencies: |
- (Optional) A list of files that this script reads or otherwise |
- depends on. These dependencies will be added to the build result |
- such that if any of them change, the build will be regenerated and |
- the script will be re-run. |
+ (Optional) A list of files that this script reads or otherwise depends |
+ on. These dependencies will be added to the build result such that if any |
+ of them change, the build will be regenerated and the script will be |
+ re-run. |
- The script itself will be an implicit dependency so you do not |
- need to list it. |
+ The script itself will be an implicit dependency so you do not need to |
+ list it. |
``` |
-### **Example**: |
+### **Example** |
``` |
all_lines = exec_script( |
"myscript.py", [some_input], "list lines", |
[ rebase_path("data_file.txt", root_build_dir) ]) |
- # This example just calls the script with no arguments and discards |
- # the result. |
+ # This example just calls the script with no arguments and discards the |
+ # result. |
exec_script("//foo/bar/myscript.py") |
- |
``` |
## **executable**: Declare an executable target. |
### **Variables** |
- |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
@@ -1858,21 +1776,21 @@ |
## **foreach**: Iterate over a list. |
``` |
- foreach(<loop_var>, <list>) { |
- <loop contents> |
- } |
+ foreach(<loop_var>, <list>) { |
+ <loop contents> |
+ } |
- Executes the loop contents block over each item in the list, |
- assigning the loop_var to each item in sequence. The loop_var will be |
- a copy so assigning to it will not mutate the list. |
+ Executes the loop contents block over each item in the list, assigning the |
+ loop_var to each item in sequence. The loop_var will be a copy so assigning |
+ to it will not mutate the list. |
- The block does not introduce a new scope, so that variable assignments |
- inside the loop will be visible once the loop terminates. |
+ The block does not introduce a new scope, so that variable assignments inside |
+ the loop will be visible once the loop terminates. |
- The loop variable will temporarily shadow any existing variables with |
- the same name for the duration of the loop. After the loop terminates |
- the loop variable will no longer be in scope, and the previous value |
- (if any) will be restored. |
+ The loop variable will temporarily shadow any existing variables with the |
+ same name for the duration of the loop. After the loop terminates the loop |
+ variable will no longer be in scope, and the previous value (if any) will be |
+ restored. |
``` |
@@ -1889,7 +1807,6 @@ |
b |
c |
- |
``` |
## **forward_variables_from**: Copies variables from a different scope. |
@@ -1897,48 +1814,48 @@ |
forward_variables_from(from_scope, variable_list_or_star, |
variable_to_not_forward_list = []) |
- Copies the given variables from the given scope to the local scope |
- if they exist. This is normally used in the context of templates to |
- use the values of variables defined in the template invocation to |
- a template-defined target. |
+ Copies the given variables from the given scope to the local scope if they |
+ exist. This is normally used in the context of templates to use the values of |
+ variables defined in the template invocation to a template-defined target. |
- The variables in the given variable_list will be copied if they exist |
- in the given scope or any enclosing scope. If they do not exist, |
- nothing will happen and they be left undefined in the current scope. |
+ The variables in the given variable_list will be copied if they exist in the |
+ given scope or any enclosing scope. If they do not exist, nothing will happen |
+ and they be left undefined in the current scope. |
- As a special case, if the variable_list is a string with the value of |
- "*", all variables from the given scope will be copied. "*" only |
- copies variables set directly on the from_scope, not enclosing ones. |
- Otherwise it would duplicate all global variables. |
+ As a special case, if the variable_list is a string with the value of "*", |
+ all variables from the given scope will be copied. "*" only copies variables |
+ set directly on the from_scope, not enclosing ones. Otherwise it would |
+ duplicate all global variables. |
- When an explicit list of variables is supplied, if the variable exists |
- in the current (destination) scope already, an error will be thrown. |
- If "*" is specified, variables in the current scope will be |
- clobbered (the latter is important because most targets have an |
- implicit configs list, which means it wouldn't work at all if it |
- didn't clobber). |
+ When an explicit list of variables is supplied, if the variable exists in the |
+ current (destination) scope already, an error will be thrown. If "*" is |
+ specified, variables in the current scope will be clobbered (the latter is |
+ important because most targets have an implicit configs list, which means it |
+ wouldn't work at all if it didn't clobber). |
- The sources assignment filter (see "gn help set_sources_assignment_filter") |
- is never applied by this function. It's assumed than any desired |
- filtering was already done when sources was set on the from_scope. |
+ The sources assignment filter (see "gn help " |
+ "set_sources_assignment_filter") |
+ is never applied by this function. It's assumed than any desired filtering |
+ was already done when sources was set on the from_scope. |
- If variables_to_not_forward_list is non-empty, then it must contains |
- a list of variable names that will not be forwarded. This is mostly |
- useful when variable_list_or_star has a value of "*". |
+ If variables_to_not_forward_list is non-empty, then it must contains a list |
+ of variable names that will not be forwarded. This is mostly useful when |
+ variable_list_or_star has a value of "*". |
``` |
### **Examples** |
``` |
- # This is a common action template. It would invoke a script with |
- # some given parameters, and wants to use the various types of deps |
- # and the visibility from the invoker if it's defined. It also injects |
- # an additional dependency to all targets. |
+ # This is a common action template. It would invoke a script with some given |
+ # parameters, and wants to use the various types of deps and the visibility |
+ # from the invoker if it's defined. It also injects an additional dependency |
+ # to all targets. |
template("my_test") { |
action(target_name) { |
forward_variables_from(invoker, [ "data_deps", "deps", |
- "public_deps", "visibility" ]) |
+ "public_deps", "visibility" " |
+ "]) |
# Add our test code to the dependencies. |
# "deps" may or may not be defined at this point. |
if (defined(deps)) { |
@@ -1949,15 +1866,15 @@ |
} |
} |
- # This is a template around either a target whose type depends on a |
- # global variable. It forwards all values from the invoker. |
+ # This is a template around either a target whose type depends on a global |
+ # variable. It forwards all values from the invoker. |
template("my_wrapper") { |
target(my_wrapper_target_type, target_name) { |
forward_variables_from(invoker, "*") |
} |
} |
- # A template that wraps another. It adds behavior based on one |
+ # A template that wraps another. It adds behavior based on one |
# variable, and forwards all others to the nested target. |
template("my_ios_test_app") { |
ios_test_app(target_name) { |
@@ -1969,17 +1886,15 @@ |
} |
} |
- |
``` |
## **get_label_info**: Get an attribute from a target's label. |
``` |
get_label_info(target_label, what) |
- Given the label of a target, returns some attribute of that target. |
- The target need not have been previously defined in the same file, |
- since none of the attributes depend on the actual target definition, |
- only the label itself. |
+ Given the label of a target, returns some attribute of that target. The |
+ target need not have been previously defined in the same file, since none of |
+ the attributes depend on the actual target definition, only the label itself. |
See also "gn help get_target_outputs". |
@@ -1990,48 +1905,42 @@ |
``` |
"name" |
The short name of the target. This will match the value of the |
- "target_name" variable inside that target's declaration. For the |
- label "//foo/bar:baz" this will return "baz". |
+ "target_name" variable inside that target's declaration. For the label |
+ "//foo/bar:baz" this will return "baz". |
"dir" |
- The directory containing the target's definition, with no slash at |
- the end. For the label "//foo/bar:baz" this will return |
- "//foo/bar". |
+ The directory containing the target's definition, with no slash at the |
+ end. For the label "//foo/bar:baz" this will return "//foo/bar". |
"target_gen_dir" |
- The generated file directory for the target. This will match the |
- value of the "target_gen_dir" variable when inside that target's |
- declaration. |
+ The generated file directory for the target. This will match the value of |
+ the "target_gen_dir" variable when inside that target's declaration. |
"root_gen_dir" |
- The root of the generated file tree for the target. This will |
- match the value of the "root_gen_dir" variable when inside that |
- target's declaration. |
+ The root of the generated file tree for the target. This will match the |
+ value of the "root_gen_dir" variable when inside that target's |
+ declaration. |
"target_out_dir |
- The output directory for the target. This will match the |
- value of the "target_out_dir" variable when inside that target's |
- declaration. |
+ The output directory for the target. This will match the value of the |
+ "target_out_dir" variable when inside that target's declaration. |
"root_out_dir" |
- The root of the output file tree for the target. This will |
- match the value of the "root_out_dir" variable when inside that |
- target's declaration. |
+ The root of the output file tree for the target. This will match the |
+ value of the "root_out_dir" variable when inside that target's |
+ declaration. |
"label_no_toolchain" |
- The fully qualified version of this label, not including the |
- toolchain. For the input ":bar" it might return |
- "//foo:bar". |
+ The fully qualified version of this label, not including the toolchain. |
+ For the input ":bar" it might return "//foo:bar". |
"label_with_toolchain" |
- The fully qualified version of this label, including the |
- toolchain. For the input ":bar" it might return |
- "//foo:bar(//toolchain:x64)". |
+ The fully qualified version of this label, including the toolchain. For |
+ the input ":bar" it might return "//foo:bar(//toolchain:x64)". |
"toolchain" |
The label of the toolchain. This will match the value of the |
- "current_toolchain" variable when inside that target's |
- declaration. |
+ "current_toolchain" variable when inside that target's declaration. |
``` |
@@ -2044,17 +1953,15 @@ |
get_label_info("//foo/bar:baz", "gen_dir") |
# Returns string "//out/Debug/gen/foo/bar". |
- |
``` |
## **get_path_info**: Extract parts of a file or directory name. |
``` |
get_path_info(input, what) |
- The first argument is either a string representing a file or |
- directory name, or a list of such strings. If the input is a list |
- the return value will be a list containing the result of applying the |
- rule to each item in the input. |
+ The first argument is either a string representing a file or directory name, |
+ or a list of such strings. If the input is a list the return value will be a |
+ list containing the result of applying the rule to each item in the input. |
``` |
@@ -2062,9 +1969,9 @@ |
``` |
"file" |
- The substring after the last slash in the path, including the name |
- and extension. If the input ends in a slash, the empty string will |
- be returned. |
+ The substring after the last slash in the path, including the name and |
+ extension. If the input ends in a slash, the empty string will be |
+ returned. |
"foo/bar.txt" => "bar.txt" |
"bar.txt" => "bar.txt" |
"foo/" => "" |
@@ -2077,8 +1984,8 @@ |
"foo/" => "" |
"extension" |
- The substring following the last period following the last slash, |
- or the empty string if not found. The period is not included. |
+ The substring following the last period following the last slash, or the |
+ empty string if not found. The period is not included. |
"foo/bar.txt" => "txt" |
"foo/bar" => "" |
@@ -2088,33 +1995,32 @@ |
"//foo/bar" => "//foo" |
"foo" => "." |
- The result will never end in a slash, so if the resulting |
- is empty, the system ("/") or source ("//") roots, a "." |
- will be appended such that it is always legal to append a slash |
- and a filename and get a valid path. |
+ The result will never end in a slash, so if the resulting is empty, the |
+ system ("/") or source ("//") roots, a "." will be appended such that it |
+ is always legal to append a slash and a filename and get a valid path. |
"out_dir" |
- The output file directory corresponding to the path of the |
- given file, not including a trailing slash. |
+ The output file directory corresponding to the path of the given file, |
+ not including a trailing slash. |
"//foo/bar/baz.txt" => "//out/Default/obj/foo/bar" |
"gen_dir" |
- The generated file directory corresponding to the path of the |
- given file, not including a trailing slash. |
+ The generated file directory corresponding to the path of the given file, |
+ not including a trailing slash. |
"//foo/bar/baz.txt" => "//out/Default/gen/foo/bar" |
"abspath" |
- The full absolute path name to the file or directory. It will be |
- resolved relative to the current directory, and then the source- |
- absolute version will be returned. If the input is system- |
- absolute, the same input will be returned. |
+ The full absolute path name to the file or directory. It will be resolved |
+ relative to the current directory, and then the source- absolute version |
+ will be returned. If the input is system- absolute, the same input will |
+ be returned. |
"foo/bar.txt" => "//mydir/foo/bar.txt" |
"foo/" => "//mydir/foo/" |
"//foo/bar" => "//foo/bar" (already absolute) |
"/usr/include" => "/usr/include" (already absolute) |
- If you want to make the path relative to another directory, or to |
- be system-absolute, see rebase_path(). |
+ If you want to make the path relative to another directory, or to be |
+ system-absolute, see rebase_path(). |
``` |
@@ -2128,8 +2034,7 @@ |
# result will be "//foo/bar" |
# Extract the source-absolute directory name, |
- result = get_path_info(get_path_info(path, "dir"), "abspath") |
- |
+ result = get_path_info(get_path_info(path, "dir"), "abspath" |
``` |
## **get_target_outputs**: [file list] Get the list of outputs from a target. |
@@ -2137,43 +2042,43 @@ |
``` |
get_target_outputs(target_label) |
- Returns a list of output files for the named target. The named target |
- must have been previously defined in the current file before this |
- function is called (it can't reference targets in other files because |
- there isn't a defined execution order, and it obviously can't |
- reference targets that are defined after the function call). |
+ Returns a list of output files for the named target. The named target must |
+ have been previously defined in the current file before this function is |
+ called (it can't reference targets in other files because there isn't a |
+ defined execution order, and it obviously can't reference targets that are |
+ defined after the function call). |
- Only copy and action targets are supported. The outputs from binary |
- targets will depend on the toolchain definition which won't |
- necessarily have been loaded by the time a given line of code has run, |
- and source sets and groups have no useful output file. |
+ Only copy and action targets are supported. The outputs from binary targets |
+ will depend on the toolchain definition which won't necessarily have been |
+ loaded by the time a given line of code has run, and source sets and groups |
+ have no useful output file. |
``` |
### **Return value** |
``` |
- The names in the resulting list will be absolute file paths (normally |
- like "//out/Debug/bar.exe", depending on the build directory). |
+ The names in the resulting list will be absolute file paths (normally like |
+ "//out/Debug/bar.exe", depending on the build directory). |
- action targets: this will just return the files specified in the |
- "outputs" variable of the target. |
+ action targets: this will just return the files specified in the "outputs" |
+ variable of the target. |
- action_foreach targets: this will return the result of applying |
- the output template to the sources (see "gn help source_expansion"). |
- This will be the same result (though with guaranteed absolute file |
- paths), as process_file_template will return for those inputs |
- (see "gn help process_file_template"). |
+ action_foreach targets: this will return the result of applying the output |
+ template to the sources (see "gn help source_expansion"). This will be the |
+ same result (though with guaranteed absolute file paths), as |
+ process_file_template will return for those inputs (see "gn help |
+ process_file_template"). |
- binary targets (executables, libraries): this will return a list |
- of the resulting binary file(s). The "main output" (the actual |
- binary or library) will always be the 0th element in the result. |
- Depending on the platform and output type, there may be other output |
- files as well (like import libraries) which will follow. |
+ binary targets (executables, libraries): this will return a list of the |
+ resulting binary file(s). The "main output" (the actual binary or library) |
+ will always be the 0th element in the result. Depending on the platform and |
+ output type, there may be other output files as well (like import libraries) |
+ which will follow. |
- source sets and groups: this will return a list containing the path of |
- the "stamp" file that Ninja will produce once all outputs are |
- generated. This probably isn't very useful. |
+ source sets and groups: this will return a list containing the path of the |
+ "stamp" file that Ninja will produce once all outputs are generated. This |
+ probably isn't very useful. |
``` |
@@ -2191,45 +2096,39 @@ |
sources = get_target_outputs(":my_action") |
} |
- |
``` |
## **getenv**: Get an environment variable. |
``` |
value = getenv(env_var_name) |
- Returns the value of the given enironment variable. If the value is |
- not found, it will try to look up the variable with the "opposite" |
- case (based on the case of the first letter of the variable), but |
- is otherwise case-sensitive. |
+ Returns the value of the given enironment variable. If the value is not |
+ found, it will try to look up the variable with the "opposite" case (based on |
+ the case of the first letter of the variable), but is otherwise |
+ case-sensitive. |
- If the environment variable is not found, the empty string will be |
- returned. Note: it might be nice to extend this if we had the concept |
- of "none" in the language to indicate lookup failure. |
+ If the environment variable is not found, the empty string will be returned. |
+ Note: it might be nice to extend this if we had the concept of "none" in the |
+ language to indicate lookup failure. |
``` |
-### **Example**: |
+### **Example** |
``` |
home_dir = getenv("HOME") |
- |
``` |
## **group**: Declare a named group of targets. |
``` |
- This target type allows you to create meta-targets that just collect a |
- set of dependencies into one named target. Groups can additionally |
- specify configs that apply to their dependents. |
- |
- Depending on a group is exactly like depending directly on that |
- group's deps. |
+ This target type allows you to create meta-targets that just collect a set of |
+ dependencies into one named target. Groups can additionally specify configs |
+ that apply to their dependents. |
``` |
### **Variables** |
- |
``` |
Deps: data_deps, deps, public_deps |
Dependent configs: all_dependent_configs, public_configs |
@@ -2246,38 +2145,36 @@ |
] |
} |
- |
``` |
## **import**: Import a file into the current scope. |
``` |
- The import command loads the rules and variables resulting from |
- executing the given file into the current scope. |
+ The import command loads the rules and variables resulting from executing the |
+ given file into the current scope. |
By convention, imported files are named with a .gni extension. |
- An import is different than a C++ "include". The imported file is |
- executed in a standalone environment from the caller of the import |
- command. The results of this execution are cached for other files that |
- import the same .gni file. |
+ An import is different than a C++ "include". The imported file is executed in |
+ a standalone environment from the caller of the import command. The results |
+ of this execution are cached for other files that import the same .gni file. |
- Note that you can not import a BUILD.gn file that's otherwise used |
- in the build. Files must either be imported or implicitly loaded as |
- a result of deps rules, but not both. |
+ Note that you can not import a BUILD.gn file that's otherwise used in the |
+ build. Files must either be imported or implicitly loaded as a result of deps |
+ rules, but not both. |
- The imported file's scope will be merged with the scope at the point |
- import was called. If there is a conflict (both the current scope and |
- the imported file define some variable or rule with the same name but |
- different value), a runtime error will be thrown. Therefore, it's good |
- practice to minimize the stuff that an imported file defines. |
+ The imported file's scope will be merged with the scope at the point import |
+ was called. If there is a conflict (both the current scope and the imported |
+ file define some variable or rule with the same name but different value), a |
+ runtime error will be thrown. Therefore, it's good practice to minimize the |
+ stuff that an imported file defines. |
- Variables and templates beginning with an underscore '_' are |
- considered private and will not be imported. Imported files can use |
- such variables for internal computation without affecting other files. |
+ Variables and templates beginning with an underscore '_' are considered |
+ private and will not be imported. Imported files can use such variables for |
+ internal computation without affecting other files. |
``` |
-### **Examples**: |
+### **Examples** |
``` |
import("//build/rules/idl_compilation_rule.gni") |
@@ -2285,23 +2182,21 @@ |
# Looks in the current directory. |
import("my_vars.gni") |
- |
``` |
## **loadable_module**: Declare a loadable module target. |
``` |
- This target type allows you to create an object file that is (and can |
- only be) loaded and unloaded at runtime. |
+ This target type allows you to create an object file that is (and can only |
+ be) loaded and unloaded at runtime. |
- A loadable module will be specified on the linker line for targets |
- listing the loadable module in its "deps". If you don't want this |
- (if you don't need to dynamically load the library at runtime), then |
- you should use a "shared_library" target type instead. |
+ A loadable module will be specified on the linker line for targets listing |
+ the loadable module in its "deps". If you don't want this (if you don't need |
+ to dynamically load the library at runtime), then you should use a |
+ "shared_library" target type instead. |
``` |
### **Variables** |
- |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
@@ -2352,7 +2247,6 @@ |
} |
} |
- |
``` |
## **print**: Prints to the console. |
@@ -2360,21 +2254,21 @@ |
Prints all arguments to the console separated by spaces. A newline is |
automatically appended to the end. |
- This function is intended for debugging. Note that build files are run |
- in parallel so you may get interleaved prints. A buildfile may also |
- be executed more than once in parallel in the context of different |
- toolchains so the prints from one file may be duplicated or |
+ This function is intended for debugging. Note that build files are run in |
+ parallel so you may get interleaved prints. A buildfile may also be executed |
+ more than once in parallel in the context of different toolchains so the |
+ prints from one file may be duplicated or |
interleaved with itself. |
``` |
-### **Examples**: |
+### **Examples** |
+ |
``` |
print("Hello world") |
print(sources, deps) |
- |
``` |
## **process_file_template**: Do template expansion over a list of files. |
@@ -2385,27 +2279,27 @@ |
returning the result of applying each template to each source. This is |
typically used for computing output file names from input files. |
- In most cases, get_target_outputs() will give the same result with |
- shorter, more maintainable code. This function should only be used |
- when that function can't be used (like there's no target or the target |
- is defined in another build file). |
+ In most cases, get_target_outputs() will give the same result with shorter, |
+ more maintainable code. This function should only be used when that function |
+ can't be used (like there's no target or the target is defined in another |
+ build file). |
``` |
-### **Arguments**: |
+### **Arguments** |
``` |
The source_list is a list of file names. |
- The template can be a string or a list. If it is a list, multiple |
- output strings are generated for each input. |
+ The template can be a string or a list. If it is a list, multiple output |
+ strings are generated for each input. |
- The template should contain source expansions to which each name in |
- the source list is applied. See "gn help source_expansion". |
+ The template should contain source expansions to which each name in the |
+ source list is applied. See "gn help source_expansion". |
``` |
-### **Example**: |
+### **Example** |
``` |
sources = [ |
@@ -2423,35 +2317,33 @@ |
"//out/Debug/bar.cc" |
"//out/Debug/bar.h" ] |
- |
``` |
## **read_file**: Read a file into a variable. |
``` |
read_file(filename, input_conversion) |
- Whitespace will be trimmed from the end of the file. Throws an error |
- if the file can not be opened. |
+ Whitespace will be trimmed from the end of the file. Throws an error if the |
+ file can not be opened. |
``` |
-### **Arguments**: |
+### **Arguments** |
``` |
filename |
Filename to read, relative to the build file. |
input_conversion |
- Controls how the file is read and parsed. |
- See "gn help input_conversion". |
+ Controls how the file is read and parsed. See "gn help input_conversion". |
``` |
### **Example** |
+ |
``` |
lines = read_file("foo.txt", "list lines") |
- |
``` |
## **rebase_path**: Rebase a file or directory to another location. |
@@ -2460,27 +2352,24 @@ |
new_base = "", |
current_base = ".") |
- Takes a string argument representing a file name, or a list of such |
- strings and converts it/them to be relative to a different base |
- directory. |
+ Takes a string argument representing a file name, or a list of such strings |
+ and converts it/them to be relative to a different base directory. |
- When invoking the compiler or scripts, GN will automatically convert |
- sources and include directories to be relative to the build directory. |
- However, if you're passing files directly in the "args" array or |
- doing other manual manipulations where GN doesn't know something is |
- a file name, you will need to convert paths to be relative to what |
- your tool is expecting. |
+ When invoking the compiler or scripts, GN will automatically convert sources |
+ and include directories to be relative to the build directory. However, if |
+ you're passing files directly in the "args" array or doing other manual |
+ manipulations where GN doesn't know something is a file name, you will need |
+ to convert paths to be relative to what your tool is expecting. |
- The common case is to use this to convert paths relative to the |
- current directory to be relative to the build directory (which will |
- be the current directory when executing scripts). |
+ The common case is to use this to convert paths relative to the current |
+ directory to be relative to the build directory (which will be the current |
+ directory when executing scripts). |
- If you want to convert a file path to be source-absolute (that is, |
- beginning with a double slash like "//foo/bar"), you should use |
- the get_path_info() function. This function won't work because it will |
- always make relative paths, and it needs to support making paths |
- relative to the source root, so can't also generate source-absolute |
- paths without more special-cases. |
+ If you want to convert a file path to be source-absolute (that is, beginning |
+ with a double slash like "//foo/bar"), you should use the get_path_info() |
+ function. This function won't work because it will always make relative |
+ paths, and it needs to support making paths relative to the source root, so |
+ can't also generate source-absolute paths without more special-cases. |
``` |
@@ -2488,42 +2377,40 @@ |
``` |
input |
- A string or list of strings representing file or directory names |
- These can be relative paths ("foo/bar.txt"), system absolute |
- paths ("/foo/bar.txt"), or source absolute paths |
- ("//foo/bar.txt"). |
+ A string or list of strings representing file or directory names These |
+ can be relative paths ("foo/bar.txt"), system absolute paths |
+ ("/foo/bar.txt"), or source absolute paths ("//foo/bar.txt"). |
new_base |
- The directory to convert the paths to be relative to. This can be |
- an absolute path or a relative path (which will be treated |
- as being relative to the current BUILD-file's directory). |
+ The directory to convert the paths to be relative to. This can be an |
+ absolute path or a relative path (which will be treated as being relative |
+ to the current BUILD-file's directory). |
- As a special case, if new_base is the empty string (the default), |
- all paths will be converted to system-absolute native style paths |
- with system path separators. This is useful for invoking external |
- programs. |
+ As a special case, if new_base is the empty string (the default), all |
+ paths will be converted to system-absolute native style paths with system |
+ path separators. This is useful for invoking external programs. |
current_base |
- Directory representing the base for relative paths in the input. |
- If this is not an absolute path, it will be treated as being |
- relative to the current build file. Use "." (the default) to |
- convert paths from the current BUILD-file's directory. |
+ Directory representing the base for relative paths in the input. If this |
+ is not an absolute path, it will be treated as being relative to the |
+ current build file. Use "." (the default) to convert paths from the |
+ current BUILD-file's directory. |
``` |
### **Return value** |
``` |
- The return value will be the same type as the input value (either a |
- string or a list of strings). All relative and source-absolute file |
- names will be converted to be relative to the requested output |
- System-absolute paths will be unchanged. |
+ The return value will be the same type as the input value (either a string or |
+ a list of strings). All relative and source-absolute file names will be |
+ converted to be relative to the requested output System-absolute paths will |
+ be unchanged. |
Whether an output path will end in a slash will match whether the |
- corresponding input path ends in a slash. It will return "." or |
- "./" (depending on whether the input ends in a slash) to avoid |
- returning empty strings. This means if you want a root path |
- ("//" or "/") not ending in a slash, you can add a dot ("//."). |
+ corresponding input path ends in a slash. It will return "." or "./" |
+ (depending on whether the input ends in a slash) to avoid returning empty |
+ strings. This means if you want a root path ("//" or "/") not ending in a |
+ slash, you can add a dot ("//."). |
``` |
@@ -2537,14 +2424,14 @@ |
# Convert a file to be system absolute: |
foo = rebase_path("myfile.txt") |
- # Might produce "D:\source\project\myfile.txt" on Windows or |
+ # Might produce "D:\\source\\project\\myfile.txt" on Windows or |
# "/home/you/source/project/myfile.txt" on Linux. |
# Typical usage for converting to the build directory for a script. |
action("myscript") { |
- # Don't convert sources, GN will automatically convert these to be |
- # relative to the build directory when it constructs the command |
- # line for your script. |
+ # Don't convert sources, GN will automatically convert these to be relative |
+ # to the build directory when it constructs the command line for your |
+ # script. |
sources = [ "foo.txt", "bar.txt" ] |
# Extra file args passed manually need to be explicitly converted |
@@ -2557,31 +2444,30 @@ |
] + rebase_path(sources, root_build_dir) |
} |
- |
``` |
## **set_default_toolchain**: Sets the default toolchain name. |
``` |
set_default_toolchain(toolchain_label) |
- The given label should identify a toolchain definition (see |
- "help toolchain"). This toolchain will be used for all targets |
- unless otherwise specified. |
+ The given label should identify a toolchain definition (see "gn help |
+ toolchain"). This toolchain will be used for all targets unless otherwise |
+ specified. |
This function is only valid to call during the processing of the build |
configuration file. Since the build configuration file is processed |
- separately for each toolchain, this function will be a no-op when |
- called under any non-default toolchains. |
+ separately for each toolchain, this function will be a no-op when called |
+ under any non-default toolchains. |
- For example, the default toolchain should be appropriate for the |
- current environment. If the current environment is 32-bit and |
- somebody references a target with a 64-bit toolchain, we wouldn't |
- want processing of the build config file for the 64-bit toolchain to |
- reset the default toolchain to 64-bit, we want to keep it 32-bits. |
+ For example, the default toolchain should be appropriate for the current |
+ environment. If the current environment is 32-bit and somebody references a |
+ target with a 64-bit toolchain, we wouldn't want processing of the build |
+ config file for the 64-bit toolchain to reset the default toolchain to |
+ 64-bit, we want to keep it 32-bits. |
``` |
-### **Argument**: |
+### **Argument** |
``` |
toolchain_label |
@@ -2589,7 +2475,7 @@ |
``` |
-### **Example**: |
+### **Example** |
``` |
set_default_toolchain("//build/config/win:vs32") |
@@ -2600,21 +2486,20 @@ |
``` |
set_defaults(<target_type_name>) { <values...> } |
- Sets the default values for a given target type. Whenever |
- target_type_name is seen in the future, the values specified in |
- set_default's block will be copied into the current scope. |
+ Sets the default values for a given target type. Whenever target_type_name is |
+ seen in the future, the values specified in set_default's block will be |
+ copied into the current scope. |
- When the target type is used, the variable copying is very strict. |
- If a variable with that name is already in scope, the build will fail |
- with an error. |
+ When the target type is used, the variable copying is very strict. If a |
+ variable with that name is already in scope, the build will fail with an |
+ error. |
set_defaults can be used for built-in target types ("executable", |
- "shared_library", etc.) and custom ones defined via the "template" |
- command. It can be called more than once and the most recent call in |
- any scope will apply, but there is no way to refer to the previous |
- defaults and modify them (each call to set_defaults must supply a |
- complete list of all defaults it wants). If you want to share |
- defaults, store them in a separate variable. |
+ "shared_library", etc.) and custom ones defined via the "template" command. |
+ It can be called more than once and the most recent call in any scope will |
+ apply, but there is no way to refer to the previous defaults and modify them |
+ (each call to set_defaults must supply a complete list of all defaults it |
+ wants). If you want to share defaults, store them in a separate variable. |
``` |
@@ -2628,51 +2513,48 @@ |
static_library("mylib") |
# The configs will be auto-populated as above. You can remove it if |
# you don't want the default for a particular default: |
- configs -= "//tools/mything:settings" |
+ configs -= [ "//tools/mything:settings" ] |
} |
- |
``` |
## **set_sources_assignment_filter**: Set a pattern to filter source files. |
``` |
- The sources assignment filter is a list of patterns that remove files |
- from the list implicitly whenever the "sources" variable is |
- assigned to. This will do nothing for non-lists. |
+ The sources assignment filter is a list of patterns that remove files from |
+ the list implicitly whenever the "sources" variable is assigned to. This will |
+ do nothing for non-lists. |
This is intended to be used to globally filter out files with |
- platform-specific naming schemes when they don't apply, for example |
- you may want to filter out all "*_win.cc" files on non-Windows |
- platforms. |
+ platform-specific naming schemes when they don't apply, for example you may |
+ want to filter out all "*_win.cc" files on non-Windows platforms. |
- Typically this will be called once in the master build config script |
- to set up the filter for the current platform. Subsequent calls will |
- overwrite the previous values. |
+ Typically this will be called once in the master build config script to set |
+ up the filter for the current platform. Subsequent calls will overwrite the |
+ previous values. |
- If you want to bypass the filter and add a file even if it might |
- be filtered out, call set_sources_assignment_filter([]) to clear the |
- list of filters. This will apply until the current scope exits |
+ If you want to bypass the filter and add a file even if it might be filtered |
+ out, call set_sources_assignment_filter([]) to clear the list of filters. |
+ This will apply until the current scope exits |
``` |
### **How to use patterns** |
``` |
- File patterns are VERY limited regular expressions. They must match |
- the entire input string to be counted as a match. In regular |
- expression parlance, there is an implicit "^...$" surrounding your |
- input. If you want to match a substring, you need to use wildcards at |
- the beginning and end. |
+ File patterns are VERY limited regular expressions. They must match the |
+ entire input string to be counted as a match. In regular expression parlance, |
+ there is an implicit "^...$" surrounding your input. If you want to match a |
+ substring, you need to use wildcards at the beginning and end. |
There are only two special tokens understood by the pattern matcher. |
Everything else is a literal. |
- * Matches zero or more of any character. It does not depend on the |
- preceding character (in regular expression parlance it is |
- equivalent to ".*"). |
+ - "*" Matches zero or more of any character. It does not depend on the |
+ preceding character (in regular expression parlance it is equivalent to |
+ ".*"). |
- \b Matches a path boundary. This will match the beginning or end of |
- a string, or a slash. |
+ - "\b" Matches a path boundary. This will match the beginning or end of a |
+ string, or a slash. |
``` |
@@ -2702,21 +2584,19 @@ |
print(sources) |
# Will print [ "a.cc" ]. b_win one was filtered out. |
- |
``` |
## **shared_library**: Declare a shared library target. |
``` |
- A shared library will be specified on the linker line for targets |
- listing the shared library in its "deps". If you don't want this |
- (say you dynamically load the library at runtime), then you should |
- depend on the shared library via "data_deps" or, on Darwin |
- platforms, use a "loadable_module" target type instead. |
+ A shared library will be specified on the linker line for targets listing the |
+ shared library in its "deps". If you don't want this (say you dynamically |
+ load the library at runtime), then you should depend on the shared library |
+ via "data_deps" or, on Darwin platforms, use a "loadable_module" target type |
+ instead. |
``` |
### **Variables** |
- |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
@@ -2731,33 +2611,30 @@ |
## **source_set**: Declare a source set target. |
``` |
- A source set is a collection of sources that get compiled, but are not |
- linked to produce any kind of library. Instead, the resulting object |
- files are implicitly added to the linker line of all targets that |
- depend on the source set. |
+ A source set is a collection of sources that get compiled, but are not linked |
+ to produce any kind of library. Instead, the resulting object files are |
+ implicitly added to the linker line of all targets that depend on the source |
+ set. |
- In most cases, a source set will behave like a static library, except |
- no actual library file will be produced. This will make the build go |
- a little faster by skipping creation of a large static library, while |
- maintaining the organizational benefits of focused build targets. |
+ In most cases, a source set will behave like a static library, except no |
+ actual library file will be produced. This will make the build go a little |
+ faster by skipping creation of a large static library, while maintaining the |
+ organizational benefits of focused build targets. |
- The main difference between a source set and a static library is |
- around handling of exported symbols. Most linkers assume declaring |
- a function exported means exported from the static library. The linker |
- can then do dead code elimination to delete code not reachable from |
- exported functions. |
+ The main difference between a source set and a static library is around |
+ handling of exported symbols. Most linkers assume declaring a function |
+ exported means exported from the static library. The linker can then do dead |
+ code elimination to delete code not reachable from exported functions. |
- A source set will not do this code elimination since there is no link |
- step. This allows you to link many sources sets into a shared library |
- and have the "exported symbol" notation indicate "export from the |
- final shared library and not from the intermediate targets." There is |
- no way to express this concept when linking multiple static libraries |
- into a shared library. |
+ A source set will not do this code elimination since there is no link step. |
+ This allows you to link many sources sets into a shared library and have the |
+ "exported symbol" notation indicate "export from the final shared library and |
+ not from the intermediate targets." There is no way to express this concept |
+ when linking multiple static libraries into a shared library. |
``` |
### **Variables** |
- |
``` |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
@@ -2775,12 +2652,11 @@ |
result = split_list(input, n) |
Given a list and a number N, splits the list into N sub-lists of |
- approximately equal size. The return value is a list of the sub-lists. |
- The result will always be a list of size N. If N is greater than the |
- number of elements in the input, it will be padded with empty lists. |
+ approximately equal size. The return value is a list of the sub-lists. The |
+ result will always be a list of size N. If N is greater than the number of |
+ elements in the input, it will be padded with empty lists. |
- The expected use is to divide source files into smaller uniform |
- chunks. |
+ The expected use is to divide source files into smaller uniform chunks. |
``` |
@@ -2794,23 +2670,22 @@ |
Will print: |
[[1, 2], [3, 4], [5, 6] |
- |
``` |
## **static_library**: Declare a static library target. |
``` |
Make a ".a" / ".lib" file. |
- If you only need the static library for intermediate results in the |
- build, you should consider a source_set instead since it will skip |
- the (potentially slow) step of creating the intermediate library file. |
+ If you only need the static library for intermediate results in the build, |
+ you should consider a source_set instead since it will skip the (potentially |
+ slow) step of creating the intermediate library file. |
``` |
### **Variables** |
-### **complete_static_lib** |
``` |
+ complete_static_lib |
Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, |
asmflags, defines, include_dirs, ldflags, lib_dirs, libs, |
precompiled_header, precompiled_source |
@@ -2826,13 +2701,13 @@ |
``` |
target(target_type_string, target_name_string) { ... } |
- The target() function is a way to invoke a built-in target or template |
- with a type determined at runtime. This is useful for cases where the |
- type of a target might not be known statically. |
+ The target() function is a way to invoke a built-in target or template with a |
+ type determined at runtime. This is useful for cases where the type of a |
+ target might not be known statically. |
Only templates and built-in target functions are supported for the |
- target_type_string parameter. Arbitrary functions, configs, and |
- toolchains are not supported. |
+ target_type_string parameter. Arbitrary functions, configs, and toolchains |
+ are not supported. |
The call: |
target("source_set", "doom_melon") { |
@@ -2854,93 +2729,90 @@ |
... |
} |
- |
``` |
## **template**: Define a template rule. |
``` |
- A template defines a custom name that acts like a function. It |
- provides a way to add to the built-in target types. |
+ A template defines a custom name that acts like a function. It provides a way |
+ to add to the built-in target types. |
The template() function is used to declare a template. To invoke the |
- template, just use the name of the template like any other target |
- type. |
+ template, just use the name of the template like any other target type. |
- Often you will want to declare your template in a special file that |
- other files will import (see "gn help import") so your template |
- rule can be shared across build files. |
+ Often you will want to declare your template in a special file that other |
+ files will import (see "gn help import") so your template rule can be shared |
+ across build files. |
``` |
### **Variables and templates**: |
``` |
- When you call template() it creates a closure around all variables |
- currently in scope with the code in the template block. When the |
- template is invoked, the closure will be executed. |
+ When you call template() it creates a closure around all variables currently |
+ in scope with the code in the template block. When the template is invoked, |
+ the closure will be executed. |
- When the template is invoked, the code in the caller is executed and |
- passed to the template code as an implicit "invoker" variable. The |
- template uses this to read state out of the invoking code. |
+ When the template is invoked, the code in the caller is executed and passed |
+ to the template code as an implicit "invoker" variable. The template uses |
+ this to read state out of the invoking code. |
- One thing explicitly excluded from the closure is the "current |
- directory" against which relative file names are resolved. The |
- current directory will be that of the invoking code, since typically |
- that code specifies the file names. This means all files internal |
- to the template should use absolute names. |
+ One thing explicitly excluded from the closure is the "current directory" |
+ against which relative file names are resolved. The current directory will be |
+ that of the invoking code, since typically that code specifies the file |
+ names. This means all files internal to the template should use absolute |
+ names. |
- A template will typically forward some or all variables from the |
- invoking scope to a target that it defines. Often, such variables |
- might be optional. Use the pattern: |
+ A template will typically forward some or all variables from the invoking |
+ scope to a target that it defines. Often, such variables might be optional. |
+ Use the pattern: |
if (defined(invoker.deps)) { |
deps = invoker.deps |
} |
- The function forward_variables_from() provides a shortcut to forward |
- one or more or possibly all variables in this manner: |
+ The function forward_variables_from() provides a shortcut to forward one or |
+ more or possibly all variables in this manner: |
forward_variables_from(invoker, ["deps", "public_deps"]) |
``` |
-### **Target naming**: |
+### **Target naming** |
``` |
- Your template should almost always define a built-in target with the |
- name the template invoker specified. For example, if you have an IDL |
- template and somebody does: |
+ Your template should almost always define a built-in target with the name the |
+ template invoker specified. For example, if you have an IDL template and |
+ somebody does: |
idl("foo") {... |
- you will normally want this to expand to something defining a |
- source_set or static_library named "foo" (among other things you may |
- need). This way, when another target specifies a dependency on |
- "foo", the static_library or source_set will be linked. |
+ you will normally want this to expand to something defining a source_set or |
+ static_library named "foo" (among other things you may need). This way, when |
+ another target specifies a dependency on "foo", the static_library or |
+ source_set will be linked. |
- It is also important that any other targets your template expands to |
- have globally unique names, or you will get collisions. |
+ It is also important that any other targets your template expands to have |
+ unique names, or you will get collisions. |
- Access the invoking name in your template via the implicit |
- "target_name" variable. This should also be the basis for how other |
- targets that a template expands to ensure uniqueness. |
+ Access the invoking name in your template via the implicit "target_name" |
+ variable. This should also be the basis for how other targets that a template |
+ expands to ensure uniqueness. |
- A typical example would be a template that defines an action to |
- generate some source files, and a source_set to compile that source. |
- Your template would name the source_set "target_name" because |
- that's what you want external targets to depend on to link your code. |
- And you would name the action something like "${target_name}_action" |
- to make it unique. The source set would have a dependency on the |
- action to make it run. |
+ A typical example would be a template that defines an action to generate some |
+ source files, and a source_set to compile that source. Your template would |
+ name the source_set "target_name" because that's what you want external |
+ targets to depend on to link your code. And you would name the action |
+ something like "${target_name}_action" to make it unique. The source set |
+ would have a dependency on the action to make it run. |
``` |
-### **Example of defining a template**: |
+### **Example of defining a template** |
``` |
template("my_idl") { |
- # Be nice and help callers debug problems by checking that the |
- # variables the template requires are defined. This gives a nice |
- # message rather than giving the user an error about an |
- # undefined variable in the file defining the template |
+ # Be nice and help callers debug problems by checking that the variables |
+ # the template requires are defined. This gives a nice message rather than |
+ # giving the user an error about an undefined variable in the file defining |
+ # the template |
# |
# You can also use defined() to give default values to variables |
# unspecified by the invoker. |
@@ -2952,22 +2824,20 @@ |
# instantiations. |
code_gen_target_name = target_name + "_code_gen" |
- # Intermediate target to convert IDL to C source. Note that the name |
- # is based on the name the invoker of the template specified. This |
- # way, each time the template is invoked we get a unique |
- # intermediate action name (since all target names are in the global |
- # scope). |
+ # Intermediate target to convert IDL to C source. Note that the name is |
+ # based on the name the invoker of the template specified. This way, each |
+ # time the template is invoked we get a unique intermediate action name |
+ # (since all target names are in the global scope). |
action_foreach(code_gen_target_name) { |
- # Access the scope defined by the invoker via the implicit |
- # "invoker" variable. |
+ # Access the scope defined by the invoker via the implicit "invoker" |
+ # variable. |
sources = invoker.sources |
- # Note that we need an absolute path for our script file name. |
- # The current directory when executing this code will be that of |
- # the invoker (this is why we can use the "sources" directly |
- # above without having to rebase all of the paths). But if we need |
- # to reference a script relative to the template file, we'll need |
- # to use an absolute path instead. |
+ # Note that we need an absolute path for our script file name. The |
+ # current directory when executing this code will be that of the invoker |
+ # (this is why we can use the "sources" directly above without having to |
+ # rebase all of the paths). But if we need to reference a script relative |
+ # to the template file, we'll need to use an absolute path instead. |
script = "//tools/idl/idl_code_generator.py" |
# Tell GN how to expand output names given the sources. |
@@ -2976,28 +2846,27 @@ |
"$target_gen_dir/{{source_name_part}}.h" ] |
} |
- # Name the source set the same as the template invocation so |
- # instancing this template produces something that other targets |
- # can link to in their deps. |
+ # Name the source set the same as the template invocation so instancing |
+ # this template produces something that other targets can link to in their |
+ # deps. |
source_set(target_name) { |
- # Generates the list of sources, we get these from the |
- # action_foreach above. |
+ # Generates the list of sources, we get these from the action_foreach |
+ # above. |
sources = get_target_outputs(":$code_gen_target_name") |
- # This target depends on the files produced by the above code gen |
- # target. |
+ # This target depends on the files produced by the above code gen target. |
deps = [ ":$code_gen_target_name" ] |
} |
} |
``` |
-### **Example of invoking the resulting template**: |
+### **Example of invoking the resulting template** |
``` |
# This calls the template code above, defining target_name to be |
- # "foo_idl_files" and "invoker" to be the set of stuff defined in |
- # the curly brackets. |
+ # "foo_idl_files" and "invoker" to be the set of stuff defined in the curly |
+ # brackets. |
my_idl("foo_idl_files") { |
# Goes into the template as "invoker.sources". |
sources = [ "foo.idl", "bar.idl" ] |
@@ -3005,18 +2874,17 @@ |
# Here is a target that depends on our template. |
executable("my_exe") { |
- # Depend on the name we gave the template call above. Internally, |
- # this will produce a dependency from executable to the source_set |
- # inside the template (since it has this name), which will in turn |
- # depend on the code gen action. |
+ # Depend on the name we gave the template call above. Internally, this will |
+ # produce a dependency from executable to the source_set inside the |
+ # template (since it has this name), which will in turn depend on the code |
+ # gen action. |
deps = [ ":foo_idl_files" ] |
} |
- |
``` |
## **tool**: Specify arguments to a toolchain tool. |
-### **Usage**: |
+### **Usage** |
``` |
tool(<tool type>) { |
@@ -3063,47 +2931,45 @@ |
Valid for: linker tools |
Default directory name for the output file relative to the |
- root_build_dir. It can contain other substitution patterns. |
- This will be the default value for the {{output_dir}} expansion |
- (discussed below) but will be overridden by the "output_dir" |
- variable in a target, if one is specified. |
+ root_build_dir. It can contain other substitution patterns. This will |
+ be the default value for the {{output_dir}} expansion (discussed below) |
+ but will be overridden by the "output_dir" variable in a target, if one |
+ is specified. |
- GN doesn't do anything with this string other than pass it |
- along, potentially with target-specific overrides. It is the |
- tool's job to use the expansion so that the files will be in |
- the right place. |
+ GN doesn't do anything with this string other than pass it along, |
+ potentially with target-specific overrides. It is the tool's job to use |
+ the expansion so that the files will be in the right place. |
default_output_extension [string] |
Valid for: linker tools |
- Extension for the main output of a linkable tool. It includes |
- the leading dot. This will be the default value for the |
- {{output_extension}} expansion (discussed below) but will be |
- overridden by by the "output extension" variable in a target, |
- if one is specified. Empty string means no extension. |
+ Extension for the main output of a linkable tool. It includes the |
+ leading dot. This will be the default value for the |
+ {{output_extension}} expansion (discussed below) but will be overridden |
+ by by the "output extension" variable in a target, if one is specified. |
+ Empty string means no extension. |
- GN doesn't actually do anything with this extension other than |
- pass it along, potentially with target-specific overrides. One |
- would typically use the {{output_extension}} value in the |
- "outputs" to read this value. |
+ GN doesn't actually do anything with this extension other than pass it |
+ along, potentially with target-specific overrides. One would typically |
+ use the {{output_extension}} value in the "outputs" to read this value. |
Example: default_output_extension = ".exe" |
depfile [string with substitutions] |
Valid for: compiler tools (optional) |
- If the tool can write ".d" files, this specifies the name of |
- the resulting file. These files are used to list header file |
- dependencies (or other implicit input dependencies) that are |
- discovered at build time. See also "depsformat". |
+ If the tool can write ".d" files, this specifies the name of the |
+ resulting file. These files are used to list header file dependencies |
+ (or other implicit input dependencies) that are discovered at build |
+ time. See also "depsformat". |
Example: depfile = "{{output}}.d" |
depsformat [string] |
Valid for: compiler tools (when depfile is specified) |
- Format for the deps outputs. This is either "gcc" or "msvc". |
- See the ninja documentation for "deps" for more information. |
+ Format for the deps outputs. This is either "gcc" or "msvc". See the |
+ ninja documentation for "deps" for more information. |
Example: depsformat = "gcc" |
@@ -3118,29 +2984,28 @@ |
lib_dir_switch [string, optional, link tools only] |
Valid for: Linker tools except "alink" |
- These strings will be prepended to the libraries and library |
- search directories, respectively, because linkers differ on how |
- specify them. If you specified: |
+ These strings will be prepended to the libraries and library search |
+ directories, respectively, because linkers differ on how specify them. |
+ If you specified: |
lib_switch = "-l" |
lib_dir_switch = "-L" |
- then the "{{libs}}" expansion for [ "freetype", "expat"] |
- would be "-lfreetype -lexpat". |
+ then the "{{libs}}" expansion for [ "freetype", "expat"] would be |
+ "-lfreetype -lexpat". |
outputs [list of strings with substitutions] |
Valid for: Linker and compiler tools (required) |
- An array of names for the output files the tool produces. These |
- are relative to the build output directory. There must always be |
- at least one output file. There can be more than one output (a |
- linker might produce a library and an import library, for |
- example). |
+ An array of names for the output files the tool produces. These are |
+ relative to the build output directory. There must always be at least |
+ one output file. There can be more than one output (a linker might |
+ produce a library and an import library, for example). |
- This array just declares to GN what files the tool will |
- produce. It is your responsibility to specify the tool command |
- that actually produces these files. |
+ This array just declares to GN what files the tool will produce. It is |
+ your responsibility to specify the tool command that actually produces |
+ these files. |
- If you specify more than one output for shared library links, |
- you should consider setting link_output, depend_output, and |
+ If you specify more than one output for shared library links, you |
+ should consider setting link_output, depend_output, and |
runtime_outputs. |
Example for a compiler tool that produces .obj files: |
@@ -3148,19 +3013,19 @@ |
"{{source_out_dir}}/{{source_name_part}}.obj" |
] |
- Example for a linker tool that produces a .dll and a .lib. The |
- use of {{target_output_name}}, {{output_extension}} and |
- {{output_dir}} allows the target to override these values. |
+ Example for a linker tool that produces a .dll and a .lib. The use of |
+ {{target_output_name}}, {{output_extension}} and {{output_dir}} allows |
+ the target to override these values. |
outputs = [ |
- "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
+ "{{output_dir}}/{{target_output_name}}" |
+ "{{output_extension}}", |
"{{output_dir}}/{{target_output_name}}.lib", |
] |
pool [label, optional] |
- Label of the pool to use for the tool. Pools are used to limit |
- the number of tasks that can execute concurrently during the |
- build. |
+ Label of the pool to use for the tool. Pools are used to limit the |
+ number of tasks that can execute concurrently during the build. |
See also "gn help pool". |
@@ -3168,27 +3033,25 @@ |
depend_output [string with substitutions] |
Valid for: "solink" only (optional) |
- These two files specify which of the outputs from the solink |
- tool should be used for linking and dependency tracking. These |
- should match entries in the "outputs". If unspecified, the |
- first item in the "outputs" array will be used for all. See |
- "Separate linking and dependencies for shared libraries" |
- below for more. |
+ These two files specify which of the outputs from the solink tool |
+ should be used for linking and dependency tracking. These should match |
+ entries in the "outputs". If unspecified, the first item in the |
+ "outputs" array will be used for all. See "Separate linking and |
+ dependencies for shared libraries" below for more. |
- On Windows, where the tools produce a .dll shared library and |
- a .lib import library, you will want the first two to be the |
- import library and the third one to be the .dll file. |
- On Linux, if you're not doing the separate linking/dependency |
- optimization, all of these should be the .so output. |
+ On Windows, where the tools produce a .dll shared library and a .lib |
+ import library, you will want the first two to be the import library |
+ and the third one to be the .dll file. On Linux, if you're not doing |
+ the separate linking/dependency optimization, all of these should be |
+ the .so output. |
output_prefix [string] |
Valid for: Linker tools (optional) |
- Prefix to use for the output name. Defaults to empty. This |
- prefix will be prepended to the name of the target (or the |
- output_name if one is manually specified for it) if the prefix |
- is not already there. The result will show up in the |
- {{output_name}} substitution pattern. |
+ Prefix to use for the output name. Defaults to empty. This prefix will |
+ be prepended to the name of the target (or the output_name if one is |
+ manually specified for it) if the prefix is not already there. The |
+ result will show up in the {{output_name}} substitution pattern. |
Individual targets can opt-out of the output prefix by setting: |
output_prefix_override = true |
@@ -3202,29 +3065,29 @@ |
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 "gcc" or "msvc". |
- |
- 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. If the type is "gcc", then both |
- "precompiled_header" and "precompiled_source" must resolve |
- to the same file, despite the different formats required for each. |
+ precompiled headers will not be used for this tool. Otherwise use "gcc" |
+ or "msvc". |
+ |
+ 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. If the type is |
+ "gcc", then both "precompiled_header" and "precompiled_source" must |
+ resolve to the same file, despite the different formats required for |
+ each." |
+ |
See "gn help precompiled_header" for more. |
restat [boolean] |
Valid for: all tools (optional, defaults to false) |
- Requests that Ninja check the file timestamp after this tool has |
- run to determine if anything changed. Set this if your tool has |
- the ability to skip writing output if the output file has not |
- changed. |
+ Requests that Ninja check the file timestamp after this tool has run to |
+ determine if anything changed. Set this if your tool has the ability to |
+ skip writing output if the output file has not changed. |
- Normally, Ninja will assume that when a tool runs the output |
- be new and downstream dependents must be rebuild. When this is |
- set to trye, Ninja can skip rebuilding downstream dependents for |
- input changes that don't actually affect the output. |
+ Normally, Ninja will assume that when a tool runs the output be new and |
+ downstream dependents must be rebuild. When this is set to trye, Ninja |
+ can skip rebuilding downstream dependents for input changes that don't |
+ actually affect the output. |
Example: |
restat = true |
@@ -3238,12 +3101,12 @@ |
rspfile_content [string with substitutions] |
Valid for: all tools (required when "rspfile" is specified) |
- The contents to be written to the response file. This may |
- include all or part of the command to send to the tool which |
- allows you to get around OS command-line length limits. |
+ The contents to be written to the response file. This may include all |
+ or part of the command to send to the tool which allows you to get |
+ around OS command-line length limits. |
- This example adds the inputs and libraries to a response file, |
- but passes the linker flags directly on the command line: |
+ This example adds the inputs and libraries to a response file, but |
+ passes the linker flags directly on the command line: |
tool("link") { |
command = "link -o {{output}} {{ldflags}} @{{output}}.rsp" |
rspfile = "{{output}}.rsp" |
@@ -3253,57 +3116,52 @@ |
runtime_outputs [string list with substitutions] |
Valid for: linker tools |
- If specified, this list is the subset of the outputs that should |
- be added to runtime deps (see "gn help runtime_deps"). By |
- default (if runtime_outputs is empty or unspecified), it will be |
- the link_output. |
+ If specified, this list is the subset of the outputs that should be |
+ added to runtime deps (see "gn help runtime_deps"). By default (if |
+ runtime_outputs is empty or unspecified), it will be the link_output. |
``` |
### **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 |
- available to all tools: |
+ All paths are relative to the root build directory, which is the current |
+ directory for running all tools. These expansions are available to all tools: |
{{label}} |
The label of the current target. This is typically used in the |
- "description" field for link tools. The toolchain will be |
- omitted from the label for targets in the default toolchain, and |
- will be included for targets in other toolchains. |
+ "description" field for link tools. The toolchain will be omitted from |
+ the label for targets in the default toolchain, and will be included |
+ for targets in other toolchains. |
{{label_name}} |
- The short name of the label of the target. This is the part |
- after the colon. For "//foo/bar:baz" this will be "baz". |
- Unlike {{target_output_name}}, this is not affected by the |
- "output_prefix" in the tool or the "output_name" set |
- on the target. |
+ The short name of the label of the target. This is the part after the |
+ colon. For "//foo/bar:baz" this will be "baz". Unlike |
+ {{target_output_name}}, this is not affected by the "output_prefix" in |
+ the tool or the "output_name" set on the target. |
{{output}} |
- The relative path and name of the output(s) of the current |
- build step. If there is more than one output, this will expand |
- to a list of all of them. |
- Example: "out/base/my_file.o" |
+ The relative path and name of the output(s) of the current build step. |
+ If there is more than one output, this will expand to a list of all of |
+ them. Example: "out/base/my_file.o" |
{{target_gen_dir}} |
{{target_out_dir}} |
The directory of the generated file and output directories, |
- respectively, for the current target. There is no trailing |
- slash. See also {{output_dir}} for linker tools. |
- Example: "out/base/test" |
+ respectively, for the current target. There is no trailing slash. See |
+ also {{output_dir}} for linker tools. Example: "out/base/test" |
{{target_output_name}} |
- The short name of the current target with no path information, |
- or the value of the "output_name" variable if one is specified |
- in the target. This will include the "output_prefix" if any. |
- See also {{label_name}}. |
- Example: "libfoo" for the target named "foo" and an |
- output prefix for the linker tool of "lib". |
+ The short name of the current target with no path information, or the |
+ value of the "output_name" variable if one is specified in the target. |
+ This will include the "output_prefix" if any. See also {{label_name}}. |
+ |
+ Example: "libfoo" for the target named "foo" and an output prefix for |
+ the linker tool of "lib". |
- Compiler tools have the notion of a single input and a single output, |
- along with a set of compiler-specific flags. The following expansions |
- are available: |
+ Compiler tools have the notion of a single input and a single output, along |
+ with a set of compiler-specific flags. The following expansions are |
+ available: |
{{asmflags}} |
{{cflags}} |
@@ -3317,47 +3175,45 @@ |
directories specified for the target. |
Example: "--enable-foo --enable-bar" |
- Defines will be prefixed by "-D" and include directories will |
- be prefixed by "-I" (these work with Posix tools as well as |
- Microsoft ones). |
+ Defines will be prefixed by "-D" and include directories will be |
+ prefixed by "-I" (these work with Posix tools as well as Microsoft |
+ ones). |
{{source}} |
The relative path and name of the current input file. |
Example: "../../base/my_file.cc" |
{{source_file_part}} |
- The file part of the source including the extension (with no |
- directory information). |
+ The file part of the source including the extension (with no directory |
+ information). |
Example: "foo.cc" |
{{source_name_part}} |
- The filename part of the source file with no directory or |
- extension. |
+ The filename part of the source file with no directory or extension. |
Example: "foo" |
{{source_gen_dir}} |
{{source_out_dir}} |
The directory in the generated file and output directories, |
- respectively, for the current input file. If the source file |
- is in the same directory as the target is declared in, they will |
- will be the same as the "target" versions above. |
- Example: "gen/base/test" |
+ respectively, for the current input file. If the source file is in the |
+ same directory as the target is declared in, they will will be the same |
+ as the "target" versions above. Example: "gen/base/test" |
- Linker tools have multiple inputs and (potentially) multiple outputs |
- The static library tool ("alink") is not considered a linker tool. |
- The following expansions are available: |
+ Linker tools have multiple inputs and (potentially) multiple outputs The |
+ static library tool ("alink") is not considered a linker tool. The following |
+ expansions are available: |
{{inputs}} |
{{inputs_newline}} |
- Expands to the inputs to the link step. This will be a list of |
- object files and static libraries. |
+ Expands to the inputs to the link step. This will be a list of object |
+ files and static libraries. |
Example: "obj/foo.o obj/bar.o obj/somelibrary.a" |
- The "_newline" version will separate the input files with |
- newlines instead of spaces. This is useful in response files: |
- some linkers can take a "-filelist" flag which expects newline |
- separated files, and some Microsoft tools have a fixed-sized |
- buffer for parsing each line of a response file. |
+ The "_newline" version will separate the input files with newlines |
+ instead of spaces. This is useful in response files: some linkers can |
+ take a "-filelist" flag which expects newline separated files, and some |
+ Microsoft tools have a fixed-sized buffer for parsing each line of a |
+ response file. |
{{ldflags}} |
Expands to the processed set of ldflags and library search paths |
@@ -3365,68 +3221,68 @@ |
Example: "-m64 -fPIC -pthread -L/usr/local/mylib" |
{{libs}} |
- Expands to the list of system libraries to link to. Each will |
- be prefixed by the "lib_prefix". |
+ Expands to the list of system libraries to link to. Each will be |
+ prefixed by the "lib_prefix". |
As a special case to support Mac, libraries with names ending in |
- ".framework" will be added to the {{libs}} with "-framework" |
- preceeding it, and the lib prefix will be ignored. |
+ ".framework" will be added to the {{libs}} with "-framework" preceeding |
+ it, and the lib prefix will be ignored. |
Example: "-lfoo -lbar" |
{{output_dir}} |
- The value of the "output_dir" variable in the target, or the |
- the value of the "default_output_dir" value in the tool if the |
- target does not override the output directory. This will be |
- relative to the root_build_dir and will not end in a slash. |
- Will be "." for output to the root_build_dir. |
+ The value of the "output_dir" variable in the target, or the the value |
+ of the "default_output_dir" value in the tool if the target does not |
+ override the output directory. This will be relative to the |
+ root_build_dir and will not end in a slash. Will be "." for output to |
+ the root_build_dir. |
- This is subtly different than {{target_out_dir}} which is |
- defined by GN based on the target's path and not overridable. |
- {{output_dir}} is for the final output, {{target_out_dir}} is |
- generally for object files and other outputs. |
+ This is subtly different than {{target_out_dir}} which is defined by GN |
+ based on the target's path and not overridable. {{output_dir}} is for |
+ the final output, {{target_out_dir}} is generally for object files and |
+ other outputs. |
Usually {{output_dir}} would be defined in terms of either |
{{target_out_dir}} or {{root_out_dir}} |
{{output_extension}} |
- The value of the "output_extension" variable in the target, |
- or the value of the "default_output_extension" value in the |
- tool if the target does not specify an output extension. |
+ The value of the "output_extension" variable in the target, or the |
+ value of the "default_output_extension" value in the tool if the target |
+ does not specify an output extension. |
Example: ".so" |
{{solibs}} |
- Extra libraries from shared library dependencide not specified |
- in the {{inputs}}. This is the list of link_output files from |
- shared libraries (if the solink tool specifies a "link_output" |
- variable separate from the "depend_output"). |
+ Extra libraries from shared library dependencide not specified in the |
+ {{inputs}}. This is the list of link_output files from shared libraries |
+ (if the solink tool specifies a "link_output" variable separate from |
+ the "depend_output"). |
These should generally be treated the same as libs by your tool. |
+ |
Example: "libfoo.so libbar.so" |
- The static library ("alink") tool allows {{arflags}} plus the common |
- tool substitutions. |
+ The static library ("alink") tool allows {{arflags}} plus the common tool |
+ substitutions. |
The copy tool allows the common compiler/linker substitutions, plus |
- {{source}} which is the source of the copy. The stamp tool allows |
- only the common tool substitutions. |
+ {{source}} which is the source of the copy. The stamp tool allows only the |
+ common tool substitutions. |
- The copy_bundle_data and compile_xcassets tools only allows the common |
- tool substitutions. Both tools are required to create iOS/OS X bundles |
- and need only be defined on those platforms. |
+ The copy_bundle_data and compile_xcassets tools only allows the common tool |
+ substitutions. Both tools are required to create iOS/OS X bundles and need |
+ only be defined on those platforms. |
- The copy_bundle_data tool will be called with one source and needs to |
- copy (optionally optimizing the data representation) to its output. It |
- may be called with a directory as input and it needs to be recursively |
- copied. |
+ The copy_bundle_data tool will be called with one source and needs to copy |
+ (optionally optimizing the data representation) to its output. It may be |
+ called with a directory as input and it needs to be recursively copied. |
- The compile_xcassets tool will be called with one or more source (each |
- an asset catalog) that needs to be compiled to a single output. The |
- following substitutions are avaiable: |
+ The compile_xcassets tool will be called with one or more source (each an |
+ asset catalog) that needs to be compiled to a single output. The following |
+ substitutions are avaiable: |
{{inputs}} |
- Expands to the list of .xcassets to use as input to compile the |
- asset catalog. |
+ Expands to the list of .xcassets to use as input to compile the asset |
+ catalog. |
{{bundle_product_type}} |
Expands to the product_type of the bundle that will contain the |
@@ -3438,32 +3294,34 @@ |
### **Separate linking and dependencies for shared libraries** |
``` |
- Shared libraries are special in that not all changes to them require |
- that dependent targets be re-linked. If the shared library is changed |
- but no imports or exports are different, dependent code needn't be |
- relinked, which can speed up the build. |
+ Shared libraries are special in that not all changes to them require that |
+ dependent targets be re-linked. If the shared library is changed but no |
+ imports or exports are different, dependent code needn't be relinked, which |
+ can speed up the build. |
- If your link step can output a list of exports from a shared library |
- and writes the file only if the new one is different, the timestamp of |
- this file can be used for triggering re-links, while the actual shared |
- library would be used for linking. |
+ If your link step can output a list of exports from a shared library and |
+ writes the file only if the new one is different, the timestamp of this file |
+ can be used for triggering re-links, while the actual shared library would be |
+ used for linking. |
You will need to specify |
restat = true |
- in the linker tool to make this work, so Ninja will detect if the |
- timestamp of the dependency file has changed after linking (otherwise |
- it will always assume that running a command updates the output): |
+ in the linker tool to make this work, so Ninja will detect if the timestamp |
+ of the dependency file has changed after linking (otherwise it will always |
+ assume that running a command updates the output): |
tool("solink") { |
command = "..." |
outputs = [ |
"{{output_dir}}/{{target_output_name}}{{output_extension}}", |
- "{{output_dir}}/{{target_output_name}}{{output_extension}}.TOC", |
+ "{{output_dir}}/{{target_output_name}}" |
+ "{{output_extension}}.TOC", |
] |
link_output = |
"{{output_dir}}/{{target_output_name}}{{output_extension}}" |
depend_output = |
- "{{output_dir}}/{{target_output_name}}{{output_extension}}.TOC" |
+ "{{output_dir}}/{{target_output_name}}" |
+ "{{output_extension}}.TOC" |
restat = true |
} |
@@ -3487,16 +3345,14 @@ |
outputs = [ "{{source_out_dir}}/{{source_name_part}}.o" ] |
description = "G++ {{source}}" |
} |
- } |
- |
+ }; |
``` |
## **toolchain**: Defines a toolchain. |
``` |
- A toolchain is a set of commands and build flags used to compile the |
- source code. You can have more than one toolchain in use at once in |
- a build. |
+ A toolchain is a set of commands and build flags used to compile the source |
+ code. You can have more than one toolchain in use at once in a build. |
``` |
@@ -3504,66 +3360,62 @@ |
``` |
tool() |
- The tool() function call specifies the commands commands to run for |
- a given step. See "gn help tool". |
+ The tool() function call specifies the commands commands to run for a given |
+ step. See "gn help tool". |
toolchain_args |
- Overrides for build arguments to pass to the toolchain when invoking |
- it. This is a variable of type "scope" where the variable names |
- correspond to variables in declare_args() blocks. |
+ Overrides for build arguments to pass to the toolchain when invoking it. |
+ This is a variable of type "scope" where the variable names correspond to |
+ variables in declare_args() blocks. |
- When you specify a target using an alternate toolchain, the master |
- build configuration file is re-interpreted in the context of that |
- toolchain. toolchain_args allows you to control the arguments |
- passed into this alternate invocation of the build. |
+ When you specify a target using an alternate toolchain, the master build |
+ configuration file is re-interpreted in the context of that toolchain. |
+ toolchain_args allows you to control the arguments passed into this |
+ alternate invocation of the build. |
- Any default system arguments or arguments passed in via "gn args" |
- will also be passed to the alternate invocation unless explicitly |
- overridden by toolchain_args. |
+ Any default system arguments or arguments passed in via "gn args" will also |
+ be passed to the alternate invocation unless explicitly overridden by |
+ toolchain_args. |
- The toolchain_args will be ignored when the toolchain being defined |
- is the default. In this case, it's expected you want the default |
- argument values. |
+ The toolchain_args will be ignored when the toolchain being defined is the |
+ default. In this case, it's expected you want the default argument values. |
See also "gn help buildargs" for an overview of these arguments. |
deps |
- Dependencies of this toolchain. These dependencies will be resolved |
- before any target in the toolchain is compiled. To avoid circular |
- dependencies these must be targets defined in another toolchain. |
+ Dependencies of this toolchain. These dependencies will be resolved before |
+ any target in the toolchain is compiled. To avoid circular dependencies |
+ these must be targets defined in another toolchain. |
- This is expressed as a list of targets, and generally these targets |
- will always specify a toolchain: |
+ This is expressed as a list of targets, and generally these targets will |
+ always specify a toolchain: |
deps = [ "//foo/bar:baz(//build/toolchain:bootstrap)" ] |
- This concept is somewhat inefficient to express in Ninja (it |
- requires a lot of duplicate of rules) so should only be used when |
- absolutely necessary. |
+ This concept is somewhat inefficient to express in Ninja (it requires a lot |
+ of duplicate of rules) so should only be used when absolutely necessary. |
``` |
-### **Invoking targets in toolchains**: |
+### **Invoking targets in toolchains** |
``` |
- By default, when a target depends on another, there is an implicit |
- toolchain label that is inherited, so the dependee has the same one |
- as the dependent. |
+ By default, when a target depends on another, there is an implicit toolchain |
+ label that is inherited, so the dependee has the same one as the dependent. |
You can override this and refer to any other toolchain by explicitly |
labeling the toolchain to use. For example: |
data_deps = [ "//plugins:mine(//toolchains:plugin_toolchain)" ] |
- The string "//build/toolchains:plugin_toolchain" is a label that |
- identifies the toolchain declaration for compiling the sources. |
+ The string "//build/toolchains:plugin_toolchain" is a label that identifies |
+ the toolchain declaration for compiling the sources. |
To load a file in an alternate toolchain, GN does the following: |
- 1. Loads the file with the toolchain definition in it (as determined |
- by the toolchain label). |
- 2. Re-runs the master build configuration file, applying the |
- arguments specified by the toolchain_args section of the toolchain |
- definition. |
- 3. Loads the destination build file in the context of the |
- configuration file in the previous step. |
+ 1. Loads the file with the toolchain definition in it (as determined by the |
+ toolchain label). |
+ 2. Re-runs the master build configuration file, applying the arguments |
+ specified by the toolchain_args section of the toolchain definition. |
+ 3. Loads the destination build file in the context of the configuration file |
+ in the previous step. |
``` |
@@ -3581,8 +3433,7 @@ |
is_32bit = true |
is_64bit = false |
} |
- } |
- |
+ }; |
``` |
## **write_file**: Write a file to disk. |
@@ -3590,20 +3441,19 @@ |
``` |
write_file(filename, data) |
- If data is a list, the list will be written one-item-per-line with no |
- quoting or brackets. |
+ If data is a list, the list will be written one-item-per-line with no quoting |
+ or brackets. |
- If the file exists and the contents are identical to that being |
- written, the file will not be updated. This will prevent unnecessary |
- rebuilds of targets that depend on this file. |
+ If the file exists and the contents are identical to that being written, the |
+ file will not be updated. This will prevent unnecessary rebuilds of targets |
+ that depend on this file. |
- One use for write_file is to write a list of inputs to an script |
- that might be too long for the command line. However, it is |
- preferrable to use response files for this purpose. See |
- "gn help response_file_contents". |
+ One use for write_file is to write a list of inputs to an script that might |
+ be too long for the command line. However, it is preferrable to use response |
+ files for this purpose. See "gn help response_file_contents". |
- TODO(brettw) we probably need an optional third argument to control |
- list formatting. |
+ TODO(brettw) we probably need an optional third argument to control list |
+ formatting. |
``` |
@@ -3613,48 +3463,45 @@ |
filename |
Filename to write. This must be within the output directory. |
- data: |
+ data |
The list or string to write. |
- |
``` |
## **current_cpu**: The processor architecture of the current toolchain. |
``` |
- The build configuration usually sets this value based on the value |
- of "host_cpu" (see "gn help host_cpu") and then threads |
- this through the toolchain definitions to ensure that it always |
- reflects the appropriate value. |
+ The build configuration usually sets this value based on the value of |
+ "host_cpu" (see "gn help host_cpu") and then threads this through the |
+ toolchain definitions to ensure that it always reflects the appropriate |
+ value. |
- This value is not used internally by GN for any purpose. It is |
- set it to the empty string ("") by default but is declared so |
- that it can be overridden on the command line if so desired. |
+ This value is not used internally by GN for any purpose. It is set it to the |
+ empty string ("") by default but is declared so that it can be overridden on |
+ the command line if so desired. |
See "gn help target_cpu" for a list of common values returned. |
- |
``` |
## **current_os**: The operating system of the current toolchain. |
``` |
- The build configuration usually sets this value based on the value |
- of "target_os" (see "gn help target_os"), and then threads this |
- through the toolchain definitions to ensure that it always reflects |
- the appropriate value. |
+ The build configuration usually sets this value based on the value of |
+ "target_os" (see "gn help target_os"), and then threads this through the |
+ toolchain definitions to ensure that it always reflects the appropriate |
+ value. |
- This value is not used internally by GN for any purpose. It is |
- set it to the empty string ("") by default but is declared so |
- that it can be overridden on the command line if so desired. |
+ This value is not used internally by GN for any purpose. It is set it to the |
+ empty string ("") by default but is declared so that it can be overridden on |
+ the command line if so desired. |
See "gn help target_os" for a list of common values returned. |
- |
``` |
## **current_toolchain**: Label of the current toolchain. |
``` |
- A fully-qualified label representing the current toolchain. You can |
- use this to make toolchain-related decisions in the build. See also |
+ A fully-qualified label representing the current toolchain. You can use this |
+ to make toolchain-related decisions in the build. See also |
"default_toolchain". |
``` |
@@ -3666,69 +3513,66 @@ |
executable("output_thats_64_bit_only") { |
... |
- |
``` |
## **default_toolchain**: [string] Label of the default toolchain. |
``` |
- A fully-qualified label representing the default toolchain, which may |
- not necessarily be the current one (see "current_toolchain"). |
- |
+ A fully-qualified label representing the default toolchain, which may not |
+ necessarily be the current one (see "current_toolchain"). |
``` |
## **host_cpu**: The processor architecture that GN is running on. |
``` |
- This is value is exposed so that cross-compile toolchains can |
- access the host architecture when needed. |
+ This is value is exposed so that cross-compile toolchains can access the host |
+ architecture when needed. |
- The value should generally be considered read-only, but it can be |
- overriden in order to handle unusual cases where there might |
- be multiple plausible values for the host architecture (e.g., if |
- you can do either 32-bit or 64-bit builds). The value is not used |
- internally by GN for any purpose. |
+ The value should generally be considered read-only, but it can be overriden |
+ in order to handle unusual cases where there might be multiple plausible |
+ values for the host architecture (e.g., if you can do either 32-bit or 64-bit |
+ builds). The value is not used internally by GN for any purpose. |
``` |
-### **Some possible values**: |
+### **Some possible values** |
+ |
``` |
- "x64" |
- "x86" |
- |
``` |
## **host_os**: [string] The operating system that GN is running on. |
``` |
- This value is exposed so that cross-compiles can access the host |
- build system's settings. |
+ This value is exposed so that cross-compiles can access the host build |
+ system's settings. |
- This value should generally be treated as read-only. It, however, |
- is not used internally by GN for any purpose. |
+ This value should generally be treated as read-only. It, however, is not used |
+ internally by GN for any purpose. |
``` |
-### **Some possible values**: |
+### **Some possible values** |
+ |
``` |
- "linux" |
- "mac" |
- "win" |
- |
``` |
## **invoker**: [string] The invoking scope inside a template. |
``` |
- Inside a template invocation, this variable refers to the scope of |
- the invoker of the template. Outside of template invocations, this |
- variable is undefined. |
+ Inside a template invocation, this variable refers to the scope of the |
+ invoker of the template. Outside of template invocations, this variable is |
+ undefined. |
- All of the variables defined inside the template invocation are |
- accessible as members of the "invoker" scope. This is the way that |
- templates read values set by the callers. |
+ All of the variables defined inside the template invocation are accessible as |
+ members of the "invoker" scope. This is the way that templates read values |
+ set by the callers. |
- This is often used with "defined" to see if a value is set on the |
- invoking scope. |
+ This is often used with "defined" to see if a value is set on the invoking |
+ scope. |
See "gn help template" for more examples. |
@@ -3748,44 +3592,39 @@ |
bar = 123 |
} |
- |
``` |
## **python_path**: Absolute path of Python. |
``` |
- Normally used in toolchain definitions if running some command |
- requires Python. You will normally not need this when invoking scripts |
- since GN automatically finds it for you. |
- |
+ Normally used in toolchain definitions if running some command requires |
+ Python. You will normally not need this when invoking scripts since GN |
+ automatically finds it for you. |
``` |
## **root_build_dir**: [string] Directory where build commands are run. |
``` |
- This is the root build output directory which will be the current |
- directory when executing all compilers and scripts. |
- |
- Most often this is used with rebase_path (see "gn help rebase_path") |
- to convert arguments to be relative to a script's current directory. |
+ This is the root build output directory which will be the current directory |
+ when executing all compilers and scripts. |
+ Most often this is used with rebase_path (see "gn help rebase_path") to |
+ convert arguments to be relative to a script's current directory. |
``` |
## **root_gen_dir**: Directory for the toolchain's generated files. |
``` |
- Absolute path to the root of the generated output directory tree for |
- the current toolchain. An example would be "//out/Debug/gen" for the |
- default toolchain, or "//out/Debug/arm/gen" for the "arm" |
- toolchain. |
- |
- This is primarily useful for setting up include paths for generated |
- files. If you are passing this to a script, you will want to pass it |
- through rebase_path() (see "gn help rebase_path") to convert it |
- to be relative to the build directory. |
+ Absolute path to the root of the generated output directory tree for the |
+ current toolchain. An example would be "//out/Debug/gen" for the default |
+ toolchain, or "//out/Debug/arm/gen" for the "arm" toolchain. |
- See also "target_gen_dir" which is usually a better location for |
- generated files. It will be inside the root generated dir. |
+ This is primarily useful for setting up include paths for generated files. If |
+ you are passing this to a script, you will want to pass it through |
+ rebase_path() (see "gn help rebase_path") to convert it to be relative to the |
+ build directory. |
+ See also "target_gen_dir" which is usually a better location for generated |
+ files. It will be inside the root generated dir. |
``` |
## **root_out_dir**: [string] Root directory for toolchain output files. |
@@ -3794,17 +3633,16 @@ |
Absolute path to the root of the output directory tree for the current |
toolchain. It will not have a trailing slash. |
- For the default toolchain this will be the same as the root_build_dir. |
- An example would be "//out/Debug" for the default toolchain, or |
+ For the default toolchain this will be the same as the root_build_dir. An |
+ example would be "//out/Debug" for the default toolchain, or |
"//out/Debug/arm" for the "arm" toolchain. |
- This is primarily useful for setting up script calls. If you are |
- passing this to a script, you will want to pass it through |
- rebase_path() (see "gn help rebase_path") to convert it |
- to be relative to the build directory. |
+ This is primarily useful for setting up script calls. If you are passing this |
+ to a script, you will want to pass it through rebase_path() (see "gn help |
+ rebase_path") to convert it to be relative to the build directory. |
- See also "target_out_dir" which is usually a better location for |
- output files. It will be inside the root output dir. |
+ See also "target_out_dir" which is usually a better location for output |
+ files. It will be inside the root output dir. |
``` |
@@ -3816,33 +3654,30 @@ |
args = [ "-o", rebase_path(root_out_dir, root_build_dir) ] |
} |
- |
``` |
## **target_cpu**: The desired cpu architecture for the build. |
``` |
- This value should be used to indicate the desired architecture for |
- the primary objects of the build. It will match the cpu architecture |
- of the default toolchain, but not necessarily the current toolchain. |
- |
- In many cases, this is the same as "host_cpu", but in the case |
- of cross-compiles, this can be set to something different. This |
- value is different from "current_cpu" in that it does not change |
- based on the current toolchain. When writing rules, "current_cpu" |
- should be used rather than "target_cpu" most of the time. |
+ This value should be used to indicate the desired architecture for the |
+ primary objects of the build. It will match the cpu architecture of the |
+ default toolchain, but not necessarily the current toolchain. |
- This value is not used internally by GN for any purpose, so it |
- may be set to whatever value is needed for the build. |
- GN defaults this value to the empty string ("") and the |
- configuration files should set it to an appropriate value |
- (e.g., setting it to the value of "host_cpu") if it is not |
- overridden on the command line or in the args.gn file. |
+ In many cases, this is the same as "host_cpu", but in the case of |
+ cross-compiles, this can be set to something different. This value is |
+ different from "current_cpu" in that it does not change based on the current |
+ toolchain. When writing rules, "current_cpu" should be used rather than |
+ "target_cpu" most of the time. |
- Where practical, use one of the following list of common values: |
+ This value is not used internally by GN for any purpose, so it may be set to |
+ whatever value is needed for the build. GN defaults this value to the empty |
+ string ("") and the configuration files should set it to an appropriate value |
+ (e.g., setting it to the value of "host_cpu") if it is not overridden on the |
+ command line or in the args.gn file. |
``` |
-### **Possible values**: |
+### **Possible values** |
+ |
``` |
- "x86" |
- "x64" |
@@ -3850,21 +3685,19 @@ |
- "arm64" |
- "mipsel" |
- |
``` |
## **target_gen_dir**: Directory for a target's generated files. |
``` |
- Absolute path to the target's generated file directory. This will be |
- the "root_gen_dir" followed by the relative path to the current |
- build file. If your file is in "//tools/doom_melon" then |
- target_gen_dir would be "//out/Debug/gen/tools/doom_melon". It will |
- not have a trailing slash. |
+ Absolute path to the target's generated file directory. This will be the |
+ "root_gen_dir" followed by the relative path to the current build file. If |
+ your file is in "//tools/doom_melon" then target_gen_dir would be |
+ "//out/Debug/gen/tools/doom_melon". It will not have a trailing slash. |
- This is primarily useful for setting up include paths for generated |
- files. If you are passing this to a script, you will want to pass it |
- through rebase_path() (see "gn help rebase_path") to convert it |
- to be relative to the build directory. |
+ This is primarily useful for setting up include paths for generated files. If |
+ you are passing this to a script, you will want to pass it through |
+ rebase_path() (see "gn help rebase_path") to convert it to be relative to the |
+ build directory. |
See also "gn help root_gen_dir". |
@@ -3875,29 +3708,27 @@ |
``` |
action("myscript") { |
# Pass the generated output dir to the script. |
- args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ] |
+ args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ]" |
} |
- |
``` |
## **target_name**: [string] The name of the current target. |
``` |
- Inside a target or template invocation, this variable refers to the |
- name given to the target or template invocation. Outside of these, |
- this variable is undefined. |
+ Inside a target or template invocation, this variable refers to the name |
+ given to the target or template invocation. Outside of these, this variable |
+ is undefined. |
- This is most often used in template definitions to name targets |
- defined in the template based on the name of the invocation. This |
- is necessary both to ensure generated targets have unique names and |
- to generate a target with the exact name of the invocation that |
- other targets can depend on. |
+ This is most often used in template definitions to name targets defined in |
+ the template based on the name of the invocation. This is necessary both to |
+ ensure generated targets have unique names and to generate a target with the |
+ exact name of the invocation that other targets can depend on. |
- Be aware that this value will always reflect the innermost scope. So |
- when defining a target inside a template, target_name will refer to |
- the target rather than the template invocation. To get the name of the |
- template invocation in this case, you should save target_name to a |
- temporary variable outside of any target definitions. |
+ Be aware that this value will always reflect the innermost scope. So when |
+ defining a target inside a template, target_name will refer to the target |
+ rather than the template invocation. To get the name of the template |
+ invocation in this case, you should save target_name to a temporary variable |
+ outside of any target definitions. |
See "gn help template" for more examples. |
@@ -3921,24 +3752,23 @@ |
my_template("space_ray") { |
} |
- |
``` |
## **target_os**: The desired operating system for the build. |
``` |
- This value should be used to indicate the desired operating system |
- for the primary object(s) of the build. It will match the OS of |
- the default toolchain. |
+ This value should be used to indicate the desired operating system for the |
+ primary object(s) of the build. It will match the OS of the default |
+ toolchain. |
In many cases, this is the same as "host_os", but in the case of |
- cross-compiles, it may be different. This variable differs from |
- "current_os" in that it can be referenced from inside any |
- toolchain and will always return the initial value. |
+ cross-compiles, it may be different. This variable differs from "current_os" |
+ in that it can be referenced from inside any toolchain and will always return |
+ the initial value. |
- This should be set to the most specific value possible. So, |
- "android" or "chromeos" should be used instead of "linux" |
- where applicable, even though Android and ChromeOS are both Linux |
- variants. This can mean that one needs to write |
+ This should be set to the most specific value possible. So, "android" or |
+ "chromeos" should be used instead of "linux" where applicable, even though |
+ Android and ChromeOS are both Linux variants. This can mean that one needs to |
+ write |
if (target_os == "android" || target_os == "linux") { |
# ... |
@@ -3946,18 +3776,16 @@ |
and so forth. |
- This value is not used internally by GN for any purpose, so it |
- may be set to whatever value is needed for the build. |
- GN defaults this value to the empty string ("") and the |
- configuration files should set it to an appropriate value |
- (e.g., setting it to the value of "host_os") if it is not |
- set via the command line or in the args.gn file. |
- |
- Where practical, use one of the following list of common values: |
+ This value is not used internally by GN for any purpose, so it may be set to |
+ whatever value is needed for the build. GN defaults this value to the empty |
+ string ("") and the configuration files should set it to an appropriate value |
+ (e.g., setting it to the value of "host_os") if it is not set via the command |
+ line or in the args.gn file. |
``` |
-### **Possible values**: |
+### **Possible values** |
+ |
``` |
- "android" |
- "chromeos" |
@@ -3967,20 +3795,18 @@ |
- "mac" |
- "win" |
- |
``` |
## **target_out_dir**: [string] Directory for target output files. |
``` |
- Absolute path to the target's generated file directory. If your |
- current target is in "//tools/doom_melon" then this value might be |
- "//out/Debug/obj/tools/doom_melon". It will not have a trailing |
- slash. |
+ Absolute path to the target's generated file directory. If your current |
+ target is in "//tools/doom_melon" then this value might be |
+ "//out/Debug/obj/tools/doom_melon". It will not have a trailing slash. |
- This is primarily useful for setting up arguments for calling |
- scripts. If you are passing this to a script, you will want to pass it |
- through rebase_path() (see "gn help rebase_path") to convert it |
- to be relative to the build directory. |
+ This is primarily useful for setting up arguments for calling scripts. If you |
+ are passing this to a script, you will want to pass it through rebase_path() |
+ (see "gn help rebase_path") to convert it to be relative to the build |
+ directory. |
See also "gn help root_out_dir". |
@@ -3991,9 +3817,9 @@ |
``` |
action("myscript") { |
# Pass the output dir to the script. |
- args = [ "-o", rebase_path(target_out_dir, root_build_dir) ] |
- } |
+ args = [ "-o", rebase_path(target_out_dir, root_build_dir) ]" |
+ } |
``` |
## **all_dependent_configs**: Configs to be forced on dependents. |
@@ -4001,16 +3827,16 @@ |
``` |
A list of config labels. |
- All targets depending on this one, and recursively, all targets |
- depending on those, will have the configs listed in this variable |
- added to them. These configs will also apply to the current target. |
+ All targets depending on this one, and recursively, all targets depending on |
+ those, will have the configs listed in this variable added to them. These |
+ configs will also apply to the current target. |
This addition happens in a second phase once a target and all of its |
- dependencies have been resolved. Therefore, a target will not see |
- these force-added configs in their "configs" variable while the |
- script is running, and then can not be removed. As a result, this |
- capability should generally only be used to add defines and include |
- directories necessary to compile a target's headers. |
+ dependencies have been resolved. Therefore, a target will not see these |
+ force-added configs in their "configs" variable while the script is running, |
+ and then can not be removed. As a result, this capability should generally |
+ only be used to add defines and include directories necessary to compile a |
+ target's headers. |
See also "public_configs". |
@@ -4038,61 +3864,57 @@ |
## **allow_circular_includes_from**: Permit includes from deps. |
``` |
- A list of target labels. Must be a subset of the target's "deps". |
- These targets will be permitted to include headers from the current |
- target despite the dependency going in the opposite direction. |
+ A list of target labels. Must be a subset of the target's "deps". These |
+ targets will be permitted to include headers from the current target despite |
+ the dependency going in the opposite direction. |
- When you use this, both targets must be included in a final binary |
- for it to link. To keep linker errors from happening, it is good |
- practice to have all external dependencies depend only on one of |
- the two targets, and to set the visibility on the other to enforce |
- this. Thus the targets will always be linked together in any output. |
+ When you use this, both targets must be included in a final binary for it to |
+ link. To keep linker errors from happening, it is good practice to have all |
+ external dependencies depend only on one of the two targets, and to set the |
+ visibility on the other to enforce this. Thus the targets will always be |
+ linked together in any output. |
``` |
### **Details** |
``` |
- Normally, for a file in target A to include a file from target B, |
- A must list B as a dependency. This invariant is enforced by the |
- "gn check" command (and the --check flag to "gn gen" -- see |
- "gn help check"). |
+ Normally, for a file in target A to include a file from target B, A must list |
+ B as a dependency. This invariant is enforced by the "gn check" command (and |
+ the --check flag to "gn gen" -- see "gn help check"). |
- Sometimes, two targets might be the same unit for linking purposes |
- (two source sets or static libraries that would always be linked |
- together in a final executable or shared library) and they each |
- include headers from the other: you want A to be able to include B's |
- headers, and B to include A's headers. This is not an ideal situation |
- but is sometimes unavoidable. |
+ Sometimes, two targets might be the same unit for linking purposes (two |
+ source sets or static libraries that would always be linked together in a |
+ final executable or shared library) and they each include headers from the |
+ other: you want A to be able to include B's headers, and B to include A's |
+ headers. This is not an ideal situation but is sometimes unavoidable. |
- This list, if specified, lists which of the dependencies of the |
- current target can include header files from the current target. |
- That is, if A depends on B, B can only include headers from A if it is |
- in A's allow_circular_includes_from list. Normally includes must |
- follow the direction of dependencies, this flag allows them to go |
- in the opposite direction. |
+ This list, if specified, lists which of the dependencies of the current |
+ target can include header files from the current target. That is, if A |
+ depends on B, B can only include headers from A if it is in A's |
+ allow_circular_includes_from list. Normally includes must follow the |
+ direction of dependencies, this flag allows them to go in the opposite |
+ direction. |
``` |
### **Danger** |
``` |
- In the above example, A's headers are likely to include headers from |
- A's dependencies. Those dependencies may have public_configs that |
- apply flags, defines, and include paths that make those headers work |
- properly. |
+ In the above example, A's headers are likely to include headers from A's |
+ dependencies. Those dependencies may have public_configs that apply flags, |
+ defines, and include paths that make those headers work properly. |
With allow_circular_includes_from, B can include A's headers, and |
- transitively from A's dependencies, without having the dependencies |
- that would bring in the public_configs those headers need. The result |
- may be errors or inconsistent builds. |
+ transitively from A's dependencies, without having the dependencies that |
+ would bring in the public_configs those headers need. The result may be |
+ errors or inconsistent builds. |
- So when you use allow_circular_includes_from, make sure that any |
- compiler settings, flags, and include directories are the same between |
- both targets (consider putting such things in a shared config they can |
- both reference). Make sure the dependencies are also the same (you |
- might consider a group to collect such dependencies they both |
- depend on). |
+ So when you use allow_circular_includes_from, make sure that any compiler |
+ settings, flags, and include directories are the same between both targets |
+ (consider putting such things in a shared config they can both reference). |
+ Make sure the dependencies are also the same (you might consider a group to |
+ collect such dependencies they both depend on). |
``` |
@@ -4115,7 +3937,6 @@ |
public_deps = [ ":c" ] |
} |
- |
``` |
## **arflags**: Arguments passed to static_library archiver. |
@@ -4123,14 +3944,14 @@ |
A list of flags passed to the archive/lib command that creates static |
libraries. |
- arflags are NOT pushed to dependents, so applying arflags to source |
- sets or any other target type will be a no-op. As with ldflags, |
- you could put the arflags in a config and set that as a public or |
- "all dependent" config, but that will likely not be what you want. |
- If you have a chain of static libraries dependent on each other, |
- this can cause the flags to propagate up to other static libraries. |
- Due to the nature of how arflags are typically used, you will normally |
- want to apply them directly on static_library targets themselves. |
+ arflags are NOT pushed to dependents, so applying arflags to source sets or |
+ any other target type will be a no-op. As with ldflags, you could put the |
+ arflags in a config and set that as a public or "all dependent" config, but |
+ that will likely not be what you want. If you have a chain of static |
+ libraries dependent on each other, this can cause the flags to propagate up |
+ to other static libraries. Due to the nature of how arflags are typically |
+ used, you will normally want to apply them directly on static_library targets |
+ themselves. |
``` |
@@ -4156,21 +3977,20 @@ |
## **args**: Arguments passed to an action. |
``` |
- For action and action_foreach targets, args is the list of arguments |
- to pass to the script. Typically you would use source expansion (see |
- "gn help source_expansion") to insert the source file names. |
+ For action and action_foreach targets, args is the list of arguments to pass |
+ to the script. Typically you would use source expansion (see "gn help |
+ source_expansion") to insert the source file names. |
See also "gn help action" and "gn help action_foreach". |
- |
``` |
## **asmflags**: Flags passed to the assembler. |
``` |
A list of strings. |
- "asmflags" are passed to any invocation of a tool that takes an |
- .asm or .S file as input. |
+ "asmflags" are passed to any invocation of a tool that takes an .asm or .S |
+ file as input. |
``` |
@@ -4198,29 +4018,27 @@ |
``` |
A list of label patterns. |
- This list is a list of patterns that must not match any of the |
- transitive dependencies of the target. These include all public, |
- private, and data dependencies, and cross shared library boundaries. |
- This allows you to express that undesirable code isn't accidentally |
- added to downstream dependencies in a way that might otherwise be |
- difficult to notice. |
+ This list is a list of patterns that must not match any of the transitive |
+ dependencies of the target. These include all public, private, and data |
+ dependencies, and cross shared library boundaries. This allows you to express |
+ that undesirable code isn't accidentally added to downstream dependencies in |
+ a way that might otherwise be difficult to notice. |
- Checking does not cross executable boundaries. If a target depends on |
- an executable, it's assumed that the executable is a tool that is |
- producing part of the build rather than something that is linked and |
- distributed. This allows assert_no_deps to express what is distributed |
- in the final target rather than depend on the internal build steps |
- (which may include non-distributable code). |
+ Checking does not cross executable boundaries. If a target depends on an |
+ executable, it's assumed that the executable is a tool that is producing part |
+ of the build rather than something that is linked and distributed. This |
+ allows assert_no_deps to express what is distributed in the final target |
+ rather than depend on the internal build steps (which may include |
+ non-distributable code). |
- See "gn help label_pattern" for the format of the entries in the |
- list. These patterns allow blacklisting individual targets or whole |
- directory hierarchies. |
+ See "gn help label_pattern" for the format of the entries in the list. These |
+ patterns allow blacklisting individual targets or whole directory |
+ hierarchies. |
- Sometimes it is desirable to enforce that many targets have no |
- dependencies on a target or set of targets. One efficient way to |
- express this is to create a group with the assert_no_deps rule on |
- it, and make that group depend on all targets you want to apply that |
- assertion to. |
+ Sometimes it is desirable to enforce that many targets have no dependencies |
+ on a target or set of targets. One efficient way to express this is to create |
+ a group with the assert_no_deps rule on it, and make that group depend on all |
+ targets you want to apply that assertion to. |
``` |
@@ -4236,20 +4054,19 @@ |
] |
} |
- |
``` |
## **bundle_deps_filter**: [label list] A list of labels that are filtered out. |
``` |
A list of target labels. |
- This list contains target label patterns that should be filtered out |
- when creating the bundle. Any target matching one of those label will |
- be removed from the dependencies of the create_bundle target. |
+ This list contains target label patterns that should be filtered out when |
+ creating the bundle. Any target matching one of those label will be removed |
+ from the dependencies of the create_bundle target. |
- This is mostly useful when creating application extension bundle as |
- the application extension has access to runtime resources from the |
- application bundle and thus do not require a second copy. |
+ This is mostly useful when creating application extension bundle as the |
+ application extension has access to runtime resources from the application |
+ bundle and thus do not require a second copy. |
See "gn help create_bundle" for more information. |
@@ -4264,13 +4081,12 @@ |
] |
bundle_root_dir = "$root_out_dir/today_extension.appex" |
bundle_deps_filter = [ |
- # The extension uses //base but does not use any function calling |
- # into third_party/icu and thus does not need the icudtl.dat file. |
+ # The extension uses //base but does not use any function calling into |
+ # third_party/icu and thus does not need the icudtl.dat file. |
"//third_party/icu:icudata", |
] |
} |
- |
``` |
## **bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in create_bundle. |
@@ -4278,12 +4094,11 @@ |
A string corresponding to a path in $root_build_dir. |
This string is used by the "create_bundle" target to expand the |
- {{bundle_executable_dir}} of the "bundle_data" target it depends on. |
- This must correspond to a path under "bundle_root_dir". |
+ {{bundle_executable_dir}} of the "bundle_data" target it depends on. This |
+ must correspond to a path under "bundle_root_dir". |
See "gn help bundle_root_dir" for examples. |
- |
``` |
## **bundle_plugins_dir**: Expansion of {{bundle_plugins_dir}} in create_bundle. |
@@ -4291,12 +4106,11 @@ |
A string corresponding to a path in $root_build_dir. |
This string is used by the "create_bundle" target to expand the |
- {{bundle_plugins_dir}} of the "bundle_data" target it depends on. |
- This must correspond to a path under "bundle_root_dir". |
+ {{bundle_plugins_dir}} of the "bundle_data" target it depends on. This must |
+ correspond to a path under "bundle_root_dir". |
See "gn help bundle_root_dir" for examples. |
- |
``` |
## **bundle_resources_dir**: Expansion of {{bundle_resources_dir}} in create_bundle. |
@@ -4304,12 +4118,11 @@ |
A string corresponding to a path in $root_build_dir. |
This string is used by the "create_bundle" target to expand the |
- {{bundle_resources_dir}} of the "bundle_data" target it depends on. |
- This must correspond to a path under "bundle_root_dir". |
+ {{bundle_resources_dir}} of the "bundle_data" target it depends on. This must |
+ correspond to a path under "bundle_root_dir". |
See "gn help bundle_root_dir" for examples. |
- |
``` |
## **bundle_root_dir**: Expansion of {{bundle_root_dir}} in create_bundle. |
@@ -4317,8 +4130,8 @@ |
A string corresponding to a path in root_build_dir. |
This string is used by the "create_bundle" target to expand the |
- {{bundle_root_dir}} of the "bundle_data" target it depends on. |
- This must correspond to a path under root_build_dir. |
+ {{bundle_root_dir}} of the "bundle_data" target it depends on. This must |
+ correspond to a path under root_build_dir. |
``` |
@@ -4338,20 +4151,19 @@ |
bundle_plugins_dir = bundle_root_dir + "/PlugIns" |
} |
- |
``` |
## **cflags***: Flags passed to the C compiler. |
``` |
A list of strings. |
- "cflags" are passed to all invocations of the C, C++, Objective C, |
- and Objective C++ compilers. |
+ "cflags" are passed to all invocations of the C, C++, Objective C, and |
+ Objective C++ compilers. |
- To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", |
- respectively. These variant-specific versions of cflags* will be |
- appended on the compiler command line after "cflags". |
+ To target one of these variants individually, use "cflags_c", "cflags_cc", |
+ "cflags_objc", and "cflags_objcc", respectively. These variant-specific |
+ versions of cflags* will be appended on the compiler command line after |
+ "cflags". |
See also "asmflags" for flags for assembly-language files. |
@@ -4381,13 +4193,13 @@ |
``` |
A list of strings. |
- "cflags" are passed to all invocations of the C, C++, Objective C, |
- and Objective C++ compilers. |
+ "cflags" are passed to all invocations of the C, C++, Objective C, and |
+ Objective C++ compilers. |
- To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", |
- respectively. These variant-specific versions of cflags* will be |
- appended on the compiler command line after "cflags". |
+ To target one of these variants individually, use "cflags_c", "cflags_cc", |
+ "cflags_objc", and "cflags_objcc", respectively. These variant-specific |
+ versions of cflags* will be appended on the compiler command line after |
+ "cflags". |
See also "asmflags" for flags for assembly-language files. |
@@ -4417,13 +4229,13 @@ |
``` |
A list of strings. |
- "cflags" are passed to all invocations of the C, C++, Objective C, |
- and Objective C++ compilers. |
+ "cflags" are passed to all invocations of the C, C++, Objective C, and |
+ Objective C++ compilers. |
- To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", |
- respectively. These variant-specific versions of cflags* will be |
- appended on the compiler command line after "cflags". |
+ To target one of these variants individually, use "cflags_c", "cflags_cc", |
+ "cflags_objc", and "cflags_objcc", respectively. These variant-specific |
+ versions of cflags* will be appended on the compiler command line after |
+ "cflags". |
See also "asmflags" for flags for assembly-language files. |
@@ -4453,13 +4265,13 @@ |
``` |
A list of strings. |
- "cflags" are passed to all invocations of the C, C++, Objective C, |
- and Objective C++ compilers. |
+ "cflags" are passed to all invocations of the C, C++, Objective C, and |
+ Objective C++ compilers. |
- To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", |
- respectively. These variant-specific versions of cflags* will be |
- appended on the compiler command line after "cflags". |
+ To target one of these variants individually, use "cflags_c", "cflags_cc", |
+ "cflags_objc", and "cflags_objcc", respectively. These variant-specific |
+ versions of cflags* will be appended on the compiler command line after |
+ "cflags". |
See also "asmflags" for flags for assembly-language files. |
@@ -4489,13 +4301,13 @@ |
``` |
A list of strings. |
- "cflags" are passed to all invocations of the C, C++, Objective C, |
- and Objective C++ compilers. |
+ "cflags" are passed to all invocations of the C, C++, Objective C, and |
+ Objective C++ compilers. |
- To target one of these variants individually, use "cflags_c", |
- "cflags_cc", "cflags_objc", and "cflags_objcc", |
- respectively. These variant-specific versions of cflags* will be |
- appended on the compiler command line after "cflags". |
+ To target one of these variants individually, use "cflags_c", "cflags_cc", |
+ "cflags_objc", and "cflags_objcc", respectively. These variant-specific |
+ versions of cflags* will be appended on the compiler command line after |
+ "cflags". |
See also "asmflags" for flags for assembly-language files. |
@@ -4523,20 +4335,20 @@ |
## **check_includes**: [boolean] Controls whether a target's files are checked. |
``` |
- When true (the default), the "gn check" command (as well as |
- "gn gen" with the --check flag) will check this target's sources |
- and headers for proper dependencies. |
+ When true (the default), the "gn check" command (as well as "gn gen" with the |
+ --check flag) will check this target's sources and headers for proper |
+ dependencies. |
- When false, the files in this target will be skipped by default. |
- This does not affect other targets that depend on the current target, |
- it just skips checking the includes of the current target's files. |
+ When false, the files in this target will be skipped by default. This does |
+ not affect other targets that depend on the current target, it just skips |
+ checking the includes of the current target's files. |
- If there are a few conditionally included headers that trip up |
- checking, you can exclude headers individually by annotating them with |
- "nogncheck" (see "gn help nogncheck"). |
+ If there are a few conditionally included headers that trip up checking, you |
+ can exclude headers individually by annotating them with "nogncheck" (see "gn |
+ help nogncheck"). |
- The topic "gn help check" has general information on how checking |
- works and advice on how to pass a check in problematic cases. |
+ The topic "gn help check" has general information on how checking works and |
+ advice on how to pass a check in problematic cases. |
``` |
@@ -4549,77 +4361,70 @@ |
... |
} |
- |
``` |
## **code_signing_args**: [string list] Arguments passed to code signing script. |
``` |
- For create_bundle targets, code_signing_args is the list of arguments |
- to pass to the code signing script. Typically you would use source |
- expansion (see "gn help source_expansion") to insert the source file |
- names. |
+ For create_bundle targets, code_signing_args is the list of arguments to pass |
+ to the code signing script. Typically you would use source expansion (see "gn |
+ help source_expansion") to insert the source file names. |
See also "gn help create_bundle". |
- |
``` |
## **code_signing_outputs**: [file list] Output files for code signing step. |
``` |
- Outputs from the code signing step of a create_bundle target. Must |
- refer to files in the build directory. |
+ Outputs from the code signing step of a create_bundle target. Must refer to |
+ files in the build directory. |
See also "gn help create_bundle". |
- |
``` |
-## **code_signing_script**: [file name] Script for code signing. |
+## **code_signing_script**: [file name] Script for code signing." |
+ |
``` |
- An absolute or buildfile-relative file name of a Python script to run |
- for a create_bundle target to perform code signing step. |
+ An absolute or buildfile-relative file name of a Python script to run for a |
+ create_bundle target to perform code signing step. |
See also "gn help create_bundle". |
- |
``` |
## **code_signing_sources**: [file list] Sources for code signing step. |
``` |
- A list of files used as input for code signing script step of a |
- create_bundle target. Non-absolute paths will be resolved relative to |
- the current build file. |
+ A list of files used as input for code signing script step of a create_bundle |
+ target. Non-absolute paths will be resolved relative to the current build |
+ file. |
See also "gn help create_bundle". |
- |
``` |
## **complete_static_lib**: [boolean] Links all deps into a static library. |
``` |
- A static library normally doesn't include code from dependencies, but |
- instead forwards the static libraries and source sets in its deps up |
- the dependency chain until a linkable target (an executable or shared |
- library) is reached. The final linkable target only links each static |
- library once, even if it appears more than once in its dependency |
- graph. |
- |
- In some cases the static library might be the final desired output. |
- For example, you may be producing a static library for distribution to |
- third parties. In this case, the static library should include code |
- for all dependencies in one complete package. However, complete static |
- libraries themselves are never linked into other complete static |
- libraries. All complete static libraries are for distribution and |
- linking them in would cause code duplication in this case. If the |
- static library is not for distribution, it should not be complete. |
- |
- GN treats non-complete static libraries as source sets when they are |
- linked into complete static libraries. This is done because some tools |
- like AR do not handle dependent static libraries properly. This makes |
- it easier to write "alink" rules. |
- |
- In rare cases it makes sense to list a header in more than one |
- target if it could be considered conceptually a member of both. |
- libraries. |
+ A static library normally doesn't include code from dependencies, but instead |
+ forwards the static libraries and source sets in its deps up the dependency |
+ chain until a linkable target (an executable or shared library) is reached. |
+ The final linkable target only links each static library once, even if it |
+ appears more than once in its dependency graph. |
+ |
+ In some cases the static library might be the final desired output. For |
+ example, you may be producing a static library for distribution to third |
+ parties. In this case, the static library should include code for all |
+ dependencies in one complete package. However, complete static libraries |
+ themselves are never linked into other complete static libraries. All |
+ complete static libraries are for distribution and linking them in would |
+ cause code duplication in this case. If the static library is not for |
+ distribution, it should not be complete. |
+ |
+ GN treats non-complete static libraries as source sets when they are linked |
+ into complete static libraries. This is done because some tools like AR do |
+ not handle dependent static libraries properly. This makes it easier to write |
+ "alink" rules. |
+ |
+ In rare cases it makes sense to list a header in more than one target if it |
+ could be considered conceptually a member of both. libraries. |
``` |
@@ -4631,7 +4436,6 @@ |
deps = [ "bar" ] |
} |
- |
``` |
## **configs**: Configs applying to this target or config. |
@@ -4643,45 +4447,44 @@ |
### **Configs on a target** |
``` |
- When used on a target, the include_dirs, defines, etc. in each config |
- are appended in the order they appear to the compile command for each |
- file in the target. They will appear after the include_dirs, defines, |
- etc. that the target sets directly. |
+ When used on a target, the include_dirs, defines, etc. in each config are |
+ appended in the order they appear to the compile command for each file in the |
+ target. They will appear after the include_dirs, defines, etc. that the |
+ target sets directly. |
- Since configs apply after the values set on a target, directly setting |
- a compiler flag will prepend it to the command line. If you want to |
- append a flag instead, you can put that flag in a one-off config and |
- append that config to the target's configs list. |
+ Since configs apply after the values set on a target, directly setting a |
+ compiler flag will prepend it to the command line. If you want to append a |
+ flag instead, you can put that flag in a one-off config and append that |
+ config to the target's configs list. |
- The build configuration script will generally set up the default |
- configs applying to a given target type (see "set_defaults"). |
- When a target is being defined, it can add to or remove from this |
- list. |
+ The build configuration script will generally set up the default configs |
+ applying to a given target type (see "set_defaults"). When a target is being |
+ defined, it can add to or remove from this list. |
``` |
### **Configs on a config** |
``` |
- It is possible to create composite configs by specifying configs on a |
- config. One might do this to forward values, or to factor out blocks |
- of settings from very large configs into more manageable named chunks. |
+ It is possible to create composite configs by specifying configs on a config. |
+ One might do this to forward values, or to factor out blocks of settings from |
+ very large configs into more manageable named chunks. |
- In this case, the composite config is expanded to be the concatenation |
- of its own values, and in order, the values from its sub-configs |
- *before* anything else happens. This has some ramifications: |
+ In this case, the composite config is expanded to be the concatenation of its |
+ own values, and in order, the values from its sub-configs *before* anything |
+ else happens. This has some ramifications: |
- - A target has no visibility into a config's sub-configs. Target |
- code only sees the name of the composite config. It can't remove |
- sub-configs or opt in to only parts of it. The composite config may |
- not even be defined before the target is. |
+ - A target has no visibility into a config's sub-configs. Target code only |
+ sees the name of the composite config. It can't remove sub-configs or opt |
+ in to only parts of it. The composite config may not even be defined |
+ before the target is. |
- - You can get duplication of values if a config is listed twice, say, |
- on a target and in a sub-config that also applies. In other cases, |
- the configs applying to a target are de-duped. It's expected that |
- if a config is listed as a sub-config that it is only used in that |
- context. (Note that it's possible to fix this and de-dupe, but it's |
- not normally relevant and complicates the implementation.) |
+ - You can get duplication of values if a config is listed twice, say, on a |
+ target and in a sub-config that also applies. In other cases, the configs |
+ applying to a target are de-duped. It's expected that if a config is |
+ listed as a sub-config that it is only used in that context. (Note that |
+ it's possible to fix this and de-dupe, but it's not normally relevant and |
+ complicates the implementation.) |
``` |
@@ -4716,11 +4519,10 @@ |
configs += [ ":mysettings" ] |
} |
- # Create a default_optimization config that forwards to one of a set |
- # of more specialized configs depending on build flags. This pattern |
- # is useful because it allows a target to opt in to either a default |
- # set, or a more specific set, while avoid duplicating the settings in |
- # two places. |
+ # Create a default_optimization config that forwards to one of a set of more |
+ # specialized configs depending on build flags. This pattern is useful |
+ # because it allows a target to opt in to either a default set, or a more |
+ # specific set, while avoid duplicating the settings in two places. |
config("super_optimization") { |
cflags = [ ... ] |
} |
@@ -4732,21 +4534,19 @@ |
} |
} |
- |
``` |
## **console**: Run this action in the console pool. |
``` |
Boolean. Defaults to false. |
- Actions marked "console = true" will be run in the built-in ninja |
- "console" pool. They will have access to real stdin and stdout, and |
- output will not be buffered by ninja. This can be useful for |
- long-running actions with progress logs, or actions that require user |
- input. |
+ Actions marked "console = true" will be run in the built-in ninja "console" |
+ pool. They will have access to real stdin and stdout, and output will not be |
+ buffered by ninja. This can be useful for long-running actions with progress |
+ logs, or actions that require user input. |
- Only one console pool target can run at any one time in Ninja. Refer |
- to the Ninja documentation on the console pool for more info. |
+ Only one console pool target can run at any one time in Ninja. Refer to the |
+ Ninja documentation on the console pool for more info. |
``` |
@@ -4757,55 +4557,51 @@ |
console = true |
} |
- |
``` |
## **data**: Runtime data file dependencies. |
``` |
Lists files or directories required to run the given target. These are |
- typically data files or directories of data files. The paths are |
- interpreted as being relative to the current build file. Since these |
- are runtime dependencies, they do not affect which targets are built |
- or when. To declare input files to a script, use "inputs". |
- |
- Appearing in the "data" section does not imply any special handling |
- such as copying them to the output directory. This is just used for |
- declaring runtime dependencies. Runtime dependencies can be queried |
- using the "runtime_deps" category of "gn desc" or written during |
- build generation via "--runtime-deps-list-file". |
- |
- GN doesn't require data files to exist at build-time. So actions that |
- produce files that are in turn runtime dependencies can list those |
- generated files both in the "outputs" list as well as the "data" |
- list. |
+ typically data files or directories of data files. The paths are interpreted |
+ as being relative to the current build file. Since these are runtime |
+ dependencies, they do not affect which targets are built or when. To declare |
+ input files to a script, use "inputs". |
+ |
+ Appearing in the "data" section does not imply any special handling such as |
+ copying them to the output directory. This is just used for declaring runtime |
+ dependencies. Runtime dependencies can be queried using the "runtime_deps" |
+ category of "gn desc" or written during build generation via |
+ "--runtime-deps-list-file". |
+ |
+ GN doesn't require data files to exist at build-time. So actions that produce |
+ files that are in turn runtime dependencies can list those generated files |
+ both in the "outputs" list as well as the "data" list. |
By convention, directories are listed with a trailing slash: |
data = [ "test/data/" ] |
- However, no verification is done on these so GN doesn't enforce this. |
- The paths are just rebased and passed along when requested. |
+ However, no verification is done on these so GN doesn't enforce this. The |
+ paths are just rebased and passed along when requested. |
- Note: On iOS and OS X, create_bundle targets will not be recursed |
- into when gathering data. See "gn help create_bundle" for details. |
+ Note: On iOS and OS X, create_bundle targets will not be recursed into when |
+ gathering data. See "gn help create_bundle" for details. |
See "gn help runtime_deps" for how these are used. |
- |
``` |
## **data_deps**: Non-linked dependencies. |
``` |
A list of target labels. |
- Specifies dependencies of a target that are not actually linked into |
- the current target. Such dependencies will be built and will be |
- available at runtime. |
+ Specifies dependencies of a target that are not actually linked into the |
+ current target. Such dependencies will be built and will be available at |
+ runtime. |
- This is normally used for things like plugins or helper programs that |
- a target needs at runtime. |
+ This is normally used for things like plugins or helper programs that a |
+ target needs at runtime. |
- Note: On iOS and OS X, create_bundle targets will not be recursed |
- into when gathering data_deps. See "gn help create_bundle" for |
- details. |
+ Note: On iOS and OS X, create_bundle targets will not be recursed into when |
+ gathering data_deps. See "gn help create_bundle" for details. |
See also "gn help deps" and "gn help data". |
@@ -4819,15 +4615,14 @@ |
data_deps = [ "//plugins:my_runtime_plugin" ] |
} |
- |
``` |
## **defines**: C preprocessor defines. |
``` |
A list of strings |
- These strings will be passed to the C/C++ compiler as #defines. The |
- strings may or may not include an "=" to assign a value. |
+ These strings will be passed to the C/C++ compiler as #defines. The strings |
+ may or may not include an "=" to assign a value. |
``` |
@@ -4855,22 +4650,29 @@ |
``` |
defines = [ "AWESOME_FEATURE", "LOG_LEVEL=3" ] |
- |
``` |
## **depfile**: [string] File name for input dependencies for actions. |
``` |
- If nonempty, this string specifies that the current action or |
- action_foreach target will generate the given ".d" file containing |
- the dependencies of the input. Empty or unset means that the script |
- doesn't generate the files. |
+ If nonempty, this string specifies that the current action or action_foreach |
+ target will generate the given ".d" file containing the dependencies of the |
+ input. Empty or unset means that the script doesn't generate the files. |
+ |
+ A depfile should be used only when a target depends on files that are not |
+ already specified by a target's inputs and sources. Likewise, depfiles should |
+ specify only those dependencies not already included in sources or inputs. |
+ |
+ The .d file should go in the target output directory. If you have more than |
+ one source file that the script is being run over, you can use the output |
+ file expansions described in "gn help action_foreach" to name the .d file |
+ according to the input." |
- The .d file should go in the target output directory. If you have more |
- than one source file that the script is being run over, you can use |
- the output file expansions described in "gn help action_foreach" to |
- name the .d file according to the input. |
- The format is that of a Makefile, and all of the paths should be |
- relative to the root build directory. |
+ The format is that of a Makefile and all paths must be relative to the root |
+ build directory. Only one output may be listed and it must match the first |
+ output of the action. |
+ |
+ Although depfiles are created by an action, they should not be listed in the |
+ action's "outputs" unless another target will use the file as an input. |
``` |
@@ -4889,7 +4691,6 @@ |
args = [ "{{source}}", "-o", depfile ] |
} |
- |
``` |
## **deps**: Private linked dependencies. |
@@ -4897,43 +4698,42 @@ |
A list of target labels. |
Specifies private dependencies of a target. Private dependencies are |
- propagated up the dependency tree and linked to dependant targets, but |
- do not grant the ability to include headers from the dependency. |
- Public configs are not forwarded. |
+ propagated up the dependency tree and linked to dependant targets, but do not |
+ grant the ability to include headers from the dependency. Public configs are |
+ not forwarded. |
``` |
### **Details of dependency propagation** |
``` |
- Source sets, shared libraries, and non-complete static libraries |
- will be propagated up the dependency tree across groups, non-complete |
- static libraries and source sets. |
+ Source sets, shared libraries, and non-complete static libraries will be |
+ propagated up the dependency tree across groups, non-complete static |
+ libraries and source sets. |
- Executables, shared libraries, and complete static libraries will |
- link all propagated targets and stop propagation. Actions and copy |
- steps also stop propagation, allowing them to take a library as an |
- input but not force dependants to link to it. |
+ Executables, shared libraries, and complete static libraries will link all |
+ propagated targets and stop propagation. Actions and copy steps also stop |
+ propagation, allowing them to take a library as an input but not force |
+ dependants to link to it. |
- Propagation of all_dependent_configs and public_configs happens |
- independently of target type. all_dependent_configs are always |
- propagated across all types of targets, and public_configs |
- are always propagated across public deps of all types of targets. |
+ Propagation of all_dependent_configs and public_configs happens independently |
+ of target type. all_dependent_configs are always propagated across all types |
+ of targets, and public_configs are always propagated across public deps of |
+ all types of targets. |
- Data dependencies are propagated differently. See |
- "gn help data_deps" and "gn help runtime_deps". |
+ Data dependencies are propagated differently. See "gn help data_deps" and |
+ "gn help runtime_deps". |
See also "public_deps". |
- |
``` |
## **include_dirs**: Additional include directories. |
``` |
A list of source directories. |
- The directories in this list will be added to the include path for |
- the files in the affected target. |
+ The directories in this list will be added to the include path for the files |
+ in the affected target. |
``` |
@@ -4961,14 +4761,13 @@ |
``` |
include_dirs = [ "src/include", "//third_party/foo" ] |
- |
``` |
## **inputs**: Additional compile-time dependencies. |
``` |
- Inputs are compile-time dependencies of the current target. This means |
- that all inputs must be available before compiling any of the sources |
- or executing any actions. |
+ Inputs are compile-time dependencies of the current target. This means that |
+ all inputs must be available before compiling any of the sources or executing |
+ any actions. |
Inputs are typically only used for action and action_foreach targets. |
@@ -4977,42 +4776,40 @@ |
### **Inputs for actions** |
``` |
- For action and action_foreach targets, inputs should be the inputs to |
- script that don't vary. These should be all .py files that the script |
- uses via imports (the main script itself will be an implicit dependency |
- of the action so need not be listed). |
+ For action and action_foreach targets, inputs should be the inputs to script |
+ that don't vary. These should be all .py files that the script uses via |
+ imports (the main script itself will be an implicit dependency of the action |
+ so need not be listed). |
- For action targets, inputs and sources are treated the same, but from |
- a style perspective, it's recommended to follow the same rule as |
- action_foreach and put helper files in the inputs, and the data used |
- by the script (if any) in sources. |
+ For action targets, inputs and sources are treated the same, but from a style |
+ perspective, it's recommended to follow the same rule as action_foreach and |
+ put helper files in the inputs, and the data used by the script (if any) in |
+ sources. |
- Note that another way to declare input dependencies from an action |
- is to have the action write a depfile (see "gn help depfile"). This |
- allows the script to dynamically write input dependencies, that might |
- not be known until actually executing the script. This is more |
- efficient than doing processing while running GN to determine the |
- inputs, and is easier to keep in-sync than hardcoding the list. |
+ Note that another way to declare input dependencies from an action is to have |
+ the action write a depfile (see "gn help depfile"). This allows the script to |
+ dynamically write input dependencies, that might not be known until actually |
+ executing the script. This is more efficient than doing processing while |
+ running GN to determine the inputs, and is easier to keep in-sync than |
+ hardcoding the list. |
``` |
### **Script input gotchas** |
``` |
- It may be tempting to write a script that enumerates all files in a |
- directory as inputs. Don't do this! Even if you specify all the files |
- in the inputs or sources in the GN target (or worse, enumerate the |
- files in an exec_script call when running GN, which will be slow), the |
- dependencies will be broken. |
+ It may be tempting to write a script that enumerates all files in a directory |
+ as inputs. Don't do this! Even if you specify all the files in the inputs or |
+ sources in the GN target (or worse, enumerate the files in an exec_script |
+ call when running GN, which will be slow), the dependencies will be broken. |
- The problem happens if a file is ever removed because the inputs are |
- not listed on the command line to the script. Because the script |
- hasn't changed and all inputs are up to date, the script will not |
- re-run and you will get a stale build. Instead, either list all |
- inputs on the command line to the script, or if there are many, create |
- a separate list file that the script reads. As long as this file is |
- listed in the inputs, the build will detect when it has changed in any |
- way and the action will re-run. |
+ The problem happens if a file is ever removed because the inputs are not |
+ listed on the command line to the script. Because the script hasn't changed |
+ and all inputs are up to date, the script will not re-run and you will get a |
+ stale build. Instead, either list all inputs on the command line to the |
+ script, or if there are many, create a separate list file that the script |
+ reads. As long as this file is listed in the inputs, the build will detect |
+ when it has changed in any way and the action will re-run. |
``` |
@@ -5020,15 +4817,14 @@ |
``` |
Any input dependencies will be resolved before compiling any sources. |
- Normally, all actions that a target depends on will be run before any |
- files in a target are compiled. So if you depend on generated headers, |
- you do not typically need to list them in the inputs section. |
+ Normally, all actions that a target depends on will be run before any files |
+ in a target are compiled. So if you depend on generated headers, you do not |
+ typically need to list them in the inputs section. |
- Inputs for binary targets will be treated as implicit dependencies, |
- meaning that changes in any of the inputs will force all sources in |
- the target to be recompiled. If an input only applies to a subset of |
- source files, you may want to split those into a separate target to |
- avoid unnecessary recompiles. |
+ Inputs for binary targets will be treated as implicit dependencies, meaning |
+ that changes in any of the inputs will force all sources in the target to be |
+ recompiled. If an input only applies to a subset of source files, you may |
+ want to split those into a separate target to avoid unnecessary recompiles. |
``` |
@@ -5040,7 +4836,6 @@ |
inputs = [ "input.data" ] |
} |
- |
``` |
## **ldflags**: Flags passed to the linker. |
@@ -5048,13 +4843,13 @@ |
A list of strings. |
These flags are passed on the command-line to the linker and generally |
- specify various linking options. Most targets will not need these and |
- will use "libs" and "lib_dirs" instead. |
+ specify various linking options. Most targets will not need these and will |
+ use "libs" and "lib_dirs" instead. |
- ldflags are NOT pushed to dependents, so applying ldflags to source |
- sets or static libraries will be a no-op. If you want to apply ldflags |
- to dependent targets, put them in a config and set it in the |
- all_dependent_configs or public_configs. |
+ ldflags are NOT pushed to dependents, so applying ldflags to source sets or |
+ static libraries will be a no-op. If you want to apply ldflags to dependent |
+ targets, put them in a config and set it in the all_dependent_configs or |
+ public_configs. |
``` |
@@ -5082,9 +4877,9 @@ |
``` |
A list of directories. |
- Specifies additional directories passed to the linker for searching |
- for the required libraries. If an item is not an absolute path, it |
- will be treated as being relative to the current build file. |
+ Specifies additional directories passed to the linker for searching for the |
+ required libraries. If an item is not an absolute path, it will be treated as |
+ being relative to the current build file. |
libs and lib_dirs work differently than other flags in two respects. |
First, then are inherited across static library boundaries until a |
@@ -5122,15 +4917,14 @@ |
``` |
lib_dirs = [ "/usr/lib/foo", "lib/doom_melon" ] |
- |
``` |
## **libs**: Additional libraries to link. |
``` |
A list of library names or library paths. |
- These libraries will be linked into the final binary (executable or |
- shared library) containing the current target. |
+ These libraries will be linked into the final binary (executable or shared |
+ library) containing the current target. |
libs and lib_dirs work differently than other flags in two respects. |
First, then are inherited across static library boundaries until a |
@@ -5146,26 +4940,25 @@ |
There are several different things that can be expressed in libs: |
File paths |
- Values containing '/' will be treated as references to files in |
- the checkout. They will be rebased to be relative to the build |
- directory and specified in the "libs" for linker tools. This |
- facility should be used for libraries that are checked in to the |
- version control. For libraries that are generated by the build, |
- use normal GN deps to link them. |
+ Values containing '/' will be treated as references to files in the |
+ checkout. They will be rebased to be relative to the build directory and |
+ specified in the "libs" for linker tools. This facility should be used |
+ for libraries that are checked in to the version control. For libraries |
+ that are generated by the build, use normal GN deps to link them. |
System libraries |
- Values not containing '/' will be treated as system library names. |
- These will be passed unmodified to the linker and prefixed with |
- the "lib_prefix" attribute of the linker tool. Generally you |
- would set the "lib_dirs" so the given library is found. Your |
- BUILD.gn file should not specify the switch (like "-l"): this |
- will be encoded in the "lib_prefix" of the tool. |
+ Values not containing '/' will be treated as system library names. These |
+ will be passed unmodified to the linker and prefixed with the |
+ "lib_prefix" attribute of the linker tool. Generally you would set the |
+ "lib_dirs" so the given library is found. Your BUILD.gn file should not |
+ specify the switch (like "-l"): this will be encoded in the "lib_prefix" |
+ of the tool. |
Apple frameworks |
- System libraries ending in ".framework" will be special-cased: |
- the switch "-framework" will be prepended instead of the |
- lib_prefix, and the ".framework" suffix will be trimmed. This is |
- to support the way Mac links framework dependencies. |
+ System libraries ending in ".framework" will be special-cased: the switch |
+ "-framework" will be prepended instead of the lib_prefix, and the |
+ ".framework" suffix will be trimmed. This is to support the way Mac links |
+ framework dependencies. |
``` |
@@ -5201,25 +4994,24 @@ |
On Linux: |
libs = [ "ld" ] |
- |
``` |
## **output_dir**: [directory] Directory to put output file in. |
``` |
- For library and executable targets, overrides the directory for the |
- final output. This must be in the root_build_dir or a child thereof. |
+ For library and executable targets, overrides the directory for the final |
+ output. This must be in the root_build_dir or a child thereof. |
- This should generally be in the root_out_dir or a subdirectory thereof |
- (the root_out_dir will be the same as the root_build_dir for the |
- default toolchain, and will be a subdirectory for other toolchains). |
- Not putting the output in a subdirectory of root_out_dir can result |
- in collisions between different toolchains, so you will need to take |
- steps to ensure that your target is only present in one toolchain. |
+ This should generally be in the root_out_dir or a subdirectory thereof (the |
+ root_out_dir will be the same as the root_build_dir for the default |
+ toolchain, and will be a subdirectory for other toolchains). Not putting the |
+ output in a subdirectory of root_out_dir can result in collisions between |
+ different toolchains, so you will need to take steps to ensure that your |
+ target is only present in one toolchain. |
- Normally the toolchain specifies the output directory for libraries |
- and executables (see "gn help tool"). You will have to consult that |
- for the default location. The default location will be used if |
- output_dir is undefined or empty. |
+ Normally the toolchain specifies the output directory for libraries and |
+ executables (see "gn help tool"). You will have to consult that for the |
+ default location. The default location will be used if output_dir is |
+ undefined or empty. |
``` |
@@ -5231,23 +5023,21 @@ |
... |
} |
- |
``` |
## **output_extension**: Value to use for the output's file extension. |
``` |
- Normally the file extension for a target is based on the target |
- type and the operating system, but in rare cases you will need to |
- override the name (for example to use "libfreetype.so.6" instead |
- of libfreetype.so on Linux). |
+ Normally the file extension for a target is based on the target type and the |
+ operating system, but in rare cases you will need to override the name (for |
+ example to use "libfreetype.so.6" instead of libfreetype.so on Linux). |
This value should not include a leading dot. If undefined, the default |
- specified on the tool will be used. If set to the empty string, no |
- output extension will be used. |
+ specified on the tool will be used. If set to the empty string, no output |
+ extension will be used. |
- The output_extension will be used to set the "{{output_extension}}" |
- expansion which the linker tool will generally use to specify the |
- output file name. See "gn help tool". |
+ The output_extension will be used to set the "{{output_extension}}" expansion |
+ which the linker tool will generally use to specify the output file name. See |
+ "gn help tool". |
``` |
@@ -5262,8 +5052,8 @@ |
... |
} |
- # On Windows, generate a "mysettings.cpl" control panel applet. |
- # Control panel applets are actually special shared libraries. |
+ # On Windows, generate a "mysettings.cpl" control panel applet. Control panel |
+ # applets are actually special shared libraries. |
if (is_win) { |
shared_library("mysettings") { |
output_extension = "cpl" |
@@ -5271,24 +5061,22 @@ |
} |
} |
- |
``` |
## **output_name**: Define a name for the output file other than the default. |
``` |
- Normally the output name of a target will be based on the target name, |
- so the target "//foo/bar:bar_unittests" will generate an output |
- file such as "bar_unittests.exe" (using Windows as an example). |
+ Normally the output name of a target will be based on the target name, so the |
+ target "//foo/bar:bar_unittests" will generate an output file such as |
+ "bar_unittests.exe" (using Windows as an example). |
- Sometimes you will want an alternate name to avoid collisions or |
- if the internal name isn't appropriate for public distribution. |
+ Sometimes you will want an alternate name to avoid collisions or if the |
+ internal name isn't appropriate for public distribution. |
- The output name should have no extension or prefixes, these will be |
- added using the default system rules. For example, on Linux an output |
- name of "foo" will produce a shared library "libfoo.so". There |
- is no way to override the output prefix of a linker tool on a per- |
- target basis. If you need more flexibility, create a copy target |
- to produce the file you want. |
+ The output name should have no extension or prefixes, these will be added |
+ using the default system rules. For example, on Linux an output name of "foo" |
+ will produce a shared library "libfoo.so". There is no way to override the |
+ output prefix of a linker tool on a per- target basis. If you need more |
+ flexibility, create a copy target to produce the file you want. |
This variable is valid for all binary output target types. |
@@ -5301,20 +5089,17 @@ |
output_name = "fluffy_bunny" |
} |
- |
``` |
## **output_prefix_override**: Don't use prefix for output name. |
``` |
- A boolean that overrides the output prefix for a target. Defaults to |
- false. |
+ A boolean that overrides the output prefix for a target. Defaults to false. |
- Some systems use prefixes for the names of the final target output |
- file. The normal example is "libfoo.so" on Linux for a target |
- named "foo". |
+ Some systems use prefixes for the names of the final target output file. The |
+ normal example is "libfoo.so" on Linux for a target named "foo". |
- The output prefix for a given target type is specified on the linker |
- tool (see "gn help tool"). Sometimes this prefix is undesired. |
+ The output prefix for a given target type is specified on the linker tool |
+ (see "gn help tool"). Sometimes this prefix is undesired. |
See also "gn help output_extension". |
@@ -5324,74 +5109,69 @@ |
``` |
shared_library("doom_melon") { |
- # Normally this will produce "libdoom_melon.so" on Linux, setting |
- # Setting this flag will produce "doom_melon.so". |
+ # Normally this will produce "libdoom_melon.so" on Linux. Setting this flag |
+ # will produce "doom_melon.so". |
output_prefix_override = true |
... |
} |
- |
``` |
## **outputs**: Output files for actions and copy targets. |
``` |
- Outputs is valid for "copy", "action", and "action_foreach" |
- target types and indicates the resulting files. Outputs must always |
- refer to files in the build directory. |
+ Outputs is valid for "copy", "action", and "action_foreach" target types and |
+ indicates the resulting files. Outputs must always refer to files in the |
+ build directory. |
copy |
- Copy targets should have exactly one entry in the outputs list. If |
- there is exactly one source, this can be a literal file name or a |
- source expansion. If there is more than one source, this must |
- contain a source expansion to map a single input name to a single |
- output name. See "gn help copy". |
+ Copy targets should have exactly one entry in the outputs list. If there is |
+ exactly one source, this can be a literal file name or a source expansion. |
+ If there is more than one source, this must contain a source expansion to |
+ map a single input name to a single output name. See "gn help copy". |
action_foreach |
- Action_foreach targets must always use source expansions to map |
- input files to output files. There can be more than one output, |
- which means that each invocation of the script will produce a set of |
- files (presumably based on the name of the input file). See |
- "gn help action_foreach". |
+ Action_foreach targets must always use source expansions to map input files |
+ to output files. There can be more than one output, which means that each |
+ invocation of the script will produce a set of files (presumably based on |
+ the name of the input file). See "gn help action_foreach". |
action |
- Action targets (excluding action_foreach) must list literal output |
- file(s) with no source expansions. See "gn help action". |
- |
+ Action targets (excluding action_foreach) must list literal output file(s) |
+ with no source expansions. See "gn help action". |
``` |
## **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. |
+ 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. |
+ 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). |
+ 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. |
+ 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. |
+ 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: |
@@ -5419,15 +5199,13 @@ |
... |
- |
``` |
## **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". |
- |
+ 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". |
``` |
## **product_type**: Product type for Xcode projects. |
@@ -5436,36 +5214,34 @@ |
Correspond to the type of the product of a create_bundle target. Only |
meaningful to Xcode (used as part of the Xcode project generation). |
- When generating Xcode project files, only create_bundle target with |
- a non-empty product_type will have a corresponding target in Xcode |
- project. |
- |
+ When generating Xcode project files, only create_bundle target with a |
+ non-empty product_type will have a corresponding target in Xcode project. |
``` |
## **public**: Declare public header files for a target. |
``` |
- A list of files that other targets can include. These permissions are |
- checked via the "check" command (see "gn help check"). |
+ A list of files that other targets can include. These permissions are checked |
+ via the "check" command (see "gn help check"). |
- If no public files are declared, other targets (assuming they have |
- visibility to depend on this target can include any file in the |
- sources list. If this variable is defined on a target, dependent |
- targets may only include files on this whitelist. |
+ If no public files are declared, other targets (assuming they have visibility |
+ to depend on this target can include any file in the sources list. If this |
+ variable is defined on a target, dependent targets may only include files on |
+ this whitelist. |
- Header file permissions are also subject to visibility. A target |
- must be visible to another target to include any files from it at all |
- and the public headers indicate which subset of those files are |
- permitted. See "gn help visibility" for more. |
+ Header file permissions are also subject to visibility. A target must be |
+ visible to another target to include any files from it at all and the public |
+ headers indicate which subset of those files are permitted. See "gn help |
+ visibility" for more. |
- Public files are inherited through the dependency tree. So if there is |
- a dependency A -> B -> C, then A can include C's public headers. |
- However, the same is NOT true of visibility, so unless A is in C's |
- visibility list, the include will be rejected. |
+ Public files are inherited through the dependency tree. So if there is a |
+ dependency A -> B -> C, then A can include C's public headers. However, the |
+ same is NOT true of visibility, so unless A is in C's visibility list, the |
+ include will be rejected. |
- GN only knows about files declared in the "sources" and "public" |
- sections of targets. If a file is included that is not known to the |
- build, it will be allowed. |
+ GN only knows about files declared in the "sources" and "public" sections of |
+ targets. If a file is included that is not known to the build, it will be |
+ allowed. |
``` |
@@ -5478,23 +5254,21 @@ |
No files are public (no targets may include headers from this one): |
public = [] |
- |
``` |
## **public_configs**: Configs to be applied on dependents. |
``` |
A list of config labels. |
- Targets directly depending on this one will have the configs listed in |
- this variable added to them. These configs will also apply to the |
- current target. |
+ Targets directly depending on this one will have the configs listed in this |
+ variable added to them. These configs will also apply to the current target. |
This addition happens in a second phase once a target and all of its |
- dependencies have been resolved. Therefore, a target will not see |
- these force-added configs in their "configs" variable while the |
- script is running, and then can not be removed. As a result, this |
- capability should generally only be used to add defines and include |
- directories necessary to compile a target's headers. |
+ dependencies have been resolved. Therefore, a target will not see these |
+ force-added configs in their "configs" variable while the script is running, |
+ and then can not be removed. As a result, this capability should generally |
+ only be used to add defines and include directories necessary to compile a |
+ target's headers. |
See also "all_dependent_configs". |
@@ -5522,40 +5296,37 @@ |
## **public_deps**: Declare public dependencies. |
``` |
- Public dependencies are like private dependencies (see |
- "gn help deps") but additionally express that the current target |
- exposes the listed deps as part of its public API. |
+ Public dependencies are like private dependencies (see "gn help deps") but |
+ additionally express that the current target exposes the listed deps as part |
+ of its public API. |
This has several ramifications: |
- - public_configs that are part of the dependency are forwarded |
- to direct dependents. |
+ - public_configs that are part of the dependency are forwarded to direct |
+ dependents. |
- - Public headers in the dependency are usable by dependents |
- (includes do not require a direct dependency or visibility). |
+ - Public headers in the dependency are usable by dependents (includes do |
+ not require a direct dependency or visibility). |
- - If the current target is a shared library, other shared libraries |
- that it publicly depends on (directly or indirectly) are |
- propagated up the dependency tree to dependents for linking. |
+ - If the current target is a shared library, other shared libraries that it |
+ publicly depends on (directly or indirectly) are propagated up the |
+ dependency tree to dependents for linking. |
``` |
### **Discussion** |
``` |
- Say you have three targets: A -> B -> C. C's visibility may allow |
- B to depend on it but not A. Normally, this would prevent A from |
- including any headers from C, and C's public_configs would apply |
- only to B. |
+ Say you have three targets: A -> B -> C. C's visibility may allow B to depend |
+ on it but not A. Normally, this would prevent A from including any headers |
+ from C, and C's public_configs would apply only to B. |
- If B lists C in its public_deps instead of regular deps, A will now |
- inherit C's public_configs and the ability to include C's public |
- headers. |
+ If B lists C in its public_deps instead of regular deps, A will now inherit |
+ C's public_configs and the ability to include C's public headers. |
- Generally if you are writing a target B and you include C's headers |
- as part of B's public headers, or targets depending on B should |
- consider B and C to be part of a unit, you should use public_deps |
- instead of deps. |
+ Generally if you are writing a target B and you include C's headers as part |
+ of B's public headers, or targets depending on B should consider B and C to |
+ be part of a unit, you should use public_deps instead of deps. |
``` |
@@ -5573,26 +5344,25 @@ |
public_deps = [ ":c" ] |
} |
- |
``` |
## **response_file_contents**: Contents of a response file for actions. |
``` |
- Sometimes the arguments passed to a script can be too long for the |
- system's command-line capabilities. This is especially the case on |
- Windows where the maximum command-line length is less than 8K. A |
- response file allows you to pass an unlimited amount of data to a |
- script in a temporary file for an action or action_foreach target. |
+ Sometimes the arguments passed to a script can be too long for the system's |
+ command-line capabilities. This is especially the case on Windows where the |
+ maximum command-line length is less than 8K. A response file allows you to |
+ pass an unlimited amount of data to a script in a temporary file for an |
+ action or action_foreach target. |
- If the response_file_contents variable is defined and non-empty, the |
- list will be treated as script args (including possibly substitution |
- patterns) that will be written to a temporary file at build time. |
- The name of the temporary file will be substituted for |
- "{{response_file_name}}" in the script args. |
+ If the response_file_contents variable is defined and non-empty, the list |
+ will be treated as script args (including possibly substitution patterns) |
+ that will be written to a temporary file at build time. The name of the |
+ temporary file will be substituted for "{{response_file_name}}" in the script |
+ args. |
- The response file contents will always be quoted and escaped |
- according to Unix shell rules. To parse the response file, the Python |
- script should use "shlex.split(file_contents)". |
+ The response file contents will always be quoted and escaped according to |
+ Unix shell rules. To parse the response file, the Python script should use |
+ "shlex.split(file_contents)". |
``` |
@@ -5614,40 +5384,38 @@ |
] |
} |
- |
``` |
## **script**: Script file for actions. |
``` |
- An absolute or buildfile-relative file name of a Python script to run |
- for a action and action_foreach targets (see "gn help action" and |
- "gn help action_foreach"). |
- |
+ An absolute or buildfile-relative file name of a Python script to run for a |
+ action and action_foreach targets (see "gn help action" and "gn help |
+ action_foreach"). |
``` |
## **sources**: Source files for a target |
``` |
- A list of files. Non-absolute paths will be resolved relative to the |
- current build file. |
+ A list of files. Non-absolute paths will be resolved relative to the current |
+ build file. |
``` |
### **Sources for binary targets** |
``` |
- For binary targets (source sets, executables, and libraries), the |
- known file types will be compiled with the associated tools. Unknown |
- file types and headers will be skipped. However, you should still |
- list all C/C+ header files so GN knows about the existance of those |
- files for the purposes of include checking. |
+ For binary targets (source sets, executables, and libraries), the known file |
+ types will be compiled with the associated tools. Unknown file types and |
+ headers will be skipped. However, you should still list all C/C+ header files |
+ so GN knows about the existance of those files for the purposes of include |
+ checking. |
- As a special case, a file ending in ".def" will be treated as a |
- Windows module definition file. It will be appended to the link |
- line with a preceeding "/DEF:" string. There must be at most one |
- .def file in a target and they do not cross dependency boundaries |
- (so specifying a .def file in a static library or source set will have |
- no effect on the executable or shared library they're linked into). |
+ As a special case, a file ending in ".def" will be treated as a Windows |
+ module definition file. It will be appended to the link line with a |
+ preceeding "/DEF:" string. There must be at most one .def file in a target |
+ and they do not cross dependency boundaries (so specifying a .def file in a |
+ static library or source set will have no effect on the executable or shared |
+ library they're linked into). |
``` |
@@ -5655,29 +5423,28 @@ |
``` |
action_foreach |
- The sources are the set of files that the script will be executed |
- over. The script will run once per file. |
+ The sources are the set of files that the script will be executed over. The |
+ script will run once per file. |
action |
- The sources will be treated the same as inputs. See "gn help inputs" |
- for more information and usage advice. |
+ The sources will be treated the same as inputs. See "gn help inputs" for |
+ more information and usage advice. |
copy |
The source are the source files to copy. |
- |
``` |
## **testonly**: Declares a target must only be used for testing. |
``` |
Boolean. Defaults to false. |
- When a target is marked "testonly = true", it must only be depended |
- on by other test-only targets. Otherwise, GN will issue an error |
- that the depenedency is not allowed. |
+ When a target is marked "testonly = true", it must only be depended on by |
+ other test-only targets. Otherwise, GN will issue an error that the |
+ depenedency is not allowed. |
- This feature is intended to prevent accidentally shipping test code |
- in a final product. |
+ This feature is intended to prevent accidentally shipping test code in a |
+ final product. |
``` |
@@ -5689,35 +5456,33 @@ |
... |
} |
- |
``` |
## **visibility**: A list of labels that can depend on a target. |
``` |
- A list of labels and label patterns that define which targets can |
- depend on the current one. These permissions are checked via the |
- "check" command (see "gn help check"). |
+ A list of labels and label patterns that define which targets can depend on |
+ the current one. These permissions are checked via the "check" command (see |
+ "gn help check"). |
If visibility is not defined, it defaults to public ("*"). |
- If visibility is defined, only the targets with labels that match it |
- can depend on the current target. The empty list means no targets |
- can depend on the current target. |
+ If visibility is defined, only the targets with labels that match it can |
+ depend on the current target. The empty list means no targets can depend on |
+ the current target. |
- Tip: Often you will want the same visibility for all targets in a |
- BUILD file. In this case you can just put the definition at the top, |
- outside of any target, and the targets will inherit that scope and see |
- the definition. |
+ Tip: Often you will want the same visibility for all targets in a BUILD file. |
+ In this case you can just put the definition at the top, outside of any |
+ target, and the targets will inherit that scope and see the definition. |
``` |
### **Patterns** |
``` |
- See "gn help label_pattern" for more details on what types of |
- patterns are supported. If a toolchain is specified, only targets |
- in that toolchain will be matched. If a toolchain is not specified on |
- a pattern, targets in all toolchains will be matched. |
+ See "gn help label_pattern" for more details on what types of patterns are |
+ supported. If a toolchain is specified, only targets in that toolchain will |
+ be matched. If a toolchain is not specified on a pattern, targets in all |
+ toolchains will be matched. |
``` |
@@ -5749,44 +5514,41 @@ |
any targets in "//bar/" and any subdirectory thereof. |
visibility = [ "./*", "//bar/*" ] |
- |
``` |
## **write_runtime_deps**: Writes the target's runtime_deps to the given path. |
``` |
- Does not synchronously write the file, but rather schedules it |
- to be written at the end of generation. |
+ Does not synchronously write the file, but rather schedules it to be written |
+ at the end of generation. |
- If the file exists and the contents are identical to that being |
- written, the file will not be updated. This will prevent unnecessary |
- rebuilds of targets that depend on this file. |
+ If the file exists and the contents are identical to that being written, the |
+ file will not be updated. This will prevent unnecessary rebuilds of targets |
+ that depend on this file. |
Path must be within the output directory. |
- See "gn help runtime_deps" for how the runtime dependencies are |
- computed. |
- |
- The format of this file will list one file per line with no escaping. |
- The files will be relative to the root_build_dir. The first line of |
- the file will be the main output file of the target itself. The file |
- contents will be the same as requesting the runtime deps be written on |
- the command line (see "gn help --runtime-deps-list-file"). |
+ See "gn help runtime_deps" for how the runtime dependencies are computed. |
+ The format of this file will list one file per line with no escaping. The |
+ files will be relative to the root_build_dir. The first line of the file will |
+ be the main output file of the target itself. The file contents will be the |
+ same as requesting the runtime deps be written on the command line (see "gn |
+ help --runtime-deps-list-file"). |
``` |
## **Build Arguments Overview** |
``` |
- Build arguments are variables passed in from outside of the build |
- that build files can query to determine how the build works. |
+ Build arguments are variables passed in from outside of the build that build |
+ files can query to determine how the build works. |
``` |
### **How build arguments are set** |
``` |
- First, system default arguments are set based on the current system. |
- The built-in arguments are: |
+ First, system default arguments are set based on the current system. The |
+ built-in arguments are: |
- host_cpu |
- host_os |
- current_cpu |
@@ -5794,20 +5556,18 @@ |
- target_cpu |
- target_os |
- If specified, arguments from the --args command line flag are used. If |
- that flag is not specified, args from previous builds in the build |
- directory will be used (this is in the file args.gn in the build |
- directory). |
+ If specified, arguments from the --args command line flag are used. If that |
+ flag is not specified, args from previous builds in the build directory will |
+ be used (this is in the file args.gn in the build directory). |
- Last, for targets being compiled with a non-default toolchain, the |
- toolchain overrides are applied. These are specified in the |
- toolchain_args section of a toolchain definition. The use-case for |
- this is that a toolchain may be building code for a different |
- platform, and that it may want to always specify Posix, for example. |
- See "gn help toolchain" for more. |
+ Last, for targets being compiled with a non-default toolchain, the toolchain |
+ overrides are applied. These are specified in the toolchain_args section of a |
+ toolchain definition. The use-case for this is that a toolchain may be |
+ building code for a different platform, and that it may want to always |
+ specify Posix, for example. See "gn help toolchain" for more. |
- If you specify an override for a build argument that never appears in |
- a "declare_args" call, a nonfatal error will be displayed. |
+ If you specify an override for a build argument that never appears in a |
+ "declare_args" call, a nonfatal error will be displayed. |
``` |
@@ -5821,43 +5581,40 @@ |
os="android" |
gn gen out/FooBar --args="enable_doom_melon=true os=\"android\"" |
- This will overwrite the build directory with the given arguments. |
- (Note that the quotes inside the args command will usually need to |
- be escaped for your shell to pass through strings values.) |
+ This will overwrite the build directory with the given arguments. (Note |
+ that the quotes inside the args command will usually need to be escaped |
+ for your shell to pass through strings values.) |
``` |
### **How build arguments are used** |
``` |
- If you want to use an argument, you use declare_args() and specify |
- default values. These default values will apply if none of the steps |
- listed in the "How build arguments are set" section above apply to |
- the given argument, but the defaults will not override any of these. |
+ If you want to use an argument, you use declare_args() and specify default |
+ values. These default values will apply if none of the steps listed in the |
+ "How build arguments are set" section above apply to the given argument, but |
+ the defaults will not override any of these. |
- Often, the root build config file will declare global arguments that |
- will be passed to all buildfiles. Individual build files can also |
- specify arguments that apply only to those files. It is also useful |
- to specify build args in an "import"-ed file if you want such |
- arguments to apply to multiple buildfiles. |
+ Often, the root build config file will declare global arguments that will be |
+ passed to all buildfiles. Individual build files can also specify arguments |
+ that apply only to those files. It is also useful to specify build args in an |
+ "import"-ed file if you want such arguments to apply to multiple buildfiles. |
``` |
## **.gn file** |
``` |
- When gn starts, it will search the current directory and parent |
- directories for a file called ".gn". This indicates the source root. |
- You can override this detection by using the --root command-line |
- argument |
+ When gn starts, it will search the current directory and parent directories |
+ for a file called ".gn". This indicates the source root. You can override |
+ this detection by using the --root command-line argument |
- The .gn file in the source root will be executed. The syntax is the |
- same as a buildfile, but with very limited build setup-specific |
- meaning. |
+ The .gn file in the source root will be executed. The syntax is the same as a |
+ buildfile, but with very limited build setup-specific meaning. |
- If you specify --root, by default GN will look for the file .gn in |
- that directory. If you want to specify a different file, you can |
- additionally pass --dotfile: |
+ If you specify --root, by default GN will look for the file .gn in that |
+ directory. If you want to specify a different file, you can additionally pass |
+ --dotfile: |
gn gen out/Debug --root=/home/build --dotfile=/home/my_gn_file.gn |
@@ -5867,29 +5624,27 @@ |
``` |
buildconfig [required] |
- Label of the build config file. This file will be used to set up |
- the build file execution environment for each toolchain. |
+ Label of the build config file. This file will be used to set up the |
+ build file execution environment for each toolchain. |
check_targets [optional] |
- A list of labels and label patterns that should be checked when |
- running "gn check" or "gn gen --check". If unspecified, all |
- targets will be checked. If it is the empty list, no targets will |
- be checked. |
+ A list of labels and label patterns that should be checked when running |
+ "gn check" or "gn gen --check". If unspecified, all targets will be |
+ checked. If it is the empty list, no targets will be checked. |
- The format of this list is identical to that of "visibility" |
- so see "gn help visibility" for examples. |
+ The format of this list is identical to that of "visibility" so see "gn |
+ help visibility" for examples. |
exec_script_whitelist [optional] |
- A list of .gn/.gni files (not labels) that have permission to call |
- the exec_script function. If this list is defined, calls to |
- exec_script will be checked against this list and GN will fail if |
- the current file isn't in the list. |
+ A list of .gn/.gni files (not labels) that have permission to call the |
+ exec_script function. If this list is defined, calls to exec_script will |
+ be checked against this list and GN will fail if the current file isn't |
+ in the list. |
- This is to allow the use of exec_script to be restricted since |
- is easy to use inappropriately. Wildcards are not supported. |
- Files in the secondary_source tree (if defined) should be |
- referenced by ignoring the secondary tree and naming them as if |
- they are in the main tree. |
+ This is to allow the use of exec_script to be restricted since is easy to |
+ use inappropriately. Wildcards are not supported. Files in the |
+ secondary_source tree (if defined) should be referenced by ignoring the |
+ secondary tree and naming them as if they are in the main tree. |
If unspecified, the ability to call exec_script is unrestricted. |
@@ -5900,19 +5655,19 @@ |
] |
root [optional] |
- Label of the root build target. The GN build will start by loading |
- the build file containing this target name. This defaults to |
- "//:" which will cause the file //BUILD.gn to be loaded. |
+ Label of the root build target. The GN build will start by loading the |
+ build file containing this target name. This defaults to "//:" which will |
+ cause the file //BUILD.gn to be loaded. |
secondary_source [optional] |
- Label of an alternate directory tree to find input files. When |
- searching for a BUILD.gn file (or the build config file discussed |
- above), the file will first be looked for in the source root. |
- If it's not found, the secondary source root will be checked |
- (which would contain a parallel directory hierarchy). |
+ Label of an alternate directory tree to find input files. When searching |
+ for a BUILD.gn file (or the build config file discussed above), the file |
+ will first be looked for in the source root. If it's not found, the |
+ secondary source root will be checked (which would contain a parallel |
+ directory hierarchy). |
- This behavior is intended to be used when BUILD.gn files can't be |
- checked in to certain source directories for whatever reason. |
+ This behavior is intended to be used when BUILD.gn files can't be checked |
+ in to certain source directories for whatever reason. |
The secondary source root must be inside the main source tree. |
@@ -5932,16 +5687,15 @@ |
secondary_source = "//build/config/temporary_buildfiles/" |
- |
``` |
## **Language and grammar for GN build files** |
### **Tokens** |
``` |
- GN build files are read as sequences of tokens. While splitting the |
- file into tokens, the next token is the longest sequence of characters |
- that form a valid token. |
+ GN build files are read as sequences of tokens. While splitting the file |
+ into tokens, the next token is the longest sequence of characters that form a |
+ valid token. |
``` |
@@ -5953,8 +5707,8 @@ |
Comments start at the character "#" and stop at the next newline. |
- White space and comments are ignored except that they may separate |
- tokens that would otherwise combine into a single token. |
+ White space and comments are ignored except that they may separate tokens |
+ that would otherwise combine into a single token. |
``` |
@@ -5972,8 +5726,7 @@ |
### **Keywords** |
``` |
- The following keywords are reserved and may not be used as |
- identifiers: |
+ The following keywords are reserved and may not be used as identifiers: |
else false if true |
@@ -5998,10 +5751,12 @@ |
string = `"` { char | escape | expansion } `"` . |
escape = `\` ( "$" | `"` | char ) . |
- BracketExpansion = "{" ( identifier | ArrayAccess | ScopeAccess ) "}" . |
+ BracketExpansion = "{" ( identifier | ArrayAccess | ScopeAccess " |
+ ") "}" . |
Hex = "0x" [0-9A-Fa-f][0-9A-Fa-f] |
expansion = "$" ( identifier | BracketExpansion | Hex ) . |
- char = /* any character except "$", `"`, or newline */ . |
+ char = /* any character except "$", `"`, or newline " |
+ "*/ . |
After a backslash, certain sequences represent special characters: |
@@ -6011,15 +5766,15 @@ |
All other backslashes represent themselves. |
- To insert an arbitrary byte value, use $0xFF. For example, to |
- insert a newline character: "Line one$0x0ALine two". |
+ To insert an arbitrary byte value, use $0xFF. For example, to insert a |
+ newline character: "Line one$0x0ALine two". |
- An expansion will evaluate the variable following the '$' and insert |
- a stringified version of it into the result. For example, to concat |
- two path components with a slash separating them: |
+ An expansion will evaluate the variable following the '$' and insert a |
+ stringified version of it into the result. For example, to concat two path |
+ components with a slash separating them: |
"$var_one/$var_two" |
- Use the "${var_one}" format to be explicitly deliniate the variable |
- for otherwise-ambiguous cases. |
+ Use the "${var_one}" format to be explicitly deliniate the variable for |
+ otherwise-ambiguous cases. |
``` |
@@ -6078,21 +5833,21 @@ |
``` |
The GN language is dynamically typed. The following types are used: |
- - Boolean: Uses the keywords "true" and "false". There is no |
- implicit conversion between booleans and integers. |
+ - Boolean: Uses the keywords "true" and "false". There is no implicit |
+ conversion between booleans and integers. |
- Integers: All numbers in GN are signed 64-bit integers. |
- - Strings: Strings are 8-bit with no enforced encoding. When a string |
- is used to interact with other systems with particular encodings |
- (like the Windows and Mac filesystems) it is assumed to be UTF-8. |
- See "String literals" above for more. |
+ - Strings: Strings are 8-bit with no enforced encoding. When a string is |
+ used to interact with other systems with particular encodings (like the |
+ Windows and Mac filesystems) it is assumed to be UTF-8. See "String |
+ literals" above for more. |
- - Lists: Lists are arbitrary-length ordered lists of values. See |
- "Lists" below for more. |
+ - Lists: Lists are arbitrary-length ordered lists of values. See "Lists" |
+ below for more. |
- - Scopes: Scopes are like dictionaries that use variable names for |
- keys. See "Scopes" below for more. |
+ - Scopes: Scopes are like dictionaries that use variable names for keys. See |
+ "Scopes" below for more. |
``` |
@@ -6103,56 +5858,54 @@ |
mylist = [ 0, 1, 2, "some string" ] |
- A comma after the last item is optional. Lists are dereferenced using |
- 0-based indexing: |
+ A comma after the last item is optional. Lists are dereferenced using 0-based |
+ indexing: |
mylist[0] += 1 |
var = mylist[2] |
- Lists can be concatenated using the '+' and '+=' operators. Bare |
- values can not be concatenated with lists, to add a single item, |
- it must be put into a list of length one. |
+ Lists can be concatenated using the '+' and '+=' operators. Bare values can |
+ not be concatenated with lists, to add a single item, it must be put into a |
+ list of length one. |
- Items can be removed from lists using the '-' and '-=' operators. |
- This will remove all occurrences of every item in the right-hand list |
- from the left-hand list. It is an error to remove an item not in the |
- list. This is to prevent common typos and to detect dead code that |
- is removing things that no longer apply. |
+ Items can be removed from lists using the '-' and '-=' operators. This will |
+ remove all occurrences of every item in the right-hand list from the |
+ left-hand list. It is an error to remove an item not in the list. This is to |
+ prevent common typos and to detect dead code that is removing things that no |
+ longer apply. |
- It is an error to use '=' to replace a nonempty list with another |
- nonempty list. This is to prevent accidentally overwriting data |
- when in most cases '+=' was intended. To overwrite a list on purpose, |
- first assign it to the empty list: |
+ It is an error to use '=' to replace a nonempty list with another nonempty |
+ list. This is to prevent accidentally overwriting data when in most cases |
+ '+=' was intended. To overwrite a list on purpose, first assign it to the |
+ empty list: |
mylist = [] |
mylist = otherlist |
- When assigning to a list named 'sources' using '=' or '+=', list |
- items may be automatically filtered out. |
- See "gn help set_sources_assignment_filter" for more. |
+ When assigning to a list named 'sources' using '=' or '+=', list items may be |
+ automatically filtered out. See "gn help set_sources_assignment_filter" for |
+ more. |
``` |
### **Scopes** |
``` |
- All execution happens in the context of a scope which holds the |
- current state (like variables). With the exception of loops and |
- conditions, '{' introduces a new scope that has a parent reference to |
- the old scope. |
+ All execution happens in the context of a scope which holds the current state |
+ (like variables). With the exception of loops and conditions, '{' introduces |
+ a new scope that has a parent reference to the old scope. |
- Variable reads recursively search all nested scopes until the |
- variable is found or there are no more scopes. Variable writes always |
- go into the current scope. This means that after the closing '}' |
- (again excepting loops and conditions), all local variables will be |
- restored to the previous values. This also means that "foo = foo" |
- can do useful work by copying a variable into the current scope that |
- was defined in a containing scope. |
+ Variable reads recursively search all nested scopes until the variable is |
+ found or there are no more scopes. Variable writes always go into the current |
+ scope. This means that after the closing '}' (again excepting loops and |
+ conditions), all local variables will be restored to the previous values. |
+ This also means that "foo = foo" can do useful work by copying a variable |
+ into the current scope that was defined in a containing scope. |
- Scopes can also be assigned to variables. Such scopes can be created |
- by functions like exec_script, when invoking a template (the template |
- code refers to the variables set by the invoking code by the |
- implicitly-created "invoker" scope), or explicitly like: |
+ Scopes can also be assigned to variables. Such scopes can be created by |
+ functions like exec_script, when invoking a template (the template code |
+ refers to the variables set by the invoking code by the implicitly-created |
+ "invoker" scope), or explicitly like: |
empty_scope = {} |
myvalues = { |
@@ -6160,41 +5913,39 @@ |
bar = "something" |
} |
- Inside such a scope definition can be any GN code including |
- conditionals and function calls. After the close of the scope, it will |
- contain all variables explicitly set by the code contained inside it. |
- After this, the values can be read, modified, or added to: |
+ Inside such a scope definition can be any GN code including conditionals and |
+ function calls. After the close of the scope, it will contain all variables |
+ explicitly set by the code contained inside it. After this, the values can be |
+ read, modified, or added to: |
myvalues.foo += 2 |
empty_scope.new_thing = [ 1, 2, 3 ] |
- |
``` |
## **input_conversion**: Specifies how to transform input to a variable. |
``` |
- input_conversion is an argument to read_file and exec_script that |
- specifies how the result of the read operation should be converted |
- into a variable. |
+ input_conversion is an argument to read_file and exec_script that specifies |
+ how the result of the read operation should be converted into a variable. |
"" (the default) |
Discard the result and return None. |
"list lines" |
- Return the file contents as a list, with a string for each line. |
- The newlines will not be present in the result. The last line may |
- or may not end in a newline. |
+ Return the file contents as a list, with a string for each line. The |
+ newlines will not be present in the result. The last line may or may not |
+ end in a newline. |
- After splitting, each individual line will be trimmed of |
- whitespace on both ends. |
+ After splitting, each individual line will be trimmed of whitespace on |
+ both ends. |
"scope" |
- Execute the block as GN code and return a scope with the |
- resulting values in it. If the input was: |
+ Execute the block as GN code and return a scope with the resulting values |
+ in it. If the input was: |
a = [ "hello.cc", "world.cc" ] |
b = 26 |
- and you read the result into a variable named "val", then you |
- could access contents the "." operator on "val": |
+ and you read the result into a variable named "val", then you could |
+ access contents the "." operator on "val": |
sources = val.a |
some_count = val.b |
@@ -6202,34 +5953,33 @@ |
Return the file contents into a single string. |
"value" |
- Parse the input as if it was a literal rvalue in a buildfile. |
- Examples of typical program output using this mode: |
+ Parse the input as if it was a literal rvalue in a buildfile. Examples of |
+ typical program output using this mode: |
[ "foo", "bar" ] (result will be a list) |
or |
"foo bar" (result will be a string) |
or |
5 (result will be an integer) |
- Note that if the input is empty, the result will be a null value |
- which will produce an error if assigned to a variable. |
+ Note that if the input is empty, the result will be a null value which |
+ will produce an error if assigned to a variable. |
"trim ..." |
- Prefixing any of the other transformations with the word "trim" |
- will result in whitespace being trimmed from the beginning and end |
- of the result before processing. |
+ Prefixing any of the other transformations with the word "trim" will |
+ result in whitespace being trimmed from the beginning and end of the |
+ result before processing. |
Examples: "trim string" or "trim list lines" |
Note that "trim value" is useless because the value parser skips |
whitespace anyway. |
- |
``` |
## **Label patterns** |
``` |
- A label pattern is a way of expressing one or more labels in a portion |
- of the source tree. They are not general regular expressions. |
+ A label pattern is a way of expressing one or more labels in a portion of the |
+ source tree. They are not general regular expressions. |
They can take the following forms only: |
@@ -6246,41 +5996,38 @@ |
"//foo/bar/*" (all targets in any subdir of //foo/bar) |
"./*" (all targets in the current build file or sub dirs) |
- Any of the above forms can additionally take an explicit toolchain. |
- In this case, the toolchain must be fully qualified (no wildcards |
- are supported in the toolchain name). |
+ Any of the above forms can additionally take an explicit toolchain. In this |
+ case, the toolchain must be fully qualified (no wildcards are supported in |
+ the toolchain name). |
"//foo:bar(//build/toochain:mac)" |
An explicit target in an explicit toolchain. |
":*(//build/toolchain/linux:32bit)" |
- All targets in the current build file using the 32-bit Linux |
- toolchain. |
+ All targets in the current build file using the 32-bit Linux toolchain. |
"//foo/*(//build/toolchain:win)" |
All targets in //foo and any subdirectory using the Windows |
toolchain. |
- |
``` |
## **nogncheck**: Skip an include line from checking. |
``` |
GN's header checker helps validate that the includes match the build |
- dependency graph. Sometimes an include might be conditional or |
- otherwise problematic, but you want to specifically allow it. In this |
- case, it can be whitelisted. |
+ dependency graph. Sometimes an include might be conditional or otherwise |
+ problematic, but you want to specifically allow it. In this case, it can be |
+ whitelisted. |
- Include lines containing the substring "nogncheck" will be excluded |
- from header checking. The most common case is a conditional include: |
+ Include lines containing the substring "nogncheck" will be excluded from |
+ header checking. The most common case is a conditional include: |
#if defined(ENABLE_DOOM_MELON) |
#include "tools/doom_melon/doom_melon.h" // nogncheck |
#endif |
- If the build file has a conditional dependency on the corresponding |
- target that matches the conditional include, everything will always |
- link correctly: |
+ If the build file has a conditional dependency on the corresponding target |
+ that matches the conditional include, everything will always link correctly: |
source_set("mytarget") { |
... |
@@ -6289,79 +6036,78 @@ |
deps += [ "//tools/doom_melon" ] |
} |
- But GN's header checker does not understand preprocessor directives, |
- won't know it matches the build dependencies, and will flag this |
- include as incorrect when the condition is false. |
+ But GN's header checker does not understand preprocessor directives, won't |
+ know it matches the build dependencies, and will flag this include as |
+ incorrect when the condition is false. |
``` |
### **More information** |
``` |
- The topic "gn help check" has general information on how checking |
- works and advice on fixing problems. Targets can also opt-out of |
- checking, see "gn help check_includes". |
- |
+ The topic "gn help check" has general information on how checking works and |
+ advice on fixing problems. Targets can also opt-out of checking, see |
+ "gn help check_includes". |
``` |
## **Runtime dependencies** |
``` |
- Runtime dependencies of a target are exposed via the "runtime_deps" |
- category of "gn desc" (see "gn help desc") or they can be written |
- at build generation time via write_runtime_deps(), or |
- --runtime-deps-list-file (see "gn help --runtime-deps-list-file"). |
+ Runtime dependencies of a target are exposed via the "runtime_deps" category |
+ of "gn desc" (see "gn help desc") or they can be written at build generation |
+ time via write_runtime_deps(), or --runtime-deps-list-file (see "gn help |
+ --runtime-deps-list-file"). |
- To a first approximation, the runtime dependencies of a target are |
- the set of "data" files, data directories, and the shared libraries |
- from all transitive dependencies. Executables, shared libraries, and |
- loadable modules are considered runtime dependencies of themselves. |
+ To a first approximation, the runtime dependencies of a target are the set of |
+ "data" files, data directories, and the shared libraries from all transitive |
+ dependencies. Executables, shared libraries, and loadable modules are |
+ considered runtime dependencies of themselves. |
``` |
### **Executables** |
``` |
- Executable targets and those executable targets' transitive |
- dependencies are not considered unless that executable is listed in |
- "data_deps". Otherwise, GN assumes that the executable (and |
- everything it requires) is a build-time dependency only. |
+ Executable targets and those executable targets' transitive dependencies are |
+ not considered unless that executable is listed in "data_deps". Otherwise, GN |
+ assumes that the executable (and everything it requires) is a build-time |
+ dependency only. |
``` |
### **Actions and copies** |
``` |
- Action and copy targets that are listed as "data_deps" will have all |
- of their outputs and data files considered as runtime dependencies. |
- Action and copy targets that are "deps" or "public_deps" will have |
- only their data files considered as runtime dependencies. These |
- targets can list an output file in both the "outputs" and "data" |
- lists to force an output file as a runtime dependency in all cases. |
+ Action and copy targets that are listed as "data_deps" will have all of their |
+ outputs and data files considered as runtime dependencies. Action and copy |
+ targets that are "deps" or "public_deps" will have only their data files |
+ considered as runtime dependencies. These targets can list an output file in |
+ both the "outputs" and "data" lists to force an output file as a runtime |
+ dependency in all cases. |
- The different rules for deps and data_deps are to express build-time |
- (deps) vs. run-time (data_deps) outputs. If GN counted all build-time |
- copy steps as data dependencies, there would be a lot of extra stuff, |
- and if GN counted all run-time dependencies as regular deps, the |
- build's parallelism would be unnecessarily constrained. |
+ The different rules for deps and data_deps are to express build-time (deps) |
+ vs. run-time (data_deps) outputs. If GN counted all build-time copy steps as |
+ data dependencies, there would be a lot of extra stuff, and if GN counted all |
+ run-time dependencies as regular deps, the build's parallelism would be |
+ unnecessarily constrained. |
- This rule can sometimes lead to unintuitive results. For example, |
- given the three targets: |
+ This rule can sometimes lead to unintuitive results. For example, given the |
+ three targets: |
A --[data_deps]--> B --[deps]--> ACTION |
- GN would say that A does not have runtime deps on the result of the |
- ACTION, which is often correct. But the purpose of the B target might |
- be to collect many actions into one logic unit, and the "data"-ness |
- of A's dependency is lost. Solutions: |
+ GN would say that A does not have runtime deps on the result of the ACTION, |
+ which is often correct. But the purpose of the B target might be to collect |
+ many actions into one logic unit, and the "data"-ness of A's dependency is |
+ lost. Solutions: |
- - List the outputs of the action in it's data section (if the |
- results of that action are always runtime files). |
- - Have B list the action in data_deps (if the outputs of the actions |
- are always runtime files). |
- - Have B list the action in both deps and data deps (if the outputs |
- might be used in both contexts and you don't care about unnecessary |
- entries in the list of files required at runtime). |
- - Split B into run-time and build-time versions with the appropriate |
- "deps" for each. |
+ - List the outputs of the action in it's data section (if the results of |
+ that action are always runtime files). |
+ - Have B list the action in data_deps (if the outputs of the actions are |
+ always runtime files). |
+ - Have B list the action in both deps and data deps (if the outputs might be |
+ used in both contexts and you don't care about unnecessary entries in the |
+ list of files required at runtime). |
+ - Split B into run-time and build-time versions with the appropriate "deps" |
+ for each. |
``` |
@@ -6369,43 +6115,41 @@ |
``` |
The results of static_library or source_set targets are not considered |
- runtime dependencies since these are assumed to be intermediate |
- targets only. If you need to list a static library as a runtime |
- dependency, you can manually compute the .a/.lib file name for the |
- current platform and list it in the "data" list of a target |
- (possibly on the static library target itself). |
+ runtime dependencies since these are assumed to be intermediate targets only. |
+ If you need to list a static library as a runtime dependency, you can |
+ manually compute the .a/.lib file name for the current platform and list it |
+ in the "data" list of a target (possibly on the static library target |
+ itself). |
``` |
### **Multiple outputs** |
``` |
- Linker tools can specify which of their outputs should be considered |
- when computing the runtime deps by setting runtime_outputs. If this |
- is unset on the tool, the default will be the first output only. |
- |
+ Linker tools can specify which of their outputs should be considered when |
+ computing the runtime deps by setting runtime_outputs. If this is unset on |
+ the tool, the default will be the first output only. |
``` |
## **How Source Expansion Works** |
``` |
- Source expansion is used for the action_foreach and copy target types |
- to map source file names to output file names or arguments. |
+ Source expansion is used for the action_foreach and copy target types to map |
+ source file names to output file names or arguments. |
To perform source expansion in the outputs, GN maps every entry in the |
- sources to every entry in the outputs list, producing the cross |
- product of all combinations, expanding placeholders (see below). |
+ sources to every entry in the outputs list, producing the cross product of |
+ all combinations, expanding placeholders (see below). |
- Source expansion in the args works similarly, but performing the |
- placeholder substitution produces a different set of arguments for |
- each invocation of the script. |
+ Source expansion in the args works similarly, but performing the placeholder |
+ substitution produces a different set of arguments for each invocation of the |
+ script. |
- If no placeholders are found, the outputs or args list will be treated |
- as a static list of literal file names that do not depend on the |
- sources. |
+ If no placeholders are found, the outputs or args list will be treated as a |
+ static list of literal file names that do not depend on the sources. |
- See "gn help copy" and "gn help action_foreach" for more on how |
- this is applied. |
+ See "gn help copy" and "gn help action_foreach" for more on how this is |
+ applied. |
``` |
@@ -6413,13 +6157,11 @@ |
``` |
This section discusses only placeholders for actions. There are other |
- placeholders used in the definition of tools. See "gn help tool" for |
- those. |
+ placeholders used in the definition of tools. See "gn help tool" for those. |
{{source}} |
- The name of the source file including directory (*). This will |
- generally be used for specifying inputs to a script in the |
- "args" variable. |
+ The name of the source file including directory (*). This will generally |
+ be used for specifying inputs to a script in the "args" variable. |
"//foo/bar/baz.txt" => "../../foo/bar/baz.txt" |
{{source_file_part}} |
@@ -6427,38 +6169,34 @@ |
"//foo/bar/baz.txt" => "baz.txt" |
{{source_name_part}} |
- The filename part of the source file with no directory or |
- extension. This will generally be used for specifying a |
- transformation from a source file to a destination file with the |
- same name but different extension. |
+ The filename part of the source file with no directory or extension. This |
+ will generally be used for specifying a transformation from a source file |
+ to a destination file with the same name but different extension. |
"//foo/bar/baz.txt" => "baz" |
{{source_dir}} |
- The directory (*) containing the source file with no |
- trailing slash. |
+ The directory (*) containing the source file with no trailing slash. |
"//foo/bar/baz.txt" => "../../foo/bar" |
{{source_root_relative_dir}} |
- The path to the source file's directory relative to the source |
- root, with no leading "//" or trailing slashes. If the path is |
- system-absolute, (beginning in a single slash) this will just |
- return the path with no trailing slash. This value will always |
- be the same, regardless of whether it appears in the "outputs" |
- or "args" section. |
+ The path to the source file's directory relative to the source root, with |
+ no leading "//" or trailing slashes. If the path is system-absolute, |
+ (beginning in a single slash) this will just return the path with no |
+ trailing slash. This value will always be the same, regardless of whether |
+ it appears in the "outputs" or "args" section. |
"//foo/bar/baz.txt" => "foo/bar" |
{{source_gen_dir}} |
- The generated file directory (*) corresponding to the source |
- file's path. This will be different than the target's generated |
- file directory if the source file is in a different directory |
- than the BUILD.gn file. |
+ The generated file directory (*) corresponding to the source file's path. |
+ This will be different than the target's generated file directory if the |
+ source file is in a different directory than the BUILD.gn file. |
"//foo/bar/baz.txt" => "gen/foo/bar" |
{{source_out_dir}} |
- The object file directory (*) corresponding to the source file's |
- path, relative to the build directory. this us be different than |
- the target's out directory if the source file is in a different |
- directory than the build.gn file. |
+ The object file directory (*) corresponding to the source file's path, |
+ relative to the build directory. this us be different than the target's |
+ out directory if the source file is in a different directory than the |
+ build.gn file. |
"//foo/bar/baz.txt" => "obj/foo/bar" |
``` |
@@ -6466,18 +6204,17 @@ |
### **(*) Note on directories** |
``` |
- Paths containing directories (except the source_root_relative_dir) |
- will be different depending on what context the expansion is evaluated |
- in. Generally it should "just work" but it means you can't |
- concatenate strings containing these values with reasonable results. |
+ Paths containing directories (except the source_root_relative_dir) will be |
+ different depending on what context the expansion is evaluated in. Generally |
+ it should "just work" but it means you can't concatenate strings containing |
+ these values with reasonable results. |
- Details: source expansions can be used in the "outputs" variable, |
- the "args" variable, and in calls to "process_file_template". The |
- "args" are passed to a script which is run from the build directory, |
- so these directories will relative to the build directory for the |
- script to find. In the other cases, the directories will be source- |
- absolute (begin with a "//") because the results of those expansions |
- will be handled by GN internally. |
+ Details: source expansions can be used in the "outputs" variable, the "args" |
+ variable, and in calls to "process_file_template". The "args" are passed to a |
+ script which is run from the build directory, so these directories will |
+ relative to the build directory for the script to find. In the other cases, |
+ the directories will be source- absolute (begin with a "//") because the |
+ results of those expansions will be handled by GN internally. |
``` |
@@ -6504,7 +6241,6 @@ |
//out/Debug/obj/mydirectory/input2.h |
//out/Debug/obj/mydirectory/input2.cc |
- |
``` |
**Available global switches |
** Do "gn help --the_switch_you_want_help_on" for more. Individual |