Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: tools/gn/docs/reference.md

Issue 2790063007: GN: Re-generate reference.md (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # GN Reference 1 # GN Reference
2 2
3 *This page is automatically generated from* `gn help --markdown all`. 3 *This page is automatically generated from* `gn help --markdown all`.
4 4
5 ## Contents 5 ## Contents
6 6
7 * [Commands](#commands) 7 * [Commands](#commands)
8 * [analyze: Analyze which targets are affected by a list of files.](#analy ze) 8 * [analyze: Analyze which targets are affected by a list of files.](#analy ze)
9 * [args: Display or configure arguments declared by the build.](#args) 9 * [args: Display or configure arguments declared by the build.](#args)
10 * [check: Check header dependencies.](#check) 10 * [check: Check header dependencies.](#check)
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 - "error": This will only be present if an error occurred, and will contain 204 - "error": This will only be present if an error occurred, and will contain
205 a string describing the error. This includes cases where the input file is 205 a string describing the error. This includes cases where the input file is
206 not in the right format, or contains invalid targets. 206 not in the right format, or contains invalid targets.
207 207
208 The command returns 1 if it is unable to read the input file or write the 208 The command returns 1 if it is unable to read the input file or write the
209 output file, or if there is something wrong with the build such that gen 209 output file, or if there is something wrong with the build such that gen
210 would also fail, and 0 otherwise. In particular, it returns 0 even if the 210 would also fail, and 0 otherwise. In particular, it returns 0 even if the
211 "error" key is non-empty and a non-fatal error occurred. In other words, it 211 "error" key is non-empty and a non-fatal error occurred. In other words, it
212 tries really hard to always write something to the output JSON and convey 212 tries really hard to always write something to the output JSON and convey
213 errors that way rather than via return codes. 213 errors that way rather than via return codes.
214
215
216 ``` 214 ```
217 ### <a name="args"></a>**gn args <out_dir> [\--list] [\--short] [\--args]** 215 ### <a name="args"></a>**gn args <out_dir> [\--list] [\--short] [\--args]**
218 216
219 ``` 217 ```
220 See also "gn help buildargs" for a more high-level overview of how 218 See also "gn help buildargs" for a more high-level overview of how
221 build arguments work. 219 build arguments work.
222
223 ``` 220 ```
224 221
225 #### **Usage** 222 #### **Usage**
226 223
227 ``` 224 ```
228 gn args <out_dir> 225 gn args <out_dir>
229 Open the arguments for the given build directory in an editor. If the 226 Open the arguments for the given build directory in an editor. If the
230 given build directory doesn't exist, it will be created and an empty args 227 given build directory doesn't exist, it will be created and an empty args
231 file will be opened in the editor. You would type something like this 228 file will be opened in the editor. You would type something like this
232 into that file: 229 into that file:
(...skipping 11 matching lines...) Expand all
244 Lists all build arguments available in the current configuration, or, if 241 Lists all build arguments available in the current configuration, or, if
245 an exact_arg is specified for the list flag, just that one build 242 an exact_arg is specified for the list flag, just that one build
246 argument. 243 argument.
247 244
248 The output will list the declaration location, current value for the 245 The output will list the declaration location, current value for the
249 build, default value (if different than the current value), and comment 246 build, default value (if different than the current value), and comment
250 preceeding the declaration. 247 preceeding the declaration.
251 248
252 If --short is specified, only the names and current values will be 249 If --short is specified, only the names and current values will be
253 printed. 250 printed.
254
255 ``` 251 ```
256 252
257 #### **Examples** 253 #### **Examples**
258 254
259 ``` 255 ```
260 gn args out/Debug 256 gn args out/Debug
261 Opens an editor with the args for out/Debug. 257 Opens an editor with the args for out/Debug.
262 258
263 gn args out/Debug --list --short 259 gn args out/Debug --list --short
264 Prints all arguments with their default values for the out/Debug 260 Prints all arguments with their default values for the out/Debug
265 build. 261 build.
266 262
267 gn args out/Debug --list=target_cpu 263 gn args out/Debug --list=target_cpu
268 Prints information about the "target_cpu" argument for the " 264 Prints information about the "target_cpu" argument for the "
269 "out/Debug 265 "out/Debug
270 build. 266 build.
271 267
272 gn args --list --args="os=\"android\" enable_doom_melon=true" 268 gn args --list --args="os=\"android\" enable_doom_melon=true"
273 Prints all arguments with the default values for a build with the 269 Prints all arguments with the default values for a build with the
274 given arguments set (which may affect the values of other 270 given arguments set (which may affect the values of other
275 arguments). 271 arguments).
276
277
278 ``` 272 ```
279 ### <a name="check"></a>**gn check <out_dir> [<label_pattern>] [\--force]** 273 ### <a name="check"></a>**gn check <out_dir> [<label_pattern>] [\--force]**
280 274
281 ``` 275 ```
282 GN's include header checker validates that the includes for C-like source 276 GN's include header checker validates that the includes for C-like source
283 files match the build dependency graph. 277 files match the build dependency graph.
284 278
285 "gn check" is the same thing as "gn gen" with the "--check" flag except that 279 "gn check" is the same thing as "gn gen" with the "--check" flag except that
286 this command does not write out any build files. It's intended to be an easy 280 this command does not write out any build files. It's intended to be an easy
287 way to manually trigger include file checking. 281 way to manually trigger include file checking.
288 282
289 The <label_pattern> can take exact labels or patterns that match more than 283 The <label_pattern> can take exact labels or patterns that match more than
290 one (although not general regular expressions). If specified, only those 284 one (although not general regular expressions). If specified, only those
291 matching targets will be checked. See "gn help label_pattern" for details. 285 matching targets will be checked. See "gn help label_pattern" for details.
292
293 ``` 286 ```
294 287
295 #### **Command-specific switches** 288 #### **Command-specific switches**
296 289
297 ``` 290 ```
298 --force 291 --force
299 Ignores specifications of "check_includes = false" and checks all 292 Ignores specifications of "check_includes = false" and checks all
300 target's files that match the target label. 293 target's files that match the target label.
301
302 ``` 294 ```
303 295
304 #### **What gets checked** 296 #### **What gets checked**
305 297
306 ``` 298 ```
307 The .gn file may specify a list of targets to be checked. Only these targets 299 The .gn file may specify a list of targets to be checked. Only these targets
308 will be checked if no label_pattern is specified on the command line. 300 will be checked if no label_pattern is specified on the command line.
309 Otherwise, the command-line list is used instead. See "gn help dotfile". 301 Otherwise, the command-line list is used instead. See "gn help dotfile".
310 302
311 Targets can opt-out from checking with "check_includes = false" (see 303 Targets can opt-out from checking with "check_includes = false" (see
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 339
348 - If a target lists files as "public", only those files are able to be 340 - If a target lists files as "public", only those files are able to be
349 included by other targets. Anything in the sources will be considered 341 included by other targets. Anything in the sources will be considered
350 private and will not be includable regardless of dependency paths. 342 private and will not be includable regardless of dependency paths.
351 343
352 - Ouptuts from actions are treated like public sources on that target. 344 - Ouptuts from actions are treated like public sources on that target.
353 345
354 - A target can include headers from a target that depends on it if the 346 - A target can include headers from a target that depends on it if the
355 other target is annotated accordingly. See "gn help 347 other target is annotated accordingly. See "gn help
356 allow_circular_includes_from". 348 allow_circular_includes_from".
357
358 ``` 349 ```
359 350
360 #### **Advice on fixing problems** 351 #### **Advice on fixing problems**
361 352
362 ``` 353 ```
363 If you have a third party project that uses relative includes, it's generally 354 If you have a third party project that uses relative includes, it's generally
364 best to exclude that target from checking altogether via 355 best to exclude that target from checking altogether via
365 "check_includes = false". 356 "check_includes = false".
366 357
367 If you have conditional includes, make sure the build conditions and the 358 If you have conditional includes, make sure the build conditions and the
368 preprocessor conditions match, and annotate the line with "nogncheck" (see 359 preprocessor conditions match, and annotate the line with "nogncheck" (see
369 "gn help nogncheck" for an example). 360 "gn help nogncheck" for an example).
370 361
371 If two targets are hopelessly intertwined, use the 362 If two targets are hopelessly intertwined, use the
372 "allow_circular_includes_from" annotation. Ideally each should have identical 363 "allow_circular_includes_from" annotation. Ideally each should have identical
373 dependencies so configs inherited from those dependencies are consistent (see 364 dependencies so configs inherited from those dependencies are consistent (see
374 "gn help allow_circular_includes_from"). 365 "gn help allow_circular_includes_from").
375 366
376 If you have a standalone header file or files that need to be shared between 367 If you have a standalone header file or files that need to be shared between
377 a few targets, you can consider making a source_set listing only those 368 a few targets, you can consider making a source_set listing only those
378 headers as public sources. With only header files, the source set will be a 369 headers as public sources. With only header files, the source set will be a
379 no-op from a build perspective, but will give a central place to refer to 370 no-op from a build perspective, but will give a central place to refer to
380 those headers. That source set's files will still need to pass "gn check" in 371 those headers. That source set's files will still need to pass "gn check" in
381 isolation. 372 isolation.
382 373
383 In rare cases it makes sense to list a header in more than one target if it 374 In rare cases it makes sense to list a header in more than one target if it
384 could be considered conceptually a member of both. 375 could be considered conceptually a member of both.
385
386 ``` 376 ```
387 377
388 #### **Examples** 378 #### **Examples**
389 379
390 ``` 380 ```
391 gn check out/Debug 381 gn check out/Debug
392 Check everything. 382 Check everything.
393 383
394 gn check out/Default //foo:bar 384 gn check out/Default //foo:bar
395 Check only the files in the //foo:bar target. 385 Check only the files in the //foo:bar target.
396 386
397 gn check out/Default "//foo/* 387 gn check out/Default "//foo/*
398 Check only the files in targets in the //foo directory tree. 388 Check only the files in targets in the //foo directory tree.
399
400
401 ``` 389 ```
402 ### <a name="clean"></a>**gn clean <out_dir>** 390 ### <a name="clean"></a>**gn clean <out_dir>**
403 391
404 ``` 392 ```
405 Deletes the contents of the output directory except for args.gn and 393 Deletes the contents of the output directory except for args.gn and
406 creates a Ninja build environment sufficient to regenerate the build. 394 creates a Ninja build environment sufficient to regenerate the build.
407
408
409 ``` 395 ```
410 ### <a name="desc"></a>**gn desc <out_dir> <label or pattern> [<what to show>] [ \--blame] "** 396 ### <a name="desc"></a>**gn desc <out_dir> <label or pattern> [<what to show>] [ \--blame] "**
411 #### **[\--format=json]** 397 #### **[\--format=json]**
412 398
413 ``` 399 ```
414 Displays information about a given target or config. The build build 400 Displays information about a given target or config. The build build
415 parameters will be taken for the build in the given <out_dir>. 401 parameters will be taken for the build in the given <out_dir>.
416 402
417 The <label or pattern> can be a target label, a config label, or a label 403 The <label or pattern> can be a target label, a config label, or a label
418 pattern (see "gn help label_pattern"). A label pattern will only match 404 pattern (see "gn help label_pattern"). A label pattern will only match
419 targets. 405 targets.
420
421 ``` 406 ```
422 407
423 #### **Possibilities for <what to show>** 408 #### **Possibilities for <what to show>**
424 409
425 ``` 410 ```
426 (If unspecified an overall summary will be displayed.) 411 (If unspecified an overall summary will be displayed.)
427 412
428 all_dependent_configs 413 all_dependent_configs
429 allow_circular_includes_from 414 allow_circular_includes_from
430 arflags [--blame] 415 arflags [--blame]
(...skipping 20 matching lines...) Expand all
451 visibility 436 visibility
452 437
453 runtime_deps 438 runtime_deps
454 Compute all runtime deps for the given target. This is a computed list 439 Compute all runtime deps for the given target. This is a computed list
455 and does not correspond to any GN variable, unlike most other values 440 and does not correspond to any GN variable, unlike most other values
456 here. 441 here.
457 442
458 The output is a list of file names relative to the build directory. See 443 The output is a list of file names relative to the build directory. See
459 "gn help runtime_deps" for how this is computed. This also works with 444 "gn help runtime_deps" for how this is computed. This also works with
460 "--blame" to see the source of the dependency. 445 "--blame" to see the source of the dependency.
461
462 ``` 446 ```
463 447
464 #### **Shared flags** 448 #### **Shared flags**
465 ``` 449 ```
466 --all-toolchains 450 --all-toolchains
467 Normally only inputs in the default toolchain will be included. 451 Normally only inputs in the default toolchain will be included.
468 This switch will turn on matching all toolchains. 452 This switch will turn on matching all toolchains.
469 453
470 For example, a file is in a target might be compiled twice: 454 For example, a file is in a target might be compiled twice:
471 once in the default toolchain and once in a secondary one. Without 455 once in the default toolchain and once in a secondary one. Without
472 this flag, only the default toolchain one will be matched by 456 this flag, only the default toolchain one will be matched by
473 wildcards. With this flag, both will be matched. 457 wildcards. With this flag, both will be matched.
474 458
475 --format=json 459 --format=json
476 Format the output as JSON instead of text. 460 Format the output as JSON instead of text.
477
478 ``` 461 ```
479 462
480 #### **Target flags** 463 #### **Target flags**
481 464
482 ``` 465 ```
483 --blame 466 --blame
484 Used with any value specified on a config, this will name the config that 467 Used with any value specified on a config, this will name the config that
485 cause that target to get the flag. This doesn't currently work for libs 468 cause that target to get the flag. This doesn't currently work for libs
486 and lib_dirs because those are inherited and are more complicated to 469 and lib_dirs because those are inherited and are more complicated to
487 figure out the blame (patches welcome). 470 figure out the blame (patches welcome).
488
489 ``` 471 ```
490 472
491 #### **Configs** 473 #### **Configs**
492 474
493 ``` 475 ```
494 The "configs" section will list all configs that apply. For targets this will 476 The "configs" section will list all configs that apply. For targets this will
495 include configs specified in the "configs" variable of the target, and also 477 include configs specified in the "configs" variable of the target, and also
496 configs pushed onto this target via public or "all dependent" configs. 478 configs pushed onto this target via public or "all dependent" configs.
497 479
498 Configs can have child configs. Specifying --tree will show the hierarchy. 480 Configs can have child configs. Specifying --tree will show the hierarchy.
499
500 ``` 481 ```
501 482
502 #### **Printing outputs** 483 #### **Printing outputs**
503 484
504 ``` 485 ```
505 The "outputs" section will list all outputs that apply, including the outputs 486 The "outputs" section will list all outputs that apply, including the outputs
506 computed from the tool definition (eg for "executable", "static_library", ... 487 computed from the tool definition (eg for "executable", "static_library", ...
507 targets). 488 targets).
508
509 ``` 489 ```
510 490
511 #### **Printing deps** 491 #### **Printing deps**
512 492
513 ``` 493 ```
514 Deps will include all public, private, and data deps (TODO this could be 494 Deps will include all public, private, and data deps (TODO this could be
515 clarified and enhanced) sorted in order applying. The following may be used: 495 clarified and enhanced) sorted in order applying. The following may be used:
516 496
517 --all 497 --all
518 Collects all recursive dependencies and prints a sorted flat list. Also 498 Collects all recursive dependencies and prints a sorted flat list. Also
(...skipping 30 matching lines...) Expand all
549 unspecified, no filtering will be performed. 529 unspecified, no filtering will be performed.
550 ``` 530 ```
551 531
552 #### **Note** 532 #### **Note**
553 533
554 ``` 534 ```
555 This command will show the full name of directories and source files, but 535 This command will show the full name of directories and source files, but
556 when directories and source paths are written to the build file, they will be 536 when directories and source paths are written to the build file, they will be
557 adjusted to be relative to the build directory. So the values for paths 537 adjusted to be relative to the build directory. So the values for paths
558 displayed by this command won't match (but should mean the same thing). 538 displayed by this command won't match (but should mean the same thing).
559
560 ``` 539 ```
561 540
562 #### **Examples** 541 #### **Examples**
563 542
564 ``` 543 ```
565 gn desc out/Debug //base:base 544 gn desc out/Debug //base:base
566 Summarizes the given target. 545 Summarizes the given target.
567 546
568 gn desc out/Foo :base_unittests deps --tree 547 gn desc out/Foo :base_unittests deps --tree
569 Shows a dependency tree of the "base_unittests" project in 548 Shows a dependency tree of the "base_unittests" project in
570 the current directory. 549 the current directory.
571 550
572 gn desc out/Debug //base defines --blame 551 gn desc out/Debug //base defines --blame
573 Shows defines set for the //base:base target, annotated by where 552 Shows defines set for the //base:base target, annotated by where
574 each one was set from. 553 each one was set from.
575
576
577 ``` 554 ```
578 ### <a name="format"></a>**gn format [\--dump-tree] (\--stdin | <build_file>)** 555 ### <a name="format"></a>**gn format [\--dump-tree] (\--stdin | <build_file>)**
579 556
580 ``` 557 ```
581 Formats .gn file to a standard format. 558 Formats .gn file to a standard format.
582 559
583 The contents of some lists ('sources', 'deps', etc.) will be sorted to a 560 The contents of some lists ('sources', 'deps', etc.) will be sorted to a
584 canonical order. To suppress this, you can add a comment of the form "# 561 canonical order. To suppress this, you can add a comment of the form "#
585 NOSORT" immediately preceeding the assignment. e.g. 562 NOSORT" immediately preceeding the assignment. e.g.
586 563
587 # NOSORT 564 # NOSORT
588 sources = [ 565 sources = [
589 "z.cc", 566 "z.cc",
590 "a.cc", 567 "a.cc",
591 ] 568 ]
592
593 ``` 569 ```
594 570
595 #### **Arguments** 571 #### **Arguments**
596 572
597 ``` 573 ```
598 --dry-run 574 --dry-run
599 Does not change or output anything, but sets the process exit code based 575 Does not change or output anything, but sets the process exit code based
600 on whether output would be different than what's on disk. This is useful 576 on whether output would be different than what's on disk. This is useful
601 for presubmit/lint-type checks. 577 for presubmit/lint-type checks.
602 - Exit code 0: successful format, matches on disk. 578 - Exit code 0: successful format, matches on disk.
603 - Exit code 1: general failure (parse error, etc.) 579 - Exit code 1: general failure (parse error, etc.)
604 - Exit code 2: successful format, but differs from on disk. 580 - Exit code 2: successful format, but differs from on disk.
605 581
606 --dump-tree 582 --dump-tree
607 For debugging, dumps the parse tree to stdout and does not update the 583 For debugging, dumps the parse tree to stdout and does not update the
608 file or print formatted output. 584 file or print formatted output.
609 585
610 --stdin 586 --stdin
611 Read input from stdin and write to stdout rather than update a file 587 Read input from stdin and write to stdout rather than update a file
612 in-place. 588 in-place.
613
614 ``` 589 ```
615 590
616 #### **Examples** 591 #### **Examples**
617 ``` 592 ```
618 gn format //some/BUILD.gn 593 gn format //some/BUILD.gn
619 gn format some\\BUILD.gn 594 gn format some\\BUILD.gn
620 gn format /abspath/some/BUILD.gn 595 gn format /abspath/some/BUILD.gn
621 gn format --stdin 596 gn format --stdin
622
623
624 ``` 597 ```
625 ### <a name="gen:"></a>**gn gen**: Generate ninja files. 598 ### <a name="gen:"></a>**gn gen**: Generate ninja files.
626 599
627 ``` 600 ```
628 gn gen [<ide options>] <out_dir> 601 gn gen [<ide options>] <out_dir>
629 602
630 Generates ninja files from the current tree and puts them in the given output 603 Generates ninja files from the current tree and puts them in the given output
631 directory. 604 directory.
632 605
633 The output directory can be a source-repo-absolute path name such as: 606 The output directory can be a source-repo-absolute path name such as:
634 //out/foo 607 //out/foo
635 Or it can be a directory relative to the current directory such as: 608 Or it can be a directory relative to the current directory such as:
636 out/foo 609 out/foo
637 610
638 See "gn help switches" for the common command-line switches. 611 See "gn help switches" for the common command-line switches.
639
640 ``` 612 ```
641 613
642 #### **IDE options** 614 #### **IDE options**
643 615
644 ``` 616 ```
645 GN optionally generates files for IDE. Possibilities for <ide options> 617 GN optionally generates files for IDE. Possibilities for <ide options>
646 618
647 --ide=<ide_name> 619 --ide=<ide_name>
648 Generate files for an IDE. Currently supported values: 620 Generate files for an IDE. Currently supported values:
649 "eclipse" - Eclipse CDT settings file. 621 "eclipse" - Eclipse CDT settings file.
650 "vs" - Visual Studio project/solution files. 622 "vs" - Visual Studio project/solution files.
651 (default Visual Studio version: 2015) 623 (default Visual Studio version: 2015)
652 "vs2013" - Visual Studio 2013 project/solution files. 624 "vs2013" - Visual Studio 2013 project/solution files.
653 "vs2015" - Visual Studio 2015 project/solution files. 625 "vs2015" - Visual Studio 2015 project/solution files.
654 "vs2017" - Visual Studio 2017 project/solution files. 626 "vs2017" - Visual Studio 2017 project/solution files.
655 "xcode" - Xcode workspace/solution files. 627 "xcode" - Xcode workspace/solution files.
656 "qtcreator" - QtCreator project files. 628 "qtcreator" - QtCreator project files.
657 "json" - JSON file containing target information 629 "json" - JSON file containing target information
658 630
659 --filters=<path_prefixes> 631 --filters=<path_prefixes>
660 Semicolon-separated list of label patterns used to limit the set of 632 Semicolon-separated list of label patterns used to limit the set of
661 generated projects (see "gn help label_pattern"). Only matching targets 633 generated projects (see "gn help label_pattern"). Only matching targets
662 and their dependencies will be included in the solution. Only used for 634 and their dependencies will be included in the solution. Only used for
663 Visual Studio, Xcode and JSON. 635 Visual Studio, Xcode and JSON.
664
665 ``` 636 ```
666 637
667 #### **Visual Studio Flags** 638 #### **Visual Studio Flags**
668 639
669 ``` 640 ```
670 --sln=<file_name> 641 --sln=<file_name>
671 Override default sln file name ("all"). Solution file is written to the 642 Override default sln file name ("all"). Solution file is written to the
672 root build directory. 643 root build directory.
673 644
674 --no-deps 645 --no-deps
675 Don't include targets dependencies to the solution. Changes the way how 646 Don't include targets dependencies to the solution. Changes the way how
676 --filters option works. Only directly matching targets are included. 647 --filters option works. Only directly matching targets are included.
677
678 ``` 648 ```
679 649
680 #### **Xcode Flags** 650 #### **Xcode Flags**
681 651
682 ``` 652 ```
683 --workspace=<file_name> 653 --workspace=<file_name>
684 Override defaut workspace file name ("all"). The workspace file is 654 Override defaut workspace file name ("all"). The workspace file is
685 written to the root build directory. 655 written to the root build directory.
686 656
687 --ninja-extra-args=<string> 657 --ninja-extra-args=<string>
688 This string is passed without any quoting to the ninja invocation 658 This string is passed without any quoting to the ninja invocation
689 command-line. Can be used to configure ninja flags, like "-j" if using 659 command-line. Can be used to configure ninja flags, like "-j" if using
690 goma for example. 660 goma for example.
691 661
692 --root-target=<target_name> 662 --root-target=<target_name>
693 Name of the target corresponding to "All" target in Xcode. If unset, 663 Name of the target corresponding to "All" target in Xcode. If unset,
694 "All" invokes ninja without any target and builds everything. 664 "All" invokes ninja without any target and builds everything.
695
696 ``` 665 ```
697 666
698 #### **QtCreator Flags** 667 #### **QtCreator Flags**
699 668
700 ``` 669 ```
701 --root-target=<target_name> 670 --root-target=<target_name>
702 Name of the root target for which the QtCreator project will be generated 671 Name of the root target for which the QtCreator project will be generated
703 to contain files of it and its dependencies. If unset, the whole build 672 to contain files of it and its dependencies. If unset, the whole build
704 graph will be emitted. 673 graph will be emitted.
705
706
707 ``` 674 ```
708 675
709 #### **Eclipse IDE Support** 676 #### **Eclipse IDE Support**
710 677
711 ``` 678 ```
712 GN DOES NOT generate Eclipse CDT projects. Instead, it generates a settings 679 GN DOES NOT generate Eclipse CDT projects. Instead, it generates a settings
713 file which can be imported into an Eclipse CDT project. The XML file contains 680 file which can be imported into an Eclipse CDT project. The XML file contains
714 a list of include paths and defines. Because GN does not generate a full 681 a list of include paths and defines. Because GN does not generate a full
715 .cproject definition, it is not possible to properly define includes/defines 682 .cproject definition, it is not possible to properly define includes/defines
716 for each file individually. Instead, one set of includes/defines is generated 683 for each file individually. Instead, one set of includes/defines is generated
717 for the entire project. This works fairly well but may still result in a few 684 for the entire project. This works fairly well but may still result in a few
718 indexer issues here and there. 685 indexer issues here and there.
719
720 ``` 686 ```
721 687
722 #### **Generic JSON Output** 688 #### **Generic JSON Output**
723 689
724 ``` 690 ```
725 Dumps target information to JSON file and optionally invokes python script on 691 Dumps target information to JSON file and optionally invokes python script on
726 generated file. See comments at the beginning of json_project_writer.cc and 692 generated file. See comments at the beginning of json_project_writer.cc and
727 desc_builder.cc for overview of JSON file format. 693 desc_builder.cc for overview of JSON file format.
728 694
729 --json-file-name=<json_file_name> 695 --json-file-name=<json_file_name>
730 Overrides default file name (project.json) of generated JSON file. 696 Overrides default file name (project.json) of generated JSON file.
731 697
732 --json-ide-script=<path_to_python_script> 698 --json-ide-script=<path_to_python_script>
733 Executes python script after the JSON file is generated. Path can be 699 Executes python script after the JSON file is generated. Path can be
734 project absolute (//), system absolute (/) or relative, in which case the 700 project absolute (//), system absolute (/) or relative, in which case the
735 output directory will be base. Path to generated JSON file will be first 701 output directory will be base. Path to generated JSON file will be first
736 argument when invoking script. 702 argument when invoking script.
737 703
738 --json-ide-script-args=<argument> 704 --json-ide-script-args=<argument>
739 Optional second argument that will passed to executed script. 705 Optional second argument that will passed to executed script.
740
741
742 ``` 706 ```
743 ### <a name="help"></a>**gn help <anything>** 707 ### <a name="help"></a>**gn help <anything>**
744 708
745 ``` 709 ```
746 Yo dawg, I heard you like help on your help so I put help on the help in the 710 Yo dawg, I heard you like help on your help so I put help on the help in the
747 help. 711 help.
748 712
749 You can also use "all" as the parameter to get all help at once. 713 You can also use "all" as the parameter to get all help at once.
750
751 ``` 714 ```
752 715
753 #### **Switches** 716 #### **Switches**
754 717
755 ``` 718 ```
756 --markdown 719 --markdown
757 Format output in markdown syntax. 720 Format output in markdown syntax.
758
759 ``` 721 ```
760 722
761 #### **Example** 723 #### **Example**
762 724
763 ``` 725 ```
764 gn help --markdown all 726 gn help --markdown all
765 Dump all help to stdout in markdown format. 727 Dump all help to stdout in markdown format.
766
767
768 ``` 728 ```
769 ### <a name="ls"></a>**gn ls <out_dir> [<label_pattern>] [\--all-toolchains] [\- -as=...]** 729 ### <a name="ls"></a>**gn ls <out_dir> [<label_pattern>] [\--all-toolchains] [\- -as=...]**
770 ``` 730 ```
771 [--type=...] [--testonly=...] 731 [--type=...] [--testonly=...]
772 732
773 Lists all targets matching the given pattern for the given build directory. 733 Lists all targets matching the given pattern for the given build directory.
774 By default, only targets in the default toolchain will be matched unless a 734 By default, only targets in the default toolchain will be matched unless a
775 toolchain is explicitly supplied. 735 toolchain is explicitly supplied.
776 736
777 If the label pattern is unspecified, list all targets. The label pattern is 737 If the label pattern is unspecified, list all targets. The label pattern is
778 not a general regular expression (see "gn help label_pattern"). If you need 738 not a general regular expression (see "gn help label_pattern"). If you need
779 more complex expressions, pipe the result through grep. 739 more complex expressions, pipe the result through grep.
780
781 ``` 740 ```
782 741
783 #### **Options** 742 #### **Options**
784 743
785 ``` 744 ```
786 --as=(buildfile|label|output) 745 --as=(buildfile|label|output)
787 How to print targets. 746 How to print targets.
788 747
789 buildfile 748 buildfile
790 Prints the build files where the given target was declared as 749 Prints the build files where the given target was declared as
(...skipping 15 matching lines...) Expand all
806 765
807 --testonly=(true|false) 766 --testonly=(true|false)
808 Restrict outputs to targets with the testonly flag set 767 Restrict outputs to targets with the testonly flag set
809 accordingly. When unspecified, the target's testonly flags are 768 accordingly. When unspecified, the target's testonly flags are
810 ignored. 769 ignored.
811 770
812 --type=(action|copy|executable|group|loadable_module|shared_library| 771 --type=(action|copy|executable|group|loadable_module|shared_library|
813 source_set|static_library) 772 source_set|static_library)
814 Restrict outputs to targets matching the given type. If 773 Restrict outputs to targets matching the given type. If
815 unspecified, no filtering will be performed. 774 unspecified, no filtering will be performed.
816
817 ``` 775 ```
818 776
819 #### **Examples** 777 #### **Examples**
820 778
821 ``` 779 ```
822 gn ls out/Debug 780 gn ls out/Debug
823 Lists all targets in the default toolchain. 781 Lists all targets in the default toolchain.
824 782
825 gn ls out/Debug "//base/*" 783 gn ls out/Debug "//base/*"
826 Lists all targets in the directory base and all subdirectories. 784 Lists all targets in the directory base and all subdirectories.
827 785
828 gn ls out/Debug "//base:*" 786 gn ls out/Debug "//base:*"
829 Lists all targets defined in //base/BUILD.gn. 787 Lists all targets defined in //base/BUILD.gn.
830 788
831 gn ls out/Debug //base --as=output 789 gn ls out/Debug //base --as=output
832 Lists the build output file for //base:base 790 Lists the build output file for //base:base
833 791
834 gn ls out/Debug --type=executable 792 gn ls out/Debug --type=executable
835 Lists all executables produced by the build. 793 Lists all executables produced by the build.
836 794
837 gn ls out/Debug "//base/*" --as=output | xargs ninja -C out/Debug 795 gn ls out/Debug "//base/*" --as=output | xargs ninja -C out/Debug
838 Builds all targets in //base and all subdirectories. 796 Builds all targets in //base and all subdirectories.
839 797
840 gn ls out/Debug //base --all-toolchains 798 gn ls out/Debug //base --all-toolchains
841 Lists all variants of the target //base:base (it may be referenced 799 Lists all variants of the target //base:base (it may be referenced
842 in multiple toolchains). 800 in multiple toolchains).
843
844
845 ``` 801 ```
846 ### <a name="path"></a>**gn path <out_dir> <target_one> <target_two>** 802 ### <a name="path"></a>**gn path <out_dir> <target_one> <target_two>**
847 803
848 ``` 804 ```
849 Finds paths of dependencies between two targets. Each unique path will be 805 Finds paths of dependencies between two targets. Each unique path will be
850 printed in one group, and groups will be separate by newlines. The two 806 printed in one group, and groups will be separate by newlines. The two
851 targets can appear in either order (paths will be found going in either 807 targets can appear in either order (paths will be found going in either
852 direction). 808 direction).
853 809
854 By default, a single path will be printed. If there is a path with only 810 By default, a single path will be printed. If there is a path with only
855 public dependencies, the shortest public path will be printed. Otherwise, the 811 public dependencies, the shortest public path will be printed. Otherwise, the
856 shortest path using either public or private dependencies will be printed. If 812 shortest path using either public or private dependencies will be printed. If
857 --with-data is specified, data deps will also be considered. If there are 813 --with-data is specified, data deps will also be considered. If there are
858 multiple shortest paths, an arbitrary one will be selected. 814 multiple shortest paths, an arbitrary one will be selected.
859
860 ``` 815 ```
861 816
862 #### **Interesting paths** 817 #### **Interesting paths**
863 818
864 ``` 819 ```
865 In a large project, there can be 100's of millions of unique paths between a 820 In a large project, there can be 100's of millions of unique paths between a
866 very high level and a common low-level target. To make the output more useful 821 very high level and a common low-level target. To make the output more useful
867 (and terminate in a reasonable time), GN will not revisit sub-paths 822 (and terminate in a reasonable time), GN will not revisit sub-paths
868 previously known to lead to the target. 823 previously known to lead to the target.
869
870 ``` 824 ```
871 825
872 #### **Options** 826 #### **Options**
873 827
874 ``` 828 ```
875 --all 829 --all
876 Prints all "interesting" paths found rather than just the first one. 830 Prints all "interesting" paths found rather than just the first one.
877 Public paths will be printed first in order of increasing length, followed 831 Public paths will be printed first in order of increasing length, followed
878 by non-public paths in order of increasing length. 832 by non-public paths in order of increasing length.
879 833
880 --public 834 --public
881 Considers only public paths. Can't be used with --with-data. 835 Considers only public paths. Can't be used with --with-data.
882 836
883 --with-data 837 --with-data
884 Additionally follows data deps. Without this flag, only public and private 838 Additionally follows data deps. Without this flag, only public and private
885 linked deps will be followed. Can't be used with --public. 839 linked deps will be followed. Can't be used with --public.
886
887 ``` 840 ```
888 841
889 #### **Example** 842 #### **Example**
890 843
891 ``` 844 ```
892 gn path out/Default //base //tools/gn 845 gn path out/Default //base //tools/gn
893
894
895 ``` 846 ```
896 ### <a name="refs"></a>**gn refs <out_dir> (<label_pattern>|<label>|<file>|@<res ponse_file>)*** 847 ### <a name="refs"></a>**gn refs <out_dir> (<label_pattern>|<label>|<file>|@<res ponse_file>)***
897 ``` 848 ```
898 [--all] [--all-toolchains] [--as=...] [--testonly=...] [--type=...] 849 [--all] [--all-toolchains] [--as=...] [--testonly=...] [--type=...]
899 850
900 Finds reverse dependencies (which targets reference something). The input is 851 Finds reverse dependencies (which targets reference something). The input is
901 a list containing: 852 a list containing:
902 853
903 - Target label: The result will be which targets depend on it. 854 - Target label: The result will be which targets depend on it.
904 855
905 - Config label: The result will be which targets list the given config in 856 - Config label: The result will be which targets list the given config in
906 its "configs" or "public_configs" list. 857 its "configs" or "public_configs" list.
907 858
908 - Label pattern: The result will be which targets depend on any target 859 - Label pattern: The result will be which targets depend on any target
909 matching the given pattern. Patterns will not match configs. These are not 860 matching the given pattern. Patterns will not match configs. These are not
910 general regular expressions, see "gn help label_pattern" for details. 861 general regular expressions, see "gn help label_pattern" for details.
911 862
912 - File name: The result will be which targets list the given file in its 863 - File name: The result will be which targets list the given file in its
913 "inputs", "sources", "public", "data", or "outputs". Any input that does 864 "inputs", "sources", "public", "data", or "outputs". Any input that does
914 not contain wildcards and does not match a target or a config will be 865 not contain wildcards and does not match a target or a config will be
915 treated as a file. 866 treated as a file.
916 867
917 - Response file: If the input starts with an "@", it will be interpreted as 868 - Response file: If the input starts with an "@", it will be interpreted as
918 a path to a file containing a list of labels or file names, one per line. 869 a path to a file containing a list of labels or file names, one per line.
919 This allows us to handle long lists of inputs without worrying about 870 This allows us to handle long lists of inputs without worrying about
920 command line limits. 871 command line limits.
921
922 ``` 872 ```
923 873
924 #### **Options** 874 #### **Options**
925 875
926 ``` 876 ```
927 --all 877 --all
928 When used without --tree, will recurse and display all unique 878 When used without --tree, will recurse and display all unique
929 dependencies of the given targets. For example, if the input is a target, 879 dependencies of the given targets. For example, if the input is a target,
930 this will output all targets that depend directly or indirectly on the 880 this will output all targets that depend directly or indirectly on the
931 input. If the input is a file, this will output all targets that depend 881 input. If the input is a file, this will output all targets that depend
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 --tree 915 --tree
966 Outputs a reverse dependency tree from the given target. Duplicates will 916 Outputs a reverse dependency tree from the given target. Duplicates will
967 be elided. Combine with --all to see a full dependency tree. 917 be elided. Combine with --all to see a full dependency tree.
968 918
969 Tree output can not be used with the filtering or output flags: --as, 919 Tree output can not be used with the filtering or output flags: --as,
970 --type, --testonly. 920 --type, --testonly.
971 --type=(action|copy|executable|group|loadable_module|shared_library| 921 --type=(action|copy|executable|group|loadable_module|shared_library|
972 source_set|static_library) 922 source_set|static_library)
973 Restrict outputs to targets matching the given type. If 923 Restrict outputs to targets matching the given type. If
974 unspecified, no filtering will be performed. 924 unspecified, no filtering will be performed.
975
976
977 ``` 925 ```
978 926
979 #### **Examples (target input)** 927 #### **Examples (target input)**
980 928
981 ``` 929 ```
982 gn refs out/Debug //tools/gn:gn 930 gn refs out/Debug //tools/gn:gn
983 Find all targets depending on the given exact target name. 931 Find all targets depending on the given exact target name.
984 932
985 gn refs out/Debug //base:i18n --as=buildfiles | xargs gvim 933 gn refs out/Debug //base:i18n --as=buildfiles | xargs gvim
986 Edit all .gn files containing references to //base:i18n 934 Edit all .gn files containing references to //base:i18n
987 935
988 gn refs out/Debug //base --all 936 gn refs out/Debug //base --all
989 List all targets depending directly or indirectly on //base:base. 937 List all targets depending directly or indirectly on //base:base.
990 938
991 gn refs out/Debug "//base/*" 939 gn refs out/Debug "//base/*"
992 List all targets depending directly on any target in //base or 940 List all targets depending directly on any target in //base or
993 its subdirectories. 941 its subdirectories.
994 942
995 gn refs out/Debug "//base:*" 943 gn refs out/Debug "//base:*"
996 List all targets depending directly on any target in 944 List all targets depending directly on any target in
997 //base/BUILD.gn. 945 //base/BUILD.gn.
998 946
999 gn refs out/Debug //base --tree 947 gn refs out/Debug //base --tree
1000 Print a reverse dependency tree of //base:base 948 Print a reverse dependency tree of //base:base
1001
1002 ``` 949 ```
1003 950
1004 #### **Examples (file input)** 951 #### **Examples (file input)**
1005 952
1006 ``` 953 ```
1007 gn refs out/Debug //base/macros.h 954 gn refs out/Debug //base/macros.h
1008 Print target(s) listing //base/macros.h as a source. 955 Print target(s) listing //base/macros.h as a source.
1009 956
1010 gn refs out/Debug //base/macros.h --tree 957 gn refs out/Debug //base/macros.h --tree
1011 Display a reverse dependency tree to get to the given file. This 958 Display a reverse dependency tree to get to the given file. This
1012 will show how dependencies will reference that file. 959 will show how dependencies will reference that file.
1013 960
1014 gn refs out/Debug //base/macros.h //base/at_exit.h --all 961 gn refs out/Debug //base/macros.h //base/at_exit.h --all
1015 Display all unique targets with some dependency path to a target 962 Display all unique targets with some dependency path to a target
1016 containing either of the given files as a source. 963 containing either of the given files as a source.
1017 964
1018 gn refs out/Debug //base/macros.h --testonly=true --type=executable 965 gn refs out/Debug //base/macros.h --testonly=true --type=executable
1019 --all --as=output 966 --all --as=output
1020 Display the executable file names of all test executables 967 Display the executable file names of all test executables
1021 potentially affected by a change to the given file. 968 potentially affected by a change to the given file.
1022
1023
1024 ``` 969 ```
1025 ## <a name="targets"></a>Target declarations 970 ## <a name="targets"></a>Target declarations
1026 971
1027 ### <a name="action"></a>**action**: Declare a target that runs a script a singl e time. 972 ### <a name="action"></a>**action**: Declare a target that runs a script a singl e time.
1028 973
1029 ``` 974 ```
1030 This target type allows you to run a script a single time to produce one or 975 This target type allows you to run a script a single time to produce one or
1031 more output files. If you want to run a script once for each of a set of 976 more output files. If you want to run a script once for each of a set of
1032 input files, see "gn help action_foreach". 977 input files, see "gn help action_foreach".
1033
1034 ``` 978 ```
1035 979
1036 #### **Inputs** 980 #### **Inputs**
1037 981
1038 ``` 982 ```
1039 In an action the "sources" and "inputs" are treated the same: they're both 983 In an action the "sources" and "inputs" are treated the same: they're both
1040 input dependencies on script execution with no special handling. If you want 984 input dependencies on script execution with no special handling. If you want
1041 to pass the sources to your script, you must do so explicitly by including 985 to pass the sources to your script, you must do so explicitly by including
1042 them in the "args". Note also that this means there is no special handling of 986 them in the "args". Note also that this means there is no special handling of
1043 paths since GN doesn't know which of the args are paths and not. You will 987 paths since GN doesn't know which of the args are paths and not. You will
1044 want to use rebase_path() to convert paths to be relative to the 988 want to use rebase_path() to convert paths to be relative to the
1045 root_build_dir. 989 root_build_dir.
1046 990
1047 You can dynamically write input dependencies (for incremental rebuilds if an 991 You can dynamically write input dependencies (for incremental rebuilds if an
1048 input file changes) by writing a depfile when the script is run (see "gn help 992 input file changes) by writing a depfile when the script is run (see "gn help
1049 depfile"). This is more flexible than "inputs". 993 depfile"). This is more flexible than "inputs".
1050 994
1051 If the command line length is very long, you can use response files to pass 995 If the command line length is very long, you can use response files to pass
1052 args to your script. See "gn help response_file_contents". 996 args to your script. See "gn help response_file_contents".
1053 997
1054 It is recommended you put inputs to your script in the "sources" variable, 998 It is recommended you put inputs to your script in the "sources" variable,
1055 and stuff like other Python files required to run your script in the "inputs" 999 and stuff like other Python files required to run your script in the "inputs"
1056 variable. 1000 variable.
1057 The "deps" and "public_deps" for an action will always be 1001 The "deps" and "public_deps" for an action will always be
1058 completed before any part of the action is run so it can depend on 1002 completed before any part of the action is run so it can depend on
1059 the output of previous steps. The "data_deps" will be built if the 1003 the output of previous steps. The "data_deps" will be built if the
1060 action is built, but may not have completed before all steps of the 1004 action is built, but may not have completed before all steps of the
1061 action are started. This can give additional parallelism in the build 1005 action are started. This can give additional parallelism in the build
1062 for runtime-only dependencies. 1006 for runtime-only dependencies.
1063
1064 ``` 1007 ```
1065 1008
1066 #### **Outputs** 1009 #### **Outputs**
1067 1010
1068 ``` 1011 ```
1069 You should specify files created by your script by specifying them in the 1012 You should specify files created by your script by specifying them in the
1070 "outputs". 1013 "outputs".
1071 The script will be executed with the given arguments with the current 1014 The script will be executed with the given arguments with the current
1072 directory being that of the root build directory. If you pass files 1015 directory being that of the root build directory. If you pass files
1073 to your script, see "gn help rebase_path" for how to convert 1016 to your script, see "gn help rebase_path" for how to convert
1074 file names to be relative to the build directory (file names in the 1017 file names to be relative to the build directory (file names in the
1075 sources, outputs, and inputs will be all treated as relative to the 1018 sources, outputs, and inputs will be all treated as relative to the
1076 current build file and converted as needed automatically). 1019 current build file and converted as needed automatically).
1077
1078 ``` 1020 ```
1079 1021
1080 #### **File name handling** 1022 #### **File name handling**
1081 ``` 1023 ```
1082 All output files must be inside the output directory of the build. 1024 All output files must be inside the output directory of the build.
1083 You would generally use |$target_out_dir| or |$target_gen_dir| to 1025 You would generally use |$target_out_dir| or |$target_gen_dir| to
1084 reference the output or generated intermediate file directories, 1026 reference the output or generated intermediate file directories,
1085 respectively. 1027 respectively.
1086
1087 ``` 1028 ```
1088 1029
1089 #### **Variables** 1030 #### **Variables**
1090 1031
1091 ``` 1032 ```
1092 args, console, data, data_deps, depfile, deps, inputs, outputs*, 1033 args, console, data, data_deps, depfile, deps, inputs, outputs*,
1093 response_file_contents, script*, sources 1034 response_file_contents, script*, sources
1094 * = required 1035 * = required
1095
1096 ``` 1036 ```
1097 1037
1098 #### **Example** 1038 #### **Example**
1099 1039
1100 ``` 1040 ```
1101 action("run_this_guy_once") { 1041 action("run_this_guy_once") {
1102 script = "doprocessing.py" 1042 script = "doprocessing.py"
1103 sources = [ "my_configuration.txt" ] 1043 sources = [ "my_configuration.txt" ]
1104 outputs = [ "$target_gen_dir/insightful_output.txt" ] 1044 outputs = [ "$target_gen_dir/insightful_output.txt" ]
1105 1045
1106 # Our script imports this Python file so we want to rebuild if it changes. 1046 # Our script imports this Python file so we want to rebuild if it changes.
1107 inputs = [ "helper_library.py" ] 1047 inputs = [ "helper_library.py" ]
1108 1048
1109 # Note that we have to manually pass the sources to our script if the 1049 # Note that we have to manually pass the sources to our script if the
1110 # script needs them as inputs. 1050 # script needs them as inputs.
1111 args = [ "--out", rebase_path(target_gen_dir, root_build_dir) ] + 1051 args = [ "--out", rebase_path(target_gen_dir, root_build_dir) ] +
1112 rebase_path(sources, root_build_dir) 1052 rebase_path(sources, root_build_dir)
1113 } 1053 }
1114
1115
1116 ``` 1054 ```
1117 ### <a name="action_foreach"></a>**action_foreach**: Declare a target that runs a script over a set of files. 1055 ### <a name="action_foreach"></a>**action_foreach**: Declare a target that runs a script over a set of files.
1118 1056
1119 ``` 1057 ```
1120 This target type allows you to run a script once-per-file over a set of 1058 This target type allows you to run a script once-per-file over a set of
1121 sources. If you want to run a script once that takes many files as input, see 1059 sources. If you want to run a script once that takes many files as input, see
1122 "gn help action". 1060 "gn help action".
1123
1124 ``` 1061 ```
1125 1062
1126 #### **Inputs** 1063 #### **Inputs**
1127 1064
1128 ``` 1065 ```
1129 The script will be run once per file in the "sources" variable. The "outputs" 1066 The script will be run once per file in the "sources" variable. The "outputs"
1130 variable should specify one or more files with a source expansion pattern in 1067 variable should specify one or more files with a source expansion pattern in
1131 it (see "gn help source_expansion"). The output file(s) for each script 1068 it (see "gn help source_expansion"). The output file(s) for each script
1132 invocation should be unique. Normally you use "{{source_name_part}}" in each 1069 invocation should be unique. Normally you use "{{source_name_part}}" in each
1133 output file. 1070 output file.
1134 1071
1135 If your script takes additional data as input, such as a shared configuration 1072 If your script takes additional data as input, such as a shared configuration
1136 file or a Python module it uses, those files should be listed in the "inputs" 1073 file or a Python module it uses, those files should be listed in the "inputs"
1137 variable. These files are treated as dependencies of each script invocation. 1074 variable. These files are treated as dependencies of each script invocation.
1138 1075
1139 If the command line length is very long, you can use response files to pass 1076 If the command line length is very long, you can use response files to pass
1140 args to your script. See "gn help response_file_contents". 1077 args to your script. See "gn help response_file_contents".
1141 1078
1142 You can dynamically write input dependencies (for incremental rebuilds if an 1079 You can dynamically write input dependencies (for incremental rebuilds if an
1143 input file changes) by writing a depfile when the script is run (see "gn help 1080 input file changes) by writing a depfile when the script is run (see "gn help
1144 depfile"). This is more flexible than "inputs". 1081 depfile"). This is more flexible than "inputs".
1145 The "deps" and "public_deps" for an action will always be 1082 The "deps" and "public_deps" for an action will always be
1146 completed before any part of the action is run so it can depend on 1083 completed before any part of the action is run so it can depend on
1147 the output of previous steps. The "data_deps" will be built if the 1084 the output of previous steps. The "data_deps" will be built if the
1148 action is built, but may not have completed before all steps of the 1085 action is built, but may not have completed before all steps of the
1149 action are started. This can give additional parallelism in the build 1086 action are started. This can give additional parallelism in the build
1150 for runtime-only dependencies. 1087 for runtime-only dependencies.
1151
1152 ``` 1088 ```
1153 1089
1154 #### **Outputs** 1090 #### **Outputs**
1155 ``` 1091 ```
1156 The script will be executed with the given arguments with the current 1092 The script will be executed with the given arguments with the current
1157 directory being that of the root build directory. If you pass files 1093 directory being that of the root build directory. If you pass files
1158 to your script, see "gn help rebase_path" for how to convert 1094 to your script, see "gn help rebase_path" for how to convert
1159 file names to be relative to the build directory (file names in the 1095 file names to be relative to the build directory (file names in the
1160 sources, outputs, and inputs will be all treated as relative to the 1096 sources, outputs, and inputs will be all treated as relative to the
1161 current build file and converted as needed automatically). 1097 current build file and converted as needed automatically).
1162
1163 ``` 1098 ```
1164 1099
1165 #### **File name handling** 1100 #### **File name handling**
1166 ``` 1101 ```
1167 All output files must be inside the output directory of the build. 1102 All output files must be inside the output directory of the build.
1168 You would generally use |$target_out_dir| or |$target_gen_dir| to 1103 You would generally use |$target_out_dir| or |$target_gen_dir| to
1169 reference the output or generated intermediate file directories, 1104 reference the output or generated intermediate file directories,
1170 respectively. 1105 respectively.
1171
1172 ``` 1106 ```
1173 1107
1174 #### **Variables** 1108 #### **Variables**
1175 1109
1176 ``` 1110 ```
1177 args, console, data, data_deps, depfile, deps, inputs, outputs*, 1111 args, console, data, data_deps, depfile, deps, inputs, outputs*,
1178 response_file_contents, script*, sources* 1112 response_file_contents, script*, sources*
1179 * = required 1113 * = required
1180
1181 ``` 1114 ```
1182 1115
1183 #### **Example** 1116 #### **Example**
1184 1117
1185 ``` 1118 ```
1186 # Runs the script over each IDL file. The IDL script will generate both a .cc 1119 # Runs the script over each IDL file. The IDL script will generate both a .cc
1187 # and a .h file for each input. 1120 # and a .h file for each input.
1188 action_foreach("my_idl") { 1121 action_foreach("my_idl") {
1189 script = "idl_processor.py" 1122 script = "idl_processor.py"
1190 sources = [ "foo.idl", "bar.idl" ] 1123 sources = [ "foo.idl", "bar.idl" ]
1191 1124
1192 # Our script reads this file each time, so we need to list is as a 1125 # Our script reads this file each time, so we need to list is as a
1193 # dependency so we can rebuild if it changes. 1126 # dependency so we can rebuild if it changes.
1194 inputs = [ "my_configuration.txt" ] 1127 inputs = [ "my_configuration.txt" ]
1195 1128
1196 # Transformation from source file name to output file names. 1129 # Transformation from source file name to output file names.
1197 outputs = [ "$target_gen_dir/{{source_name_part}}.h", 1130 outputs = [ "$target_gen_dir/{{source_name_part}}.h",
1198 "$target_gen_dir/{{source_name_part}}.cc" ] 1131 "$target_gen_dir/{{source_name_part}}.cc" ]
1199 1132
1200 # Note that since "args" is opaque to GN, if you specify paths here, you 1133 # Note that since "args" is opaque to GN, if you specify paths here, you
1201 # will need to convert it to be relative to the build directory using 1134 # will need to convert it to be relative to the build directory using
1202 # rebase_path(). 1135 # rebase_path().
1203 args = [ 1136 args = [
1204 "{{source}}", 1137 "{{source}}",
1205 "-o", 1138 "-o",
1206 rebase_path(relative_target_gen_dir, root_build_dir) + 1139 rebase_path(relative_target_gen_dir, root_build_dir) +
1207 "/{{source_name_part}}.h" ] 1140 "/{{source_name_part}}.h" ]
1208 } 1141 }
1209
1210
1211 ``` 1142 ```
1212 ### <a name="bundle_data"></a>**bundle_data**: [iOS/OS X] Declare a target witho ut output. 1143 ### <a name="bundle_data"></a>**bundle_data**: [iOS/OS X] Declare a target witho ut output.
1213 1144
1214 ``` 1145 ```
1215 This target type allows to declare data that is required at runtime. It is 1146 This target type allows to declare data that is required at runtime. It is
1216 used to inform "create_bundle" targets of the files to copy into generated 1147 used to inform "create_bundle" targets of the files to copy into generated
1217 bundle, see "gn help create_bundle" for help. 1148 bundle, see "gn help create_bundle" for help.
1218 1149
1219 The target must define a list of files as "sources" and a single "outputs". 1150 The target must define a list of files as "sources" and a single "outputs".
1220 If there are multiple files, source expansions must be used to express the 1151 If there are multiple files, source expansions must be used to express the
1221 output. The output must reference a file inside of {{bundle_root_dir}}. 1152 output. The output must reference a file inside of {{bundle_root_dir}}.
1222 1153
1223 This target can be used on all platforms though it is designed only to 1154 This target can be used on all platforms though it is designed only to
1224 generate iOS/OS X bundle. In cross-platform projects, it is advised to put it 1155 generate iOS/OS X bundle. In cross-platform projects, it is advised to put it
1225 behind iOS/Mac conditionals. 1156 behind iOS/Mac conditionals.
1226 1157
1227 See "gn help create_bundle" for more information. 1158 See "gn help create_bundle" for more information.
1228
1229 ``` 1159 ```
1230 1160
1231 #### **Variables** 1161 #### **Variables**
1232 1162
1233 ``` 1163 ```
1234 sources*, outputs*, deps, data_deps, public_deps, visibility 1164 sources*, outputs*, deps, data_deps, public_deps, visibility
1235 * = required 1165 * = required
1236
1237 ``` 1166 ```
1238 1167
1239 #### **Examples** 1168 #### **Examples**
1240 1169
1241 ``` 1170 ```
1242 bundle_data("icudata") { 1171 bundle_data("icudata") {
1243 sources = [ "sources/data/in/icudtl.dat" ] 1172 sources = [ "sources/data/in/icudtl.dat" ]
1244 outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] 1173 outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
1245 } 1174 }
1246 1175
(...skipping 10 matching lines...) Expand all
1257 "src/MaterialTypography.bundle/Roboto-Bold.ttf", 1186 "src/MaterialTypography.bundle/Roboto-Bold.ttf",
1258 "src/MaterialTypography.bundle/Roboto-Italic.ttf", 1187 "src/MaterialTypography.bundle/Roboto-Italic.ttf",
1259 "src/MaterialTypography.bundle/Roboto-Regular.ttf", 1188 "src/MaterialTypography.bundle/Roboto-Regular.ttf",
1260 "src/MaterialTypography.bundle/Roboto-Thin.ttf", 1189 "src/MaterialTypography.bundle/Roboto-Thin.ttf",
1261 ] 1190 ]
1262 outputs = [ 1191 outputs = [
1263 "{{bundle_resources_dir}}/MaterialTypography.bundle/" 1192 "{{bundle_resources_dir}}/MaterialTypography.bundle/"
1264 "{{source_file_part}}" 1193 "{{source_file_part}}"
1265 ] 1194 ]
1266 } 1195 }
1267
1268
1269 ``` 1196 ```
1270 ### <a name="copy"></a>**copy**: Declare a target that copies files. 1197 ### <a name="copy"></a>**copy**: Declare a target that copies files.
1271 1198
1272 #### **File name handling** 1199 #### **File name handling**
1273 1200
1274 ``` 1201 ```
1275 All output files must be inside the output directory of the build. You would 1202 All output files must be inside the output directory of the build. You would
1276 generally use |$target_out_dir| or |$target_gen_dir| to reference the output 1203 generally use |$target_out_dir| or |$target_gen_dir| to reference the output
1277 or generated intermediate file directories, respectively. 1204 or generated intermediate file directories, respectively.
1278 1205
1279 Both "sources" and "outputs" must be specified. Sources can include as many 1206 Both "sources" and "outputs" must be specified. Sources can include as many
1280 files as you want, but there can only be one item in the outputs list (plural 1207 files as you want, but there can only be one item in the outputs list (plural
1281 is used for the name for consistency with other target types). 1208 is used for the name for consistency with other target types).
1282 1209
1283 If there is more than one source file, your output name should specify a 1210 If there is more than one source file, your output name should specify a
1284 mapping from each source file to an output file name using source expansion 1211 mapping from each source file to an output file name using source expansion
1285 (see "gn help source_expansion"). The placeholders will look like 1212 (see "gn help source_expansion"). The placeholders will look like
1286 "{{source_name_part}}", for example. 1213 "{{source_name_part}}", for example.
1287
1288 ``` 1214 ```
1289 1215
1290 #### **Examples** 1216 #### **Examples**
1291 1217
1292 ``` 1218 ```
1293 # Write a rule that copies a checked-in DLL to the output directory. 1219 # Write a rule that copies a checked-in DLL to the output directory.
1294 copy("mydll") { 1220 copy("mydll") {
1295 sources = [ "mydll.dll" ] 1221 sources = [ "mydll.dll" ]
1296 outputs = [ "$target_out_dir/mydll.dll" ] 1222 outputs = [ "$target_out_dir/mydll.dll" ]
1297 } 1223 }
1298 1224
1299 # Write a rule to copy several files to the target generated files directory. 1225 # Write a rule to copy several files to the target generated files directory.
1300 copy("myfiles") { 1226 copy("myfiles") {
1301 sources = [ "data1.dat", "data2.dat", "data3.dat" ] 1227 sources = [ "data1.dat", "data2.dat", "data3.dat" ]
1302 1228
1303 # Use source expansion to generate output files with the corresponding file 1229 # Use source expansion to generate output files with the corresponding file
1304 # names in the gen dir. This will just copy each file. 1230 # names in the gen dir. This will just copy each file.
1305 outputs = [ "$target_gen_dir/{{source_file_part}}" ] 1231 outputs = [ "$target_gen_dir/{{source_file_part}}" ]
1306 } 1232 }
1307
1308
1309 ``` 1233 ```
1310 ### <a name="create_bundle"></a>**create_bundle**: [iOS/OS X] Build an OS X / iO S bundle. 1234 ### <a name="create_bundle"></a>**create_bundle**: [iOS/OS X] Build an OS X / iO S bundle.
1311 1235
1312 ``` 1236 ```
1313 This target generates an iOS/OS X bundle (which is a directory with a 1237 This target generates an iOS/OS X bundle (which is a directory with a
1314 well-know structure). This target does not define any sources, instead they 1238 well-know structure). This target does not define any sources, instead they
1315 are computed from all "bundle_data" target this one depends on transitively 1239 are computed from all "bundle_data" target this one depends on transitively
1316 (the recursion stops at "create_bundle" targets). 1240 (the recursion stops at "create_bundle" targets).
1317 1241
1318 The "bundle_*_dir" properties must be defined. They will be used for the 1242 The "bundle_*_dir" properties must be defined. They will be used for the
1319 expansion of {{bundle_*_dir}} rules in "bundle_data" outputs. 1243 expansion of {{bundle_*_dir}} rules in "bundle_data" outputs.
1320 1244
1321 This target can be used on all platforms though it is designed only to 1245 This target can be used on all platforms though it is designed only to
1322 generate iOS/OS X bundle. In cross-platform projects, it is advised to put it 1246 generate iOS/OS X bundle. In cross-platform projects, it is advised to put it
1323 behind iOS/Mac conditionals. 1247 behind iOS/Mac conditionals.
1324 1248
1325 If a create_bundle is specified as a data_deps for another target, the bundle 1249 If a create_bundle is specified as a data_deps for another target, the bundle
1326 is considered a leaf, and its public and private dependencies will not 1250 is considered a leaf, and its public and private dependencies will not
1327 contribute to any data or data_deps. Required runtime dependencies should be 1251 contribute to any data or data_deps. Required runtime dependencies should be
1328 placed in the bundle. A create_bundle can declare its own explicit data and 1252 placed in the bundle. A create_bundle can declare its own explicit data and
1329 data_deps, however. 1253 data_deps, however.
1330
1331 ``` 1254 ```
1332 1255
1333 #### **Code signing** 1256 #### **Code signing**
1334 1257
1335 ``` 1258 ```
1336 Some bundle needs to be code signed as part of the build (on iOS all 1259 Some bundle needs to be code signed as part of the build (on iOS all
1337 application needs to be code signed to run on a device). The code signature 1260 application needs to be code signed to run on a device). The code signature
1338 can be configured via the code_signing_script variable. 1261 can be configured via the code_signing_script variable.
1339 1262
1340 If set, code_signing_script is the path of a script that invoked after all 1263 If set, code_signing_script is the path of a script that invoked after all
1341 files have been moved into the bundle. The script must not change any file in 1264 files have been moved into the bundle. The script must not change any file in
1342 the bundle, but may add new files. 1265 the bundle, but may add new files.
1343 1266
1344 If code_signing_script is defined, then code_signing_outputs must also be 1267 If code_signing_script is defined, then code_signing_outputs must also be
1345 defined and non-empty to inform when the script needs to be re-run. The 1268 defined and non-empty to inform when the script needs to be re-run. The
1346 code_signing_args will be passed as is to the script (so path have to be 1269 code_signing_args will be passed as is to the script (so path have to be
1347 rebased) and additional inputs may be listed with the variable 1270 rebased) and additional inputs may be listed with the variable
1348 code_signing_sources. 1271 code_signing_sources.
1349
1350 ``` 1272 ```
1351 1273
1352 #### **Variables** 1274 #### **Variables**
1353 1275
1354 ``` 1276 ```
1355 bundle_root_dir*, bundle_resources_dir*, bundle_executable_dir*, 1277 bundle_root_dir*, bundle_resources_dir*, bundle_executable_dir*,
1356 bundle_plugins_dir*, bundle_deps_filter, deps, data_deps, public_deps, 1278 bundle_plugins_dir*, bundle_deps_filter, deps, data_deps, public_deps,
1357 visibility, product_type, code_signing_args, code_signing_script, 1279 visibility, product_type, code_signing_args, code_signing_script,
1358 code_signing_sources, code_signing_outputs 1280 code_signing_sources, code_signing_outputs
1359 * = required 1281 * = required
1360
1361 ``` 1282 ```
1362 1283
1363 #### **Example** 1284 #### **Example**
1364 1285
1365 ``` 1286 ```
1366 # Defines a template to create an application. On most platform, this is just 1287 # Defines a template to create an application. On most platform, this is just
1367 # an alias for an "executable" target, but on iOS/OS X, it builds an 1288 # an alias for an "executable" target, but on iOS/OS X, it builds an
1368 # application bundle. 1289 # application bundle.
1369 template("app") { 1290 template("app") {
1370 if (!is_ios && !is_mac) { 1291 if (!is_ios && !is_mac) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 "-e=" + rebase_path( 1366 "-e=" + rebase_path(
1446 "$target_gen_dir/$app_name.xcent", root_build_dir), 1367 "$target_gen_dir/$app_name.xcent", root_build_dir),
1447 rebase_path(bundle_root_dir, root_build_dir), 1368 rebase_path(bundle_root_dir, root_build_dir),
1448 ] 1369 ]
1449 } else { 1370 } else {
1450 deps += [ ":${app_name}_bundle_executable" ] 1371 deps += [ ":${app_name}_bundle_executable" ]
1451 } 1372 }
1452 } 1373 }
1453 } 1374 }
1454 } 1375 }
1455
1456
1457 ``` 1376 ```
1458 ### <a name="executable"></a>**executable**: Declare an executable target. 1377 ### <a name="executable"></a>**executable**: Declare an executable target.
1459 1378
1460 #### **Variables** 1379 #### **Variables**
1461 1380
1462 ``` 1381 ```
1463 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, 1382 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
1464 asmflags, defines, include_dirs, ldflags, lib_dirs, libs, 1383 asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
1465 precompiled_header, precompiled_source 1384 precompiled_header, precompiled_source
1466 Deps: data_deps, deps, public_deps 1385 Deps: data_deps, deps, public_deps
1467 Dependent configs: all_dependent_configs, public_configs 1386 Dependent configs: all_dependent_configs, public_configs
1468 General: check_includes, configs, data, inputs, output_name, 1387 General: check_includes, configs, data, inputs, output_name,
1469 output_extension, public, sources, testonly, visibility 1388 output_extension, public, sources, testonly, visibility
1470
1471
1472 ``` 1389 ```
1473 ### <a name="group"></a>**group**: Declare a named group of targets. 1390 ### <a name="group"></a>**group**: Declare a named group of targets.
1474 1391
1475 ``` 1392 ```
1476 This target type allows you to create meta-targets that just collect a set of 1393 This target type allows you to create meta-targets that just collect a set of
1477 dependencies into one named target. Groups can additionally specify configs 1394 dependencies into one named target. Groups can additionally specify configs
1478 that apply to their dependents. 1395 that apply to their dependents.
1479
1480 ``` 1396 ```
1481 1397
1482 #### **Variables** 1398 #### **Variables**
1483 1399
1484 ``` 1400 ```
1485 Deps: data_deps, deps, public_deps 1401 Deps: data_deps, deps, public_deps
1486 Dependent configs: all_dependent_configs, public_configs 1402 Dependent configs: all_dependent_configs, public_configs
1487
1488 ``` 1403 ```
1489 1404
1490 #### **Example** 1405 #### **Example**
1491 1406
1492 ``` 1407 ```
1493 group("all") { 1408 group("all") {
1494 deps = [ 1409 deps = [
1495 "//project:runner", 1410 "//project:runner",
1496 "//project:unit_tests", 1411 "//project:unit_tests",
1497 ] 1412 ]
1498 } 1413 }
1499
1500
1501 ``` 1414 ```
1502 ### <a name="loadable_module"></a>**loadable_module**: Declare a loadable module target. 1415 ### <a name="loadable_module"></a>**loadable_module**: Declare a loadable module target.
1503 1416
1504 ``` 1417 ```
1505 This target type allows you to create an object file that is (and can only 1418 This target type allows you to create an object file that is (and can only
1506 be) loaded and unloaded at runtime. 1419 be) loaded and unloaded at runtime.
1507 1420
1508 A loadable module will be specified on the linker line for targets listing 1421 A loadable module will be specified on the linker line for targets listing
1509 the loadable module in its "deps". If you don't want this (if you don't need 1422 the loadable module in its "deps". If you don't want this (if you don't need
1510 to dynamically load the library at runtime), then you should use a 1423 to dynamically load the library at runtime), then you should use a
1511 "shared_library" target type instead. 1424 "shared_library" target type instead.
1512
1513 ``` 1425 ```
1514 1426
1515 #### **Variables** 1427 #### **Variables**
1516 1428
1517 ``` 1429 ```
1518 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, 1430 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
1519 asmflags, defines, include_dirs, ldflags, lib_dirs, libs, 1431 asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
1520 precompiled_header, precompiled_source 1432 precompiled_header, precompiled_source
1521 Deps: data_deps, deps, public_deps 1433 Deps: data_deps, deps, public_deps
1522 Dependent configs: all_dependent_configs, public_configs 1434 Dependent configs: all_dependent_configs, public_configs
1523 General: check_includes, configs, data, inputs, output_name, 1435 General: check_includes, configs, data, inputs, output_name,
1524 output_extension, public, sources, testonly, visibility 1436 output_extension, public, sources, testonly, visibility
1525
1526
1527 ``` 1437 ```
1528 ### <a name="shared_library"></a>**shared_library**: Declare a shared library ta rget. 1438 ### <a name="shared_library"></a>**shared_library**: Declare a shared library ta rget.
1529 1439
1530 ``` 1440 ```
1531 A shared library will be specified on the linker line for targets listing the 1441 A shared library will be specified on the linker line for targets listing the
1532 shared library in its "deps". If you don't want this (say you dynamically 1442 shared library in its "deps". If you don't want this (say you dynamically
1533 load the library at runtime), then you should depend on the shared library 1443 load the library at runtime), then you should depend on the shared library
1534 via "data_deps" or, on Darwin platforms, use a "loadable_module" target type 1444 via "data_deps" or, on Darwin platforms, use a "loadable_module" target type
1535 instead. 1445 instead.
1536
1537 ``` 1446 ```
1538 1447
1539 #### **Variables** 1448 #### **Variables**
1540 1449
1541 ``` 1450 ```
1542 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, 1451 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
1543 asmflags, defines, include_dirs, ldflags, lib_dirs, libs, 1452 asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
1544 precompiled_header, precompiled_source 1453 precompiled_header, precompiled_source
1545 Deps: data_deps, deps, public_deps 1454 Deps: data_deps, deps, public_deps
1546 Dependent configs: all_dependent_configs, public_configs 1455 Dependent configs: all_dependent_configs, public_configs
1547 General: check_includes, configs, data, inputs, output_name, 1456 General: check_includes, configs, data, inputs, output_name,
1548 output_extension, public, sources, testonly, visibility 1457 output_extension, public, sources, testonly, visibility
1549
1550
1551 ``` 1458 ```
1552 ### <a name="source_set"></a>**source_set**: Declare a source set target. 1459 ### <a name="source_set"></a>**source_set**: Declare a source set target.
1553 1460
1554 ``` 1461 ```
1555 A source set is a collection of sources that get compiled, but are not linked 1462 A source set is a collection of sources that get compiled, but are not linked
1556 to produce any kind of library. Instead, the resulting object files are 1463 to produce any kind of library. Instead, the resulting object files are
1557 implicitly added to the linker line of all targets that depend on the source 1464 implicitly added to the linker line of all targets that depend on the source
1558 set. 1465 set.
1559 1466
1560 In most cases, a source set will behave like a static library, except no 1467 In most cases, a source set will behave like a static library, except no
1561 actual library file will be produced. This will make the build go a little 1468 actual library file will be produced. This will make the build go a little
1562 faster by skipping creation of a large static library, while maintaining the 1469 faster by skipping creation of a large static library, while maintaining the
1563 organizational benefits of focused build targets. 1470 organizational benefits of focused build targets.
1564 1471
1565 The main difference between a source set and a static library is around 1472 The main difference between a source set and a static library is around
1566 handling of exported symbols. Most linkers assume declaring a function 1473 handling of exported symbols. Most linkers assume declaring a function
1567 exported means exported from the static library. The linker can then do dead 1474 exported means exported from the static library. The linker can then do dead
1568 code elimination to delete code not reachable from exported functions. 1475 code elimination to delete code not reachable from exported functions.
1569 1476
1570 A source set will not do this code elimination since there is no link step. 1477 A source set will not do this code elimination since there is no link step.
1571 This allows you to link many sources sets into a shared library and have the 1478 This allows you to link many sources sets into a shared library and have the
1572 "exported symbol" notation indicate "export from the final shared library and 1479 "exported symbol" notation indicate "export from the final shared library and
1573 not from the intermediate targets." There is no way to express this concept 1480 not from the intermediate targets." There is no way to express this concept
1574 when linking multiple static libraries into a shared library. 1481 when linking multiple static libraries into a shared library.
1575
1576 ``` 1482 ```
1577 1483
1578 #### **Variables** 1484 #### **Variables**
1579 1485
1580 ``` 1486 ```
1581 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, 1487 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
1582 asmflags, defines, include_dirs, ldflags, lib_dirs, libs, 1488 asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
1583 precompiled_header, precompiled_source 1489 precompiled_header, precompiled_source
1584 Deps: data_deps, deps, public_deps 1490 Deps: data_deps, deps, public_deps
1585 Dependent configs: all_dependent_configs, public_configs 1491 Dependent configs: all_dependent_configs, public_configs
1586 General: check_includes, configs, data, inputs, output_name, 1492 General: check_includes, configs, data, inputs, output_name,
1587 output_extension, public, sources, testonly, visibility 1493 output_extension, public, sources, testonly, visibility
1588
1589
1590 ``` 1494 ```
1591 ### <a name="static_library"></a>**static_library**: Declare a static library ta rget. 1495 ### <a name="static_library"></a>**static_library**: Declare a static library ta rget.
1592 1496
1593 ``` 1497 ```
1594 Make a ".a" / ".lib" file. 1498 Make a ".a" / ".lib" file.
1595 1499
1596 If you only need the static library for intermediate results in the build, 1500 If you only need the static library for intermediate results in the build,
1597 you should consider a source_set instead since it will skip the (potentially 1501 you should consider a source_set instead since it will skip the (potentially
1598 slow) step of creating the intermediate library file. 1502 slow) step of creating the intermediate library file.
1599
1600 ``` 1503 ```
1601 1504
1602 #### **Variables** 1505 #### **Variables**
1603 1506
1604 ``` 1507 ```
1605 complete_static_lib 1508 complete_static_lib
1606 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, 1509 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
1607 asmflags, defines, include_dirs, ldflags, lib_dirs, libs, 1510 asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
1608 precompiled_header, precompiled_source 1511 precompiled_header, precompiled_source
1609 Deps: data_deps, deps, public_deps 1512 Deps: data_deps, deps, public_deps
1610 Dependent configs: all_dependent_configs, public_configs 1513 Dependent configs: all_dependent_configs, public_configs
1611 General: check_includes, configs, data, inputs, output_name, 1514 General: check_includes, configs, data, inputs, output_name,
1612 output_extension, public, sources, testonly, visibility 1515 output_extension, public, sources, testonly, visibility
1613
1614
1615 ``` 1516 ```
1616 ### <a name="target"></a>**target**: Declare an target with the given programmat ic type. 1517 ### <a name="target"></a>**target**: Declare an target with the given programmat ic type.
1617 1518
1618 ``` 1519 ```
1619 target(target_type_string, target_name_string) { ... } 1520 target(target_type_string, target_name_string) { ... }
1620 1521
1621 The target() function is a way to invoke a built-in target or template with a 1522 The target() function is a way to invoke a built-in target or template with a
1622 type determined at runtime. This is useful for cases where the type of a 1523 type determined at runtime. This is useful for cases where the type of a
1623 target might not be known statically. 1524 target might not be known statically.
1624 1525
1625 Only templates and built-in target functions are supported for the 1526 Only templates and built-in target functions are supported for the
1626 target_type_string parameter. Arbitrary functions, configs, and toolchains 1527 target_type_string parameter. Arbitrary functions, configs, and toolchains
1627 are not supported. 1528 are not supported.
1628 1529
1629 The call: 1530 The call:
1630 target("source_set", "doom_melon") { 1531 target("source_set", "doom_melon") {
1631 Is equivalent to: 1532 Is equivalent to:
1632 source_set("doom_melon") { 1533 source_set("doom_melon") {
1633
1634 ``` 1534 ```
1635 1535
1636 #### **Example** 1536 #### **Example**
1637 1537
1638 ``` 1538 ```
1639 if (foo_build_as_shared) { 1539 if (foo_build_as_shared) {
1640 my_type = "shared_library" 1540 my_type = "shared_library"
1641 } else { 1541 } else {
1642 my_type = "source_set" 1542 my_type = "source_set"
1643 } 1543 }
1644 1544
1645 target(my_type, "foo") { 1545 target(my_type, "foo") {
1646 ... 1546 ...
1647 } 1547 }
1648
1649
1650 ``` 1548 ```
1651 ## <a name="functions"></a>Buildfile functions 1549 ## <a name="functions"></a>Buildfile functions
1652 1550
1653 ### <a name="assert"></a>**assert**: Assert an expression is true at generation time. 1551 ### <a name="assert"></a>**assert**: Assert an expression is true at generation time.
1654 1552
1655 ``` 1553 ```
1656 assert(<condition> [, <error string>]) 1554 assert(<condition> [, <error string>])
1657 1555
1658 If the condition is false, the build will fail with an error. If the 1556 If the condition is false, the build will fail with an error. If the
1659 optional second argument is provided, that string will be printed 1557 optional second argument is provided, that string will be printed
1660 with the error message. 1558 with the error message.
1661
1662 ``` 1559 ```
1663 1560
1664 #### **Examples** 1561 #### **Examples**
1665 1562
1666 ``` 1563 ```
1667 assert(is_win) 1564 assert(is_win)
1668 assert(defined(sources), "Sources must be defined"); 1565 assert(defined(sources), "Sources must be defined");
1669
1670
1671 ``` 1566 ```
1672 ### <a name="config"></a>**config**: Defines a configuration object. 1567 ### <a name="config"></a>**config**: Defines a configuration object.
1673 1568
1674 ``` 1569 ```
1675 Configuration objects can be applied to targets and specify sets of compiler 1570 Configuration objects can be applied to targets and specify sets of compiler
1676 flags, includes, defines, etc. They provide a way to conveniently group sets 1571 flags, includes, defines, etc. They provide a way to conveniently group sets
1677 of this configuration information. 1572 of this configuration information.
1678 1573
1679 A config is referenced by its label just like a target. 1574 A config is referenced by its label just like a target.
1680 1575
1681 The values in a config are additive only. If you want to remove a flag you 1576 The values in a config are additive only. If you want to remove a flag you
1682 need to remove the corresponding config that sets it. The final set of flags, 1577 need to remove the corresponding config that sets it. The final set of flags,
1683 defines, etc. for a target is generated in this order: 1578 defines, etc. for a target is generated in this order:
1684 1579
1685 1. The values specified directly on the target (rather than using a config. 1580 1. The values specified directly on the target (rather than using a config.
1686 2. The configs specified in the target's "configs" list, in order. 1581 2. The configs specified in the target's "configs" list, in order.
1687 3. Public_configs from a breadth-first traversal of the dependency tree in 1582 3. Public_configs from a breadth-first traversal of the dependency tree in
1688 the order that the targets appear in "deps". 1583 the order that the targets appear in "deps".
1689 4. All dependent configs from a breadth-first traversal of the dependency 1584 4. All dependent configs from a breadth-first traversal of the dependency
1690 tree in the order that the targets appear in "deps". 1585 tree in the order that the targets appear in "deps".
1691
1692 ``` 1586 ```
1693 1587
1694 #### **Variables valid in a config definition** 1588 #### **Variables valid in a config definition**
1695 ``` 1589 ```
1696 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc, 1590 Flags: cflags, cflags_c, cflags_cc, cflags_objc, cflags_objcc,
1697 asmflags, defines, include_dirs, ldflags, lib_dirs, libs, 1591 asmflags, defines, include_dirs, ldflags, lib_dirs, libs,
1698 precompiled_header, precompiled_source 1592 precompiled_header, precompiled_source
1699 Nested configs: configs 1593 Nested configs: configs
1700
1701 ``` 1594 ```
1702 1595
1703 #### **Variables on a target used to apply configs** 1596 #### **Variables on a target used to apply configs**
1704 1597
1705 ``` 1598 ```
1706 all_dependent_configs, configs, public_configs 1599 all_dependent_configs, configs, public_configs
1707
1708 ``` 1600 ```
1709 1601
1710 #### **Example** 1602 #### **Example**
1711 1603
1712 ``` 1604 ```
1713 config("myconfig") { 1605 config("myconfig") {
1714 includes = [ "include/common" ] 1606 includes = [ "include/common" ]
1715 defines = [ "ENABLE_DOOM_MELON" ] 1607 defines = [ "ENABLE_DOOM_MELON" ]
1716 } 1608 }
1717 1609
1718 executable("mything") { 1610 executable("mything") {
1719 configs = [ ":myconfig" ] 1611 configs = [ ":myconfig" ]
1720 } 1612 }
1721
1722
1723 ``` 1613 ```
1724 ### <a name="declare_args"></a>**declare_args**: Declare build arguments. 1614 ### <a name="declare_args"></a>**declare_args**: Declare build arguments.
1725 1615
1726 ``` 1616 ```
1727 Introduces the given arguments into the current scope. If they are not 1617 Introduces the given arguments into the current scope. If they are not
1728 specified on the command line or in a toolchain's arguments, the default 1618 specified on the command line or in a toolchain's arguments, the default
1729 values given in the declare_args block will be used. However, these defaults 1619 values given in the declare_args block will be used. However, these defaults
1730 will not override command-line values. 1620 will not override command-line values.
1731 1621
1732 See also "gn help buildargs" for an overview. 1622 See also "gn help buildargs" for an overview.
(...skipping 26 matching lines...) Expand all
1759 on the possibly-overridden value of another, write two separate 1649 on the possibly-overridden value of another, write two separate
1760 declare_args() blocks: 1650 declare_args() blocks:
1761 1651
1762 declare_args() { 1652 declare_args() {
1763 enable_foo = true 1653 enable_foo = true
1764 } 1654 }
1765 declare_args() { 1655 declare_args() {
1766 # Bar defaults to same user-overridden state as foo. 1656 # Bar defaults to same user-overridden state as foo.
1767 enable_bar = enable_foo 1657 enable_bar = enable_foo
1768 } 1658 }
1769
1770 ``` 1659 ```
1771 1660
1772 #### **Example** 1661 #### **Example**
1773 1662
1774 ``` 1663 ```
1775 declare_args() { 1664 declare_args() {
1776 enable_teleporter = true 1665 enable_teleporter = true
1777 enable_doom_melon = false 1666 enable_doom_melon = false
1778 } 1667 }
1779 1668
1780 If you want to override the (default disabled) Doom Melon: 1669 If you want to override the (default disabled) Doom Melon:
1781 gn --args="enable_doom_melon=true enable_teleporter=true" 1670 gn --args="enable_doom_melon=true enable_teleporter=true"
1782 This also sets the teleporter, but it's already defaulted to on so it will 1671 This also sets the teleporter, but it's already defaulted to on so it will
1783 have no effect. 1672 have no effect.
1784
1785
1786 ``` 1673 ```
1787 ### <a name="defined"></a>**defined**: Returns whether an identifier is defined. 1674 ### <a name="defined"></a>**defined**: Returns whether an identifier is defined.
1788 1675
1789 ``` 1676 ```
1790 Returns true if the given argument is defined. This is most useful in 1677 Returns true if the given argument is defined. This is most useful in
1791 templates to assert that the caller set things up properly. 1678 templates to assert that the caller set things up properly.
1792 1679
1793 You can pass an identifier: 1680 You can pass an identifier:
1794 defined(foo) 1681 defined(foo)
1795 which will return true or false depending on whether foo is defined in the 1682 which will return true or false depending on whether foo is defined in the
1796 current scope. 1683 current scope.
1797 1684
1798 You can also check a named scope: 1685 You can also check a named scope:
1799 defined(foo.bar) 1686 defined(foo.bar)
1800 which will return true or false depending on whether bar is defined in the 1687 which will return true or false depending on whether bar is defined in the
1801 named scope foo. It will throw an error if foo is not defined or is not a 1688 named scope foo. It will throw an error if foo is not defined or is not a
1802 scope. 1689 scope.
1803
1804 ``` 1690 ```
1805 1691
1806 #### **Example** 1692 #### **Example**
1807 1693
1808 ``` 1694 ```
1809 template("mytemplate") { 1695 template("mytemplate") {
1810 # To help users call this template properly... 1696 # To help users call this template properly...
1811 assert(defined(invoker.sources), "Sources must be defined") 1697 assert(defined(invoker.sources), "Sources must be defined")
1812 1698
1813 # If we want to accept an optional "values" argument, we don't 1699 # If we want to accept an optional "values" argument, we don't
1814 # want to dereference something that may not be defined. 1700 # want to dereference something that may not be defined.
1815 if (defined(invoker.values)) { 1701 if (defined(invoker.values)) {
1816 values = invoker.values 1702 values = invoker.values
1817 } else { 1703 } else {
1818 values = "some default value" 1704 values = "some default value"
1819 } 1705 }
1820 } 1706 }
1821
1822
1823 ``` 1707 ```
1824 ### <a name="exec_script"></a>**exec_script**: Synchronously run a script and re turn the output. 1708 ### <a name="exec_script"></a>**exec_script**: Synchronously run a script and re turn the output.
1825 1709
1826 ``` 1710 ```
1827 exec_script(filename, 1711 exec_script(filename,
1828 arguments = [], 1712 arguments = [],
1829 input_conversion = "", 1713 input_conversion = "",
1830 file_dependencies = []) 1714 file_dependencies = [])
1831 1715
1832 Runs the given script, returning the stdout of the script. The build 1716 Runs the given script, returning the stdout of the script. The build
1833 generation will fail if the script does not exist or returns a nonzero exit 1717 generation will fail if the script does not exist or returns a nonzero exit
1834 code. 1718 code.
1835 1719
1836 The current directory when executing the script will be the root build 1720 The current directory when executing the script will be the root build
1837 directory. If you are passing file names, you will want to use the 1721 directory. If you are passing file names, you will want to use the
1838 rebase_path() function to make file names relative to this path (see "gn help 1722 rebase_path() function to make file names relative to this path (see "gn help
1839 rebase_path"). 1723 rebase_path").
1840
1841 ``` 1724 ```
1842 1725
1843 #### **Arguments**: 1726 #### **Arguments**:
1844 1727
1845 ``` 1728 ```
1846 filename: 1729 filename:
1847 File name of python script to execute. Non-absolute names will be treated 1730 File name of python script to execute. Non-absolute names will be treated
1848 as relative to the current build file. 1731 as relative to the current build file.
1849 1732
1850 arguments: 1733 arguments:
1851 A list of strings to be passed to the script as arguments. May be 1734 A list of strings to be passed to the script as arguments. May be
1852 unspecified or the empty list which means no arguments. 1735 unspecified or the empty list which means no arguments.
1853 1736
1854 input_conversion: 1737 input_conversion:
1855 Controls how the file is read and parsed. See "gn help input_conversion". 1738 Controls how the file is read and parsed. See "gn help input_conversion".
1856 1739
1857 If unspecified, defaults to the empty string which causes the script 1740 If unspecified, defaults to the empty string which causes the script
1858 result to be discarded. exec script will return None. 1741 result to be discarded. exec script will return None.
1859 1742
1860 dependencies: 1743 dependencies:
1861 (Optional) A list of files that this script reads or otherwise depends 1744 (Optional) A list of files that this script reads or otherwise depends
1862 on. These dependencies will be added to the build result such that if any 1745 on. These dependencies will be added to the build result such that if any
1863 of them change, the build will be regenerated and the script will be 1746 of them change, the build will be regenerated and the script will be
1864 re-run. 1747 re-run.
1865 1748
1866 The script itself will be an implicit dependency so you do not need to 1749 The script itself will be an implicit dependency so you do not need to
1867 list it. 1750 list it.
1868
1869 ``` 1751 ```
1870 1752
1871 #### **Example** 1753 #### **Example**
1872 1754
1873 ``` 1755 ```
1874 all_lines = exec_script( 1756 all_lines = exec_script(
1875 "myscript.py", [some_input], "list lines", 1757 "myscript.py", [some_input], "list lines",
1876 [ rebase_path("data_file.txt", root_build_dir) ]) 1758 [ rebase_path("data_file.txt", root_build_dir) ])
1877 1759
1878 # This example just calls the script with no arguments and discards the 1760 # This example just calls the script with no arguments and discards the
1879 # result. 1761 # result.
1880 exec_script("//foo/bar/myscript.py") 1762 exec_script("//foo/bar/myscript.py")
1881
1882
1883 ``` 1763 ```
1884 ### <a name="foreach"></a>**foreach**: Iterate over a list. 1764 ### <a name="foreach"></a>**foreach**: Iterate over a list.
1885 1765
1886 ``` 1766 ```
1887 foreach(<loop_var>, <list>) { 1767 foreach(<loop_var>, <list>) {
1888 <loop contents> 1768 <loop contents>
1889 } 1769 }
1890 1770
1891 Executes the loop contents block over each item in the list, assigning the 1771 Executes the loop contents block over each item in the list, assigning the
1892 loop_var to each item in sequence. The loop_var will be a copy so assigning 1772 loop_var to each item in sequence. The loop_var will be a copy so assigning
1893 to it will not mutate the list. 1773 to it will not mutate the list.
1894 1774
1895 The block does not introduce a new scope, so that variable assignments inside 1775 The block does not introduce a new scope, so that variable assignments inside
1896 the loop will be visible once the loop terminates. 1776 the loop will be visible once the loop terminates.
1897 1777
1898 The loop variable will temporarily shadow any existing variables with the 1778 The loop variable will temporarily shadow any existing variables with the
1899 same name for the duration of the loop. After the loop terminates the loop 1779 same name for the duration of the loop. After the loop terminates the loop
1900 variable will no longer be in scope, and the previous value (if any) will be 1780 variable will no longer be in scope, and the previous value (if any) will be
1901 restored. 1781 restored.
1902
1903 ``` 1782 ```
1904 1783
1905 #### **Example** 1784 #### **Example**
1906 1785
1907 ``` 1786 ```
1908 mylist = [ "a", "b", "c" ] 1787 mylist = [ "a", "b", "c" ]
1909 foreach(i, mylist) { 1788 foreach(i, mylist) {
1910 print(i) 1789 print(i)
1911 } 1790 }
1912 1791
1913 Prints: 1792 Prints:
1914 a 1793 a
1915 b 1794 b
1916 c 1795 c
1917
1918
1919 ``` 1796 ```
1920 ### <a name="forward_variables_from"></a>**forward_variables_from**: Copies vari ables from a different scope. 1797 ### <a name="forward_variables_from"></a>**forward_variables_from**: Copies vari ables from a different scope.
1921 1798
1922 ``` 1799 ```
1923 forward_variables_from(from_scope, variable_list_or_star, 1800 forward_variables_from(from_scope, variable_list_or_star,
1924 variable_to_not_forward_list = []) 1801 variable_to_not_forward_list = [])
1925 1802
1926 Copies the given variables from the given scope to the local scope if they 1803 Copies the given variables from the given scope to the local scope if they
1927 exist. This is normally used in the context of templates to use the values of 1804 exist. This is normally used in the context of templates to use the values of
1928 variables defined in the template invocation to a template-defined target. 1805 variables defined in the template invocation to a template-defined target.
(...skipping 14 matching lines...) Expand all
1943 wouldn't work at all if it didn't clobber). 1820 wouldn't work at all if it didn't clobber).
1944 1821
1945 The sources assignment filter (see "gn help " 1822 The sources assignment filter (see "gn help "
1946 "set_sources_assignment_filter") 1823 "set_sources_assignment_filter")
1947 is never applied by this function. It's assumed than any desired filtering 1824 is never applied by this function. It's assumed than any desired filtering
1948 was already done when sources was set on the from_scope. 1825 was already done when sources was set on the from_scope.
1949 1826
1950 If variables_to_not_forward_list is non-empty, then it must contains a list 1827 If variables_to_not_forward_list is non-empty, then it must contains a list
1951 of variable names that will not be forwarded. This is mostly useful when 1828 of variable names that will not be forwarded. This is mostly useful when
1952 variable_list_or_star has a value of "*". 1829 variable_list_or_star has a value of "*".
1953
1954 ``` 1830 ```
1955 1831
1956 #### **Examples** 1832 #### **Examples**
1957 1833
1958 ``` 1834 ```
1959 # This is a common action template. It would invoke a script with some given 1835 # This is a common action template. It would invoke a script with some given
1960 # parameters, and wants to use the various types of deps and the visibility 1836 # parameters, and wants to use the various types of deps and the visibility
1961 # from the invoker if it's defined. It also injects an additional dependency 1837 # from the invoker if it's defined. It also injects an additional dependency
1962 # to all targets. 1838 # to all targets.
1963 template("my_test") { 1839 template("my_test") {
(...skipping 23 matching lines...) Expand all
1987 # variable, and forwards all others to the nested target. 1863 # variable, and forwards all others to the nested target.
1988 template("my_ios_test_app") { 1864 template("my_ios_test_app") {
1989 ios_test_app(target_name) { 1865 ios_test_app(target_name) {
1990 forward_variables_from(invoker, "*", ["test_bundle_name"]) 1866 forward_variables_from(invoker, "*", ["test_bundle_name"])
1991 if (!defined(extra_substitutions)) { 1867 if (!defined(extra_substitutions)) {
1992 extra_substitutions = [] 1868 extra_substitutions = []
1993 } 1869 }
1994 extra_substitutions += [ "BUNDLE_ID_TEST_NAME=$test_bundle_name" ] 1870 extra_substitutions += [ "BUNDLE_ID_TEST_NAME=$test_bundle_name" ]
1995 } 1871 }
1996 } 1872 }
1997
1998
1999 ``` 1873 ```
2000 ### <a name="get_label_info"></a>**get_label_info**: Get an attribute from a tar get's label. 1874 ### <a name="get_label_info"></a>**get_label_info**: Get an attribute from a tar get's label.
2001 1875
2002 ``` 1876 ```
2003 get_label_info(target_label, what) 1877 get_label_info(target_label, what)
2004 1878
2005 Given the label of a target, returns some attribute of that target. The 1879 Given the label of a target, returns some attribute of that target. The
2006 target need not have been previously defined in the same file, since none of 1880 target need not have been previously defined in the same file, since none of
2007 the attributes depend on the actual target definition, only the label itself. 1881 the attributes depend on the actual target definition, only the label itself.
2008 1882
2009 See also "gn help get_target_outputs". 1883 See also "gn help get_target_outputs".
2010
2011 ``` 1884 ```
2012 1885
2013 #### **Possible values for the "what" parameter** 1886 #### **Possible values for the "what" parameter**
2014 1887
2015 ``` 1888 ```
2016 "name" 1889 "name"
2017 The short name of the target. This will match the value of the 1890 The short name of the target. This will match the value of the
2018 "target_name" variable inside that target's declaration. For the label 1891 "target_name" variable inside that target's declaration. For the label
2019 "//foo/bar:baz" this will return "baz". 1892 "//foo/bar:baz" this will return "baz".
2020 1893
(...skipping 23 matching lines...) Expand all
2044 The fully qualified version of this label, not including the toolchain. 1917 The fully qualified version of this label, not including the toolchain.
2045 For the input ":bar" it might return "//foo:bar". 1918 For the input ":bar" it might return "//foo:bar".
2046 1919
2047 "label_with_toolchain" 1920 "label_with_toolchain"
2048 The fully qualified version of this label, including the toolchain. For 1921 The fully qualified version of this label, including the toolchain. For
2049 the input ":bar" it might return "//foo:bar(//toolchain:x64)". 1922 the input ":bar" it might return "//foo:bar(//toolchain:x64)".
2050 1923
2051 "toolchain" 1924 "toolchain"
2052 The label of the toolchain. This will match the value of the 1925 The label of the toolchain. This will match the value of the
2053 "current_toolchain" variable when inside that target's declaration. 1926 "current_toolchain" variable when inside that target's declaration.
2054
2055 ``` 1927 ```
2056 1928
2057 #### **Examples** 1929 #### **Examples**
2058 1930
2059 ``` 1931 ```
2060 get_label_info(":foo", "name") 1932 get_label_info(":foo", "name")
2061 # Returns string "foo". 1933 # Returns string "foo".
2062 1934
2063 get_label_info("//foo/bar:baz", "gen_dir") 1935 get_label_info("//foo/bar:baz", "gen_dir")
2064 # Returns string "//out/Debug/gen/foo/bar". 1936 # Returns string "//out/Debug/gen/foo/bar".
2065
2066
2067 ``` 1937 ```
2068 ### <a name="get_path_info"></a>**get_path_info**: Extract parts of a file or di rectory name. 1938 ### <a name="get_path_info"></a>**get_path_info**: Extract parts of a file or di rectory name.
2069 1939
2070 ``` 1940 ```
2071 get_path_info(input, what) 1941 get_path_info(input, what)
2072 1942
2073 The first argument is either a string representing a file or directory name, 1943 The first argument is either a string representing a file or directory name,
2074 or a list of such strings. If the input is a list the return value will be a 1944 or a list of such strings. If the input is a list the return value will be a
2075 list containing the result of applying the rule to each item in the input. 1945 list containing the result of applying the rule to each item in the input.
2076
2077 ``` 1946 ```
2078 1947
2079 #### **Possible values for the "what" parameter** 1948 #### **Possible values for the "what" parameter**
2080 1949
2081 ``` 1950 ```
2082 "file" 1951 "file"
2083 The substring after the last slash in the path, including the name and 1952 The substring after the last slash in the path, including the name and
2084 extension. If the input ends in a slash, the empty string will be 1953 extension. If the input ends in a slash, the empty string will be
2085 returned. 1954 returned.
2086 "foo/bar.txt" => "bar.txt" 1955 "foo/bar.txt" => "bar.txt"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2125 relative to the current directory, and then the source- absolute version 1994 relative to the current directory, and then the source- absolute version
2126 will be returned. If the input is system- absolute, the same input will 1995 will be returned. If the input is system- absolute, the same input will
2127 be returned. 1996 be returned.
2128 "foo/bar.txt" => "//mydir/foo/bar.txt" 1997 "foo/bar.txt" => "//mydir/foo/bar.txt"
2129 "foo/" => "//mydir/foo/" 1998 "foo/" => "//mydir/foo/"
2130 "//foo/bar" => "//foo/bar" (already absolute) 1999 "//foo/bar" => "//foo/bar" (already absolute)
2131 "/usr/include" => "/usr/include" (already absolute) 2000 "/usr/include" => "/usr/include" (already absolute)
2132 2001
2133 If you want to make the path relative to another directory, or to be 2002 If you want to make the path relative to another directory, or to be
2134 system-absolute, see rebase_path(). 2003 system-absolute, see rebase_path().
2135
2136 ``` 2004 ```
2137 2005
2138 #### **Examples** 2006 #### **Examples**
2139 ``` 2007 ```
2140 sources = [ "foo.cc", "foo.h" ] 2008 sources = [ "foo.cc", "foo.h" ]
2141 result = get_path_info(source, "abspath") 2009 result = get_path_info(source, "abspath")
2142 # result will be [ "//mydir/foo.cc", "//mydir/foo.h" ] 2010 # result will be [ "//mydir/foo.cc", "//mydir/foo.h" ]
2143 2011
2144 result = get_path_info("//foo/bar/baz.cc", "dir") 2012 result = get_path_info("//foo/bar/baz.cc", "dir")
2145 # result will be "//foo/bar" 2013 # result will be "//foo/bar"
2146 2014
2147 # Extract the source-absolute directory name, 2015 # Extract the source-absolute directory name,
2148 result = get_path_info(get_path_info(path, "dir"), "abspath" 2016 result = get_path_info(get_path_info(path, "dir"), "abspath"
2149
2150
2151 ``` 2017 ```
2152 ### <a name="get_target_outputs"></a>**get_target_outputs**: [file list] Get the list of outputs from a target. 2018 ### <a name="get_target_outputs"></a>**get_target_outputs**: [file list] Get the list of outputs from a target.
2153 2019
2154 ``` 2020 ```
2155 get_target_outputs(target_label) 2021 get_target_outputs(target_label)
2156 2022
2157 Returns a list of output files for the named target. The named target must 2023 Returns a list of output files for the named target. The named target must
2158 have been previously defined in the current file before this function is 2024 have been previously defined in the current file before this function is
2159 called (it can't reference targets in other files because there isn't a 2025 called (it can't reference targets in other files because there isn't a
2160 defined execution order, and it obviously can't reference targets that are 2026 defined execution order, and it obviously can't reference targets that are
2161 defined after the function call). 2027 defined after the function call).
2162 2028
2163 Only copy and action targets are supported. The outputs from binary targets 2029 Only copy and action targets are supported. The outputs from binary targets
2164 will depend on the toolchain definition which won't necessarily have been 2030 will depend on the toolchain definition which won't necessarily have been
2165 loaded by the time a given line of code has run, and source sets and groups 2031 loaded by the time a given line of code has run, and source sets and groups
2166 have no useful output file. 2032 have no useful output file.
2167
2168 ``` 2033 ```
2169 2034
2170 #### **Return value** 2035 #### **Return value**
2171 2036
2172 ``` 2037 ```
2173 The names in the resulting list will be absolute file paths (normally like 2038 The names in the resulting list will be absolute file paths (normally like
2174 "//out/Debug/bar.exe", depending on the build directory). 2039 "//out/Debug/bar.exe", depending on the build directory).
2175 2040
2176 action targets: this will just return the files specified in the "outputs" 2041 action targets: this will just return the files specified in the "outputs"
2177 variable of the target. 2042 variable of the target.
2178 2043
2179 action_foreach targets: this will return the result of applying the output 2044 action_foreach targets: this will return the result of applying the output
2180 template to the sources (see "gn help source_expansion"). This will be the 2045 template to the sources (see "gn help source_expansion"). This will be the
2181 same result (though with guaranteed absolute file paths), as 2046 same result (though with guaranteed absolute file paths), as
2182 process_file_template will return for those inputs (see "gn help 2047 process_file_template will return for those inputs (see "gn help
2183 process_file_template"). 2048 process_file_template").
2184 2049
2185 binary targets (executables, libraries): this will return a list of the 2050 binary targets (executables, libraries): this will return a list of the
2186 resulting binary file(s). The "main output" (the actual binary or library) 2051 resulting binary file(s). The "main output" (the actual binary or library)
2187 will always be the 0th element in the result. Depending on the platform and 2052 will always be the 0th element in the result. Depending on the platform and
2188 output type, there may be other output files as well (like import libraries) 2053 output type, there may be other output files as well (like import libraries)
2189 which will follow. 2054 which will follow.
2190 2055
2191 source sets and groups: this will return a list containing the path of the 2056 source sets and groups: this will return a list containing the path of the
2192 "stamp" file that Ninja will produce once all outputs are generated. This 2057 "stamp" file that Ninja will produce once all outputs are generated. This
2193 probably isn't very useful. 2058 probably isn't very useful.
2194
2195 ``` 2059 ```
2196 2060
2197 #### **Example** 2061 #### **Example**
2198 2062
2199 ``` 2063 ```
2200 # Say this action generates a bunch of C source files. 2064 # Say this action generates a bunch of C source files.
2201 action_foreach("my_action") { 2065 action_foreach("my_action") {
2202 sources = [ ... ] 2066 sources = [ ... ]
2203 outputs = [ ... ] 2067 outputs = [ ... ]
2204 } 2068 }
2205 2069
2206 # Compile the resulting source files into a source set. 2070 # Compile the resulting source files into a source set.
2207 source_set("my_lib") { 2071 source_set("my_lib") {
2208 sources = get_target_outputs(":my_action") 2072 sources = get_target_outputs(":my_action")
2209 } 2073 }
2210
2211
2212 ``` 2074 ```
2213 ### <a name="getenv"></a>**getenv**: Get an environment variable. 2075 ### <a name="getenv"></a>**getenv**: Get an environment variable.
2214 2076
2215 ``` 2077 ```
2216 value = getenv(env_var_name) 2078 value = getenv(env_var_name)
2217 2079
2218 Returns the value of the given enironment variable. If the value is not 2080 Returns the value of the given enironment variable. If the value is not
2219 found, it will try to look up the variable with the "opposite" case (based on 2081 found, it will try to look up the variable with the "opposite" case (based on
2220 the case of the first letter of the variable), but is otherwise 2082 the case of the first letter of the variable), but is otherwise
2221 case-sensitive. 2083 case-sensitive.
2222 2084
2223 If the environment variable is not found, the empty string will be returned. 2085 If the environment variable is not found, the empty string will be returned.
2224 Note: it might be nice to extend this if we had the concept of "none" in the 2086 Note: it might be nice to extend this if we had the concept of "none" in the
2225 language to indicate lookup failure. 2087 language to indicate lookup failure.
2226
2227 ``` 2088 ```
2228 2089
2229 #### **Example** 2090 #### **Example**
2230 2091
2231 ``` 2092 ```
2232 home_dir = getenv("HOME") 2093 home_dir = getenv("HOME")
2233
2234
2235 ``` 2094 ```
2236 ### <a name="import"></a>**import**: Import a file into the current scope. 2095 ### <a name="import"></a>**import**: Import a file into the current scope.
2237 2096
2238 ``` 2097 ```
2239 The import command loads the rules and variables resulting from executing the 2098 The import command loads the rules and variables resulting from executing the
2240 given file into the current scope. 2099 given file into the current scope.
2241 2100
2242 By convention, imported files are named with a .gni extension. 2101 By convention, imported files are named with a .gni extension.
2243 2102
2244 An import is different than a C++ "include". The imported file is executed in 2103 An import is different than a C++ "include". The imported file is executed in
2245 a standalone environment from the caller of the import command. The results 2104 a standalone environment from the caller of the import command. The results
2246 of this execution are cached for other files that import the same .gni file. 2105 of this execution are cached for other files that import the same .gni file.
2247 2106
2248 Note that you can not import a BUILD.gn file that's otherwise used in the 2107 Note that you can not import a BUILD.gn file that's otherwise used in the
2249 build. Files must either be imported or implicitly loaded as a result of deps 2108 build. Files must either be imported or implicitly loaded as a result of deps
2250 rules, but not both. 2109 rules, but not both.
2251 2110
2252 The imported file's scope will be merged with the scope at the point import 2111 The imported file's scope will be merged with the scope at the point import
2253 was called. If there is a conflict (both the current scope and the imported 2112 was called. If there is a conflict (both the current scope and the imported
2254 file define some variable or rule with the same name but different value), a 2113 file define some variable or rule with the same name but different value), a
2255 runtime error will be thrown. Therefore, it's good practice to minimize the 2114 runtime error will be thrown. Therefore, it's good practice to minimize the
2256 stuff that an imported file defines. 2115 stuff that an imported file defines.
2257 2116
2258 Variables and templates beginning with an underscore '_' are considered 2117 Variables and templates beginning with an underscore '_' are considered
2259 private and will not be imported. Imported files can use such variables for 2118 private and will not be imported. Imported files can use such variables for
2260 internal computation without affecting other files. 2119 internal computation without affecting other files.
2261
2262 ``` 2120 ```
2263 2121
2264 #### **Examples** 2122 #### **Examples**
2265 2123
2266 ``` 2124 ```
2267 import("//build/rules/idl_compilation_rule.gni") 2125 import("//build/rules/idl_compilation_rule.gni")
2268 2126
2269 # Looks in the current directory. 2127 # Looks in the current directory.
2270 import("my_vars.gni") 2128 import("my_vars.gni")
2271
2272
2273 ``` 2129 ```
2274 ### <a name="pool"></a>**pool**: Defines a pool object. 2130 ### <a name="pool"></a>**pool**: Defines a pool object.
2275 2131
2276 ``` 2132 ```
2277 Pool objects can be applied to a tool to limit the parallelism of the 2133 Pool objects can be applied to a tool to limit the parallelism of the
2278 build. This object has a single property "depth" corresponding to 2134 build. This object has a single property "depth" corresponding to
2279 the number of tasks that may run simultaneously. 2135 the number of tasks that may run simultaneously.
2280 2136
2281 As the file containing the pool definition may be executed in the 2137 As the file containing the pool definition may be executed in the
2282 context of more than one toolchain it is recommended to specify an 2138 context of more than one toolchain it is recommended to specify an
2283 explicit toolchain when defining and referencing a pool. 2139 explicit toolchain when defining and referencing a pool.
2284 2140
2285 A pool is referenced by its label just like a target. 2141 A pool is referenced by its label just like a target.
2286
2287 ``` 2142 ```
2288 2143
2289 #### **Variables** 2144 #### **Variables**
2290 2145
2291 ``` 2146 ```
2292 depth* 2147 depth*
2293 * = required 2148 * = required
2294
2295 ``` 2149 ```
2296 2150
2297 #### **Example** 2151 #### **Example**
2298 2152
2299 ``` 2153 ```
2300 if (current_toolchain == default_toolchain) { 2154 if (current_toolchain == default_toolchain) {
2301 pool("link_pool") { 2155 pool("link_pool") {
2302 depth = 1 2156 depth = 1
2303 } 2157 }
2304 } 2158 }
2305 2159
2306 toolchain("toolchain") { 2160 toolchain("toolchain") {
2307 tool("link") { 2161 tool("link") {
2308 command = "..." 2162 command = "..."
2309 pool = ":link_pool($default_toolchain)") 2163 pool = ":link_pool($default_toolchain)")
2310 } 2164 }
2311 } 2165 }
2312
2313
2314 ``` 2166 ```
2315 ### <a name="print"></a>**print**: Prints to the console. 2167 ### <a name="print"></a>**print**: Prints to the console.
2316 2168
2317 ``` 2169 ```
2318 Prints all arguments to the console separated by spaces. A newline is 2170 Prints all arguments to the console separated by spaces. A newline is
2319 automatically appended to the end. 2171 automatically appended to the end.
2320 2172
2321 This function is intended for debugging. Note that build files are run in 2173 This function is intended for debugging. Note that build files are run in
2322 parallel so you may get interleaved prints. A buildfile may also be executed 2174 parallel so you may get interleaved prints. A buildfile may also be executed
2323 more than once in parallel in the context of different toolchains so the 2175 more than once in parallel in the context of different toolchains so the
2324 prints from one file may be duplicated or 2176 prints from one file may be duplicated or
2325 interleaved with itself. 2177 interleaved with itself.
2326
2327 ``` 2178 ```
2328 2179
2329 #### **Examples** 2180 #### **Examples**
2330 2181
2331 ``` 2182 ```
2332 print("Hello world") 2183 print("Hello world")
2333 2184
2334 print(sources, deps) 2185 print(sources, deps)
2335
2336
2337 ``` 2186 ```
2338 ### <a name="process_file_template"></a>**process_file_template**: Do template e xpansion over a list of files. 2187 ### <a name="process_file_template"></a>**process_file_template**: Do template e xpansion over a list of files.
2339 2188
2340 ``` 2189 ```
2341 process_file_template(source_list, template) 2190 process_file_template(source_list, template)
2342 2191
2343 process_file_template applies a template list to a source file list, 2192 process_file_template applies a template list to a source file list,
2344 returning the result of applying each template to each source. This is 2193 returning the result of applying each template to each source. This is
2345 typically used for computing output file names from input files. 2194 typically used for computing output file names from input files.
2346 2195
2347 In most cases, get_target_outputs() will give the same result with shorter, 2196 In most cases, get_target_outputs() will give the same result with shorter,
2348 more maintainable code. This function should only be used when that function 2197 more maintainable code. This function should only be used when that function
2349 can't be used (like there's no target or the target is defined in another 2198 can't be used (like there's no target or the target is defined in another
2350 build file). 2199 build file).
2351
2352 ``` 2200 ```
2353 2201
2354 #### **Arguments** 2202 #### **Arguments**
2355 2203
2356 ``` 2204 ```
2357 The source_list is a list of file names. 2205 The source_list is a list of file names.
2358 2206
2359 The template can be a string or a list. If it is a list, multiple output 2207 The template can be a string or a list. If it is a list, multiple output
2360 strings are generated for each input. 2208 strings are generated for each input.
2361 2209
2362 The template should contain source expansions to which each name in the 2210 The template should contain source expansions to which each name in the
2363 source list is applied. See "gn help source_expansion". 2211 source list is applied. See "gn help source_expansion".
2364
2365 ``` 2212 ```
2366 2213
2367 #### **Example** 2214 #### **Example**
2368 2215
2369 ``` 2216 ```
2370 sources = [ 2217 sources = [
2371 "foo.idl", 2218 "foo.idl",
2372 "bar.idl", 2219 "bar.idl",
2373 ] 2220 ]
2374 myoutputs = process_file_template( 2221 myoutputs = process_file_template(
2375 sources, 2222 sources,
2376 [ "$target_gen_dir/{{source_name_part}}.cc", 2223 [ "$target_gen_dir/{{source_name_part}}.cc",
2377 "$target_gen_dir/{{source_name_part}}.h" ]) 2224 "$target_gen_dir/{{source_name_part}}.h" ])
2378 2225
2379 The result in this case will be: 2226 The result in this case will be:
2380 [ "//out/Debug/foo.cc" 2227 [ "//out/Debug/foo.cc"
2381 "//out/Debug/foo.h" 2228 "//out/Debug/foo.h"
2382 "//out/Debug/bar.cc" 2229 "//out/Debug/bar.cc"
2383 "//out/Debug/bar.h" ] 2230 "//out/Debug/bar.h" ]
2384
2385
2386 ``` 2231 ```
2387 ### <a name="read_file"></a>**read_file**: Read a file into a variable. 2232 ### <a name="read_file"></a>**read_file**: Read a file into a variable.
2388 2233
2389 ``` 2234 ```
2390 read_file(filename, input_conversion) 2235 read_file(filename, input_conversion)
2391 2236
2392 Whitespace will be trimmed from the end of the file. Throws an error if the 2237 Whitespace will be trimmed from the end of the file. Throws an error if the
2393 file can not be opened. 2238 file can not be opened.
2394
2395 ``` 2239 ```
2396 2240
2397 #### **Arguments** 2241 #### **Arguments**
2398 2242
2399 ``` 2243 ```
2400 filename 2244 filename
2401 Filename to read, relative to the build file. 2245 Filename to read, relative to the build file.
2402 2246
2403 input_conversion 2247 input_conversion
2404 Controls how the file is read and parsed. See "gn help input_conversion". 2248 Controls how the file is read and parsed. See "gn help input_conversion".
2405
2406 ``` 2249 ```
2407 2250
2408 #### **Example** 2251 #### **Example**
2409 2252
2410 ``` 2253 ```
2411 lines = read_file("foo.txt", "list lines") 2254 lines = read_file("foo.txt", "list lines")
2412
2413
2414 ``` 2255 ```
2415 ### <a name="rebase_path"></a>**rebase_path**: Rebase a file or directory to ano ther location. 2256 ### <a name="rebase_path"></a>**rebase_path**: Rebase a file or directory to ano ther location.
2416 2257
2417 ``` 2258 ```
2418 converted = rebase_path(input, 2259 converted = rebase_path(input,
2419 new_base = "", 2260 new_base = "",
2420 current_base = ".") 2261 current_base = ".")
2421 2262
2422 Takes a string argument representing a file name, or a list of such strings 2263 Takes a string argument representing a file name, or a list of such strings
2423 and converts it/them to be relative to a different base directory. 2264 and converts it/them to be relative to a different base directory.
2424 2265
2425 When invoking the compiler or scripts, GN will automatically convert sources 2266 When invoking the compiler or scripts, GN will automatically convert sources
2426 and include directories to be relative to the build directory. However, if 2267 and include directories to be relative to the build directory. However, if
2427 you're passing files directly in the "args" array or doing other manual 2268 you're passing files directly in the "args" array or doing other manual
2428 manipulations where GN doesn't know something is a file name, you will need 2269 manipulations where GN doesn't know something is a file name, you will need
2429 to convert paths to be relative to what your tool is expecting. 2270 to convert paths to be relative to what your tool is expecting.
2430 2271
2431 The common case is to use this to convert paths relative to the current 2272 The common case is to use this to convert paths relative to the current
2432 directory to be relative to the build directory (which will be the current 2273 directory to be relative to the build directory (which will be the current
2433 directory when executing scripts). 2274 directory when executing scripts).
2434 2275
2435 If you want to convert a file path to be source-absolute (that is, beginning 2276 If you want to convert a file path to be source-absolute (that is, beginning
2436 with a double slash like "//foo/bar"), you should use the get_path_info() 2277 with a double slash like "//foo/bar"), you should use the get_path_info()
2437 function. This function won't work because it will always make relative 2278 function. This function won't work because it will always make relative
2438 paths, and it needs to support making paths relative to the source root, so 2279 paths, and it needs to support making paths relative to the source root, so
2439 can't also generate source-absolute paths without more special-cases. 2280 can't also generate source-absolute paths without more special-cases.
2440
2441 ``` 2281 ```
2442 2282
2443 #### **Arguments** 2283 #### **Arguments**
2444 2284
2445 ``` 2285 ```
2446 input 2286 input
2447 A string or list of strings representing file or directory names These 2287 A string or list of strings representing file or directory names These
2448 can be relative paths ("foo/bar.txt"), system absolute paths 2288 can be relative paths ("foo/bar.txt"), system absolute paths
2449 ("/foo/bar.txt"), or source absolute paths ("//foo/bar.txt"). 2289 ("/foo/bar.txt"), or source absolute paths ("//foo/bar.txt").
2450 2290
2451 new_base 2291 new_base
2452 The directory to convert the paths to be relative to. This can be an 2292 The directory to convert the paths to be relative to. This can be an
2453 absolute path or a relative path (which will be treated as being relative 2293 absolute path or a relative path (which will be treated as being relative
2454 to the current BUILD-file's directory). 2294 to the current BUILD-file's directory).
2455 2295
2456 As a special case, if new_base is the empty string (the default), all 2296 As a special case, if new_base is the empty string (the default), all
2457 paths will be converted to system-absolute native style paths with system 2297 paths will be converted to system-absolute native style paths with system
2458 path separators. This is useful for invoking external programs. 2298 path separators. This is useful for invoking external programs.
2459 2299
2460 current_base 2300 current_base
2461 Directory representing the base for relative paths in the input. If this 2301 Directory representing the base for relative paths in the input. If this
2462 is not an absolute path, it will be treated as being relative to the 2302 is not an absolute path, it will be treated as being relative to the
2463 current build file. Use "." (the default) to convert paths from the 2303 current build file. Use "." (the default) to convert paths from the
2464 current BUILD-file's directory. 2304 current BUILD-file's directory.
2465
2466 ``` 2305 ```
2467 2306
2468 #### **Return value** 2307 #### **Return value**
2469 2308
2470 ``` 2309 ```
2471 The return value will be the same type as the input value (either a string or 2310 The return value will be the same type as the input value (either a string or
2472 a list of strings). All relative and source-absolute file names will be 2311 a list of strings). All relative and source-absolute file names will be
2473 converted to be relative to the requested output System-absolute paths will 2312 converted to be relative to the requested output System-absolute paths will
2474 be unchanged. 2313 be unchanged.
2475 2314
2476 Whether an output path will end in a slash will match whether the 2315 Whether an output path will end in a slash will match whether the
2477 corresponding input path ends in a slash. It will return "." or "./" 2316 corresponding input path ends in a slash. It will return "." or "./"
2478 (depending on whether the input ends in a slash) to avoid returning empty 2317 (depending on whether the input ends in a slash) to avoid returning empty
2479 strings. This means if you want a root path ("//" or "/") not ending in a 2318 strings. This means if you want a root path ("//" or "/") not ending in a
2480 slash, you can add a dot ("//."). 2319 slash, you can add a dot ("//.").
2481
2482 ``` 2320 ```
2483 2321
2484 #### **Example** 2322 #### **Example**
2485 2323
2486 ``` 2324 ```
2487 # Convert a file in the current directory to be relative to the build 2325 # Convert a file in the current directory to be relative to the build
2488 # directory (the current dir when executing compilers and scripts). 2326 # directory (the current dir when executing compilers and scripts).
2489 foo = rebase_path("myfile.txt", root_build_dir) 2327 foo = rebase_path("myfile.txt", root_build_dir)
2490 # might produce "../../project/myfile.txt". 2328 # might produce "../../project/myfile.txt".
2491 2329
(...skipping 11 matching lines...) Expand all
2503 2341
2504 # Extra file args passed manually need to be explicitly converted 2342 # Extra file args passed manually need to be explicitly converted
2505 # to be relative to the build directory: 2343 # to be relative to the build directory:
2506 args = [ 2344 args = [
2507 "--data", 2345 "--data",
2508 rebase_path("//mything/data/input.dat", root_build_dir), 2346 rebase_path("//mything/data/input.dat", root_build_dir),
2509 "--rel", 2347 "--rel",
2510 rebase_path("relative_path.txt", root_build_dir) 2348 rebase_path("relative_path.txt", root_build_dir)
2511 ] + rebase_path(sources, root_build_dir) 2349 ] + rebase_path(sources, root_build_dir)
2512 } 2350 }
2513
2514
2515 ``` 2351 ```
2516 ### <a name="set_default_toolchain"></a>**set_default_toolchain**: Sets the defa ult toolchain name. 2352 ### <a name="set_default_toolchain"></a>**set_default_toolchain**: Sets the defa ult toolchain name.
2517 2353
2518 ``` 2354 ```
2519 set_default_toolchain(toolchain_label) 2355 set_default_toolchain(toolchain_label)
2520 2356
2521 The given label should identify a toolchain definition (see "gn help 2357 The given label should identify a toolchain definition (see "gn help
2522 toolchain"). This toolchain will be used for all targets unless otherwise 2358 toolchain"). This toolchain will be used for all targets unless otherwise
2523 specified. 2359 specified.
2524 2360
2525 This function is only valid to call during the processing of the build 2361 This function is only valid to call during the processing of the build
2526 configuration file. Since the build configuration file is processed 2362 configuration file. Since the build configuration file is processed
2527 separately for each toolchain, this function will be a no-op when called 2363 separately for each toolchain, this function will be a no-op when called
2528 under any non-default toolchains. 2364 under any non-default toolchains.
2529 2365
2530 For example, the default toolchain should be appropriate for the current 2366 For example, the default toolchain should be appropriate for the current
2531 environment. If the current environment is 32-bit and somebody references a 2367 environment. If the current environment is 32-bit and somebody references a
2532 target with a 64-bit toolchain, we wouldn't want processing of the build 2368 target with a 64-bit toolchain, we wouldn't want processing of the build
2533 config file for the 64-bit toolchain to reset the default toolchain to 2369 config file for the 64-bit toolchain to reset the default toolchain to
2534 64-bit, we want to keep it 32-bits. 2370 64-bit, we want to keep it 32-bits.
2535
2536 ``` 2371 ```
2537 2372
2538 #### **Argument** 2373 #### **Argument**
2539 2374
2540 ``` 2375 ```
2541 toolchain_label 2376 toolchain_label
2542 Toolchain name. 2377 Toolchain name.
2543
2544 ``` 2378 ```
2545 2379
2546 #### **Example** 2380 #### **Example**
2547 2381
2548 ``` 2382 ```
2549 # Set default toolchain only has an effect when run in the context of the 2383 # Set default toolchain only has an effect when run in the context of the
2550 # default toolchain. Pick the right one according to the current CPU 2384 # default toolchain. Pick the right one according to the current CPU
2551 # architecture. 2385 # architecture.
2552 if (target_cpu == "x64") { 2386 if (target_cpu == "x64") {
2553 set_default_toolchain("//toolchains:64") 2387 set_default_toolchain("//toolchains:64")
2554 } else if (target_cpu == "x86") { 2388 } else if (target_cpu == "x86") {
2555 set_default_toolchain("//toolchains:32") 2389 set_default_toolchain("//toolchains:32")
2556 } 2390 }
2557
2558
2559 ``` 2391 ```
2560 ### <a name="set_defaults"></a>**set_defaults**: Set default values for a target type. 2392 ### <a name="set_defaults"></a>**set_defaults**: Set default values for a target type.
2561 2393
2562 ``` 2394 ```
2563 set_defaults(<target_type_name>) { <values...> } 2395 set_defaults(<target_type_name>) { <values...> }
2564 2396
2565 Sets the default values for a given target type. Whenever target_type_name is 2397 Sets the default values for a given target type. Whenever target_type_name is
2566 seen in the future, the values specified in set_default's block will be 2398 seen in the future, the values specified in set_default's block will be
2567 copied into the current scope. 2399 copied into the current scope.
2568 2400
2569 When the target type is used, the variable copying is very strict. If a 2401 When the target type is used, the variable copying is very strict. If a
2570 variable with that name is already in scope, the build will fail with an 2402 variable with that name is already in scope, the build will fail with an
2571 error. 2403 error.
2572 2404
2573 set_defaults can be used for built-in target types ("executable", 2405 set_defaults can be used for built-in target types ("executable",
2574 "shared_library", etc.) and custom ones defined via the "template" command. 2406 "shared_library", etc.) and custom ones defined via the "template" command.
2575 It can be called more than once and the most recent call in any scope will 2407 It can be called more than once and the most recent call in any scope will
2576 apply, but there is no way to refer to the previous defaults and modify them 2408 apply, but there is no way to refer to the previous defaults and modify them
2577 (each call to set_defaults must supply a complete list of all defaults it 2409 (each call to set_defaults must supply a complete list of all defaults it
2578 wants). If you want to share defaults, store them in a separate variable. 2410 wants). If you want to share defaults, store them in a separate variable.
2579
2580 ``` 2411 ```
2581 2412
2582 #### **Example** 2413 #### **Example**
2583 2414
2584 ``` 2415 ```
2585 set_defaults("static_library") { 2416 set_defaults("static_library") {
2586 configs = [ "//tools/mything:settings" ] 2417 configs = [ "//tools/mything:settings" ]
2587 } 2418 }
2588 2419
2589 static_library("mylib") 2420 static_library("mylib")
2590 # The configs will be auto-populated as above. You can remove it if 2421 # The configs will be auto-populated as above. You can remove it if
2591 # you don't want the default for a particular default: 2422 # you don't want the default for a particular default:
2592 configs -= [ "//tools/mything:settings" ] 2423 configs -= [ "//tools/mything:settings" ]
2593 } 2424 }
2594
2595
2596 ``` 2425 ```
2597 ### <a name="set_sources_assignment_filter"></a>**set_sources_assignment_filter* *: Set a pattern to filter source files. 2426 ### <a name="set_sources_assignment_filter"></a>**set_sources_assignment_filter* *: Set a pattern to filter source files.
2598 2427
2599 ``` 2428 ```
2600 The sources assignment filter is a list of patterns that remove files from 2429 The sources assignment filter is a list of patterns that remove files from
2601 the list implicitly whenever the "sources" variable is assigned to. This will 2430 the list implicitly whenever the "sources" variable is assigned to. This will
2602 do nothing for non-lists. 2431 do nothing for non-lists.
2603 2432
2604 This is intended to be used to globally filter out files with 2433 This is intended to be used to globally filter out files with
2605 platform-specific naming schemes when they don't apply, for example you may 2434 platform-specific naming schemes when they don't apply, for example you may
2606 want to filter out all "*_win.cc" files on non-Windows platforms. 2435 want to filter out all "*_win.cc" files on non-Windows platforms.
2607 2436
2608 Typically this will be called once in the master build config script to set 2437 Typically this will be called once in the master build config script to set
2609 up the filter for the current platform. Subsequent calls will overwrite the 2438 up the filter for the current platform. Subsequent calls will overwrite the
2610 previous values. 2439 previous values.
2611 2440
2612 If you want to bypass the filter and add a file even if it might be filtered 2441 If you want to bypass the filter and add a file even if it might be filtered
2613 out, call set_sources_assignment_filter([]) to clear the list of filters. 2442 out, call set_sources_assignment_filter([]) to clear the list of filters.
2614 This will apply until the current scope exits 2443 This will apply until the current scope exits
2615
2616 ``` 2444 ```
2617 2445
2618 #### **How to use patterns** 2446 #### **How to use patterns**
2619 2447
2620 ``` 2448 ```
2621 File patterns are VERY limited regular expressions. They must match the 2449 File patterns are VERY limited regular expressions. They must match the
2622 entire input string to be counted as a match. In regular expression parlance, 2450 entire input string to be counted as a match. In regular expression parlance,
2623 there is an implicit "^...$" surrounding your input. If you want to match a 2451 there is an implicit "^...$" surrounding your input. If you want to match a
2624 substring, you need to use wildcards at the beginning and end. 2452 substring, you need to use wildcards at the beginning and end.
2625 2453
2626 There are only two special tokens understood by the pattern matcher. 2454 There are only two special tokens understood by the pattern matcher.
2627 Everything else is a literal. 2455 Everything else is a literal.
2628 2456
2629 - "*" Matches zero or more of any character. It does not depend on the 2457 - "*" Matches zero or more of any character. It does not depend on the
2630 preceding character (in regular expression parlance it is equivalent to 2458 preceding character (in regular expression parlance it is equivalent to
2631 ".*"). 2459 ".*").
2632 2460
2633 - "\b" Matches a path boundary. This will match the beginning or end of a 2461 - "\b" Matches a path boundary. This will match the beginning or end of a
2634 string, or a slash. 2462 string, or a slash.
2635
2636 ``` 2463 ```
2637 2464
2638 #### **Pattern examples** 2465 #### **Pattern examples**
2639 2466
2640 ``` 2467 ```
2641 "*asdf*" 2468 "*asdf*"
2642 Matches a string containing "asdf" anywhere. 2469 Matches a string containing "asdf" anywhere.
2643 2470
2644 "asdf" 2471 "asdf"
2645 Matches only the exact string "asdf". 2472 Matches only the exact string "asdf".
2646 2473
2647 "*.cc" 2474 "*.cc"
2648 Matches strings ending in the literal ".cc". 2475 Matches strings ending in the literal ".cc".
2649 2476
2650 "\bwin/*" 2477 "\bwin/*"
2651 Matches "win/foo" and "foo/win/bar.cc" but not "iwin/foo". 2478 Matches "win/foo" and "foo/win/bar.cc" but not "iwin/foo".
2652
2653 ``` 2479 ```
2654 2480
2655 #### **Sources assignment example** 2481 #### **Sources assignment example**
2656 2482
2657 ``` 2483 ```
2658 # Filter out all _win files. 2484 # Filter out all _win files.
2659 set_sources_assignment_filter([ "*_win.cc", "*_win.h" ]) 2485 set_sources_assignment_filter([ "*_win.cc", "*_win.h" ])
2660 sources = [ "a.cc", "b_win.cc" ] 2486 sources = [ "a.cc", "b_win.cc" ]
2661 print(sources) 2487 print(sources)
2662 # Will print [ "a.cc" ]. b_win one was filtered out. 2488 # Will print [ "a.cc" ]. b_win one was filtered out.
2663
2664
2665 ``` 2489 ```
2666 ### <a name="split_list"></a>**split_list**: Splits a list into N different sub- lists. 2490 ### <a name="split_list"></a>**split_list**: Splits a list into N different sub- lists.
2667 2491
2668 ``` 2492 ```
2669 result = split_list(input, n) 2493 result = split_list(input, n)
2670 2494
2671 Given a list and a number N, splits the list into N sub-lists of 2495 Given a list and a number N, splits the list into N sub-lists of
2672 approximately equal size. The return value is a list of the sub-lists. The 2496 approximately equal size. The return value is a list of the sub-lists. The
2673 result will always be a list of size N. If N is greater than the number of 2497 result will always be a list of size N. If N is greater than the number of
2674 elements in the input, it will be padded with empty lists. 2498 elements in the input, it will be padded with empty lists.
2675 2499
2676 The expected use is to divide source files into smaller uniform chunks. 2500 The expected use is to divide source files into smaller uniform chunks.
2677
2678 ``` 2501 ```
2679 2502
2680 #### **Example** 2503 #### **Example**
2681 2504
2682 ``` 2505 ```
2683 The code: 2506 The code:
2684 mylist = [1, 2, 3, 4, 5, 6] 2507 mylist = [1, 2, 3, 4, 5, 6]
2685 print(split_list(mylist, 3)) 2508 print(split_list(mylist, 3))
2686 2509
2687 Will print: 2510 Will print:
2688 [[1, 2], [3, 4], [5, 6] 2511 [[1, 2], [3, 4], [5, 6]
2689
2690
2691 ``` 2512 ```
2692 ### <a name="template"></a>**template**: Define a template rule. 2513 ### <a name="template"></a>**template**: Define a template rule.
2693 2514
2694 ``` 2515 ```
2695 A template defines a custom name that acts like a function. It provides a way 2516 A template defines a custom name that acts like a function. It provides a way
2696 to add to the built-in target types. 2517 to add to the built-in target types.
2697 2518
2698 The template() function is used to declare a template. To invoke the 2519 The template() function is used to declare a template. To invoke the
2699 template, just use the name of the template like any other target type. 2520 template, just use the name of the template like any other target type.
2700 2521
2701 Often you will want to declare your template in a special file that other 2522 Often you will want to declare your template in a special file that other
2702 files will import (see "gn help import") so your template rule can be shared 2523 files will import (see "gn help import") so your template rule can be shared
2703 across build files. 2524 across build files.
2704
2705 ``` 2525 ```
2706 2526
2707 #### **Variables and templates**: 2527 #### **Variables and templates**:
2708 2528
2709 ``` 2529 ```
2710 When you call template() it creates a closure around all variables currently 2530 When you call template() it creates a closure around all variables currently
2711 in scope with the code in the template block. When the template is invoked, 2531 in scope with the code in the template block. When the template is invoked,
2712 the closure will be executed. 2532 the closure will be executed.
2713 2533
2714 When the template is invoked, the code in the caller is executed and passed 2534 When the template is invoked, the code in the caller is executed and passed
(...skipping 11 matching lines...) Expand all
2726 Use the pattern: 2546 Use the pattern:
2727 2547
2728 if (defined(invoker.deps)) { 2548 if (defined(invoker.deps)) {
2729 deps = invoker.deps 2549 deps = invoker.deps
2730 } 2550 }
2731 2551
2732 The function forward_variables_from() provides a shortcut to forward one or 2552 The function forward_variables_from() provides a shortcut to forward one or
2733 more or possibly all variables in this manner: 2553 more or possibly all variables in this manner:
2734 2554
2735 forward_variables_from(invoker, ["deps", "public_deps"]) 2555 forward_variables_from(invoker, ["deps", "public_deps"])
2736
2737 ``` 2556 ```
2738 2557
2739 #### **Target naming** 2558 #### **Target naming**
2740 2559
2741 ``` 2560 ```
2742 Your template should almost always define a built-in target with the name the 2561 Your template should almost always define a built-in target with the name the
2743 template invoker specified. For example, if you have an IDL template and 2562 template invoker specified. For example, if you have an IDL template and
2744 somebody does: 2563 somebody does:
2745 idl("foo") {... 2564 idl("foo") {...
2746 you will normally want this to expand to something defining a source_set or 2565 you will normally want this to expand to something defining a source_set or
2747 static_library named "foo" (among other things you may need). This way, when 2566 static_library named "foo" (among other things you may need). This way, when
2748 another target specifies a dependency on "foo", the static_library or 2567 another target specifies a dependency on "foo", the static_library or
2749 source_set will be linked. 2568 source_set will be linked.
2750 2569
2751 It is also important that any other targets your template expands to have 2570 It is also important that any other targets your template expands to have
2752 unique names, or you will get collisions. 2571 unique names, or you will get collisions.
2753 2572
2754 Access the invoking name in your template via the implicit "target_name" 2573 Access the invoking name in your template via the implicit "target_name"
2755 variable. This should also be the basis for how other targets that a template 2574 variable. This should also be the basis for how other targets that a template
2756 expands to ensure uniqueness. 2575 expands to ensure uniqueness.
2757 2576
2758 A typical example would be a template that defines an action to generate some 2577 A typical example would be a template that defines an action to generate some
2759 source files, and a source_set to compile that source. Your template would 2578 source files, and a source_set to compile that source. Your template would
2760 name the source_set "target_name" because that's what you want external 2579 name the source_set "target_name" because that's what you want external
2761 targets to depend on to link your code. And you would name the action 2580 targets to depend on to link your code. And you would name the action
2762 something like "${target_name}_action" to make it unique. The source set 2581 something like "${target_name}_action" to make it unique. The source set
2763 would have a dependency on the action to make it run. 2582 would have a dependency on the action to make it run.
2764
2765 ``` 2583 ```
2766 2584
2767 #### **Example of defining a template** 2585 #### **Example of defining a template**
2768 2586
2769 ``` 2587 ```
2770 template("my_idl") { 2588 template("my_idl") {
2771 # Be nice and help callers debug problems by checking that the variables 2589 # Be nice and help callers debug problems by checking that the variables
2772 # the template requires are defined. This gives a nice message rather than 2590 # the template requires are defined. This gives a nice message rather than
2773 # giving the user an error about an undefined variable in the file defining 2591 # giving the user an error about an undefined variable in the file defining
2774 # the template 2592 # the template
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2810 # deps. 2628 # deps.
2811 source_set(target_name) { 2629 source_set(target_name) {
2812 # Generates the list of sources, we get these from the action_foreach 2630 # Generates the list of sources, we get these from the action_foreach
2813 # above. 2631 # above.
2814 sources = get_target_outputs(":$code_gen_target_name") 2632 sources = get_target_outputs(":$code_gen_target_name")
2815 2633
2816 # This target depends on the files produced by the above code gen target. 2634 # This target depends on the files produced by the above code gen target.
2817 deps = [ ":$code_gen_target_name" ] 2635 deps = [ ":$code_gen_target_name" ]
2818 } 2636 }
2819 } 2637 }
2820
2821 ``` 2638 ```
2822 2639
2823 #### **Example of invoking the resulting template** 2640 #### **Example of invoking the resulting template**
2824 2641
2825 ``` 2642 ```
2826 # This calls the template code above, defining target_name to be 2643 # This calls the template code above, defining target_name to be
2827 # "foo_idl_files" and "invoker" to be the set of stuff defined in the curly 2644 # "foo_idl_files" and "invoker" to be the set of stuff defined in the curly
2828 # brackets. 2645 # brackets.
2829 my_idl("foo_idl_files") { 2646 my_idl("foo_idl_files") {
2830 # Goes into the template as "invoker.sources". 2647 # Goes into the template as "invoker.sources".
2831 sources = [ "foo.idl", "bar.idl" ] 2648 sources = [ "foo.idl", "bar.idl" ]
2832 } 2649 }
2833 2650
2834 # Here is a target that depends on our template. 2651 # Here is a target that depends on our template.
2835 executable("my_exe") { 2652 executable("my_exe") {
2836 # Depend on the name we gave the template call above. Internally, this will 2653 # Depend on the name we gave the template call above. Internally, this will
2837 # produce a dependency from executable to the source_set inside the 2654 # produce a dependency from executable to the source_set inside the
2838 # template (since it has this name), which will in turn depend on the code 2655 # template (since it has this name), which will in turn depend on the code
2839 # gen action. 2656 # gen action.
2840 deps = [ ":foo_idl_files" ] 2657 deps = [ ":foo_idl_files" ]
2841 } 2658 }
2842
2843
2844 ``` 2659 ```
2845 ### <a name="tool"></a>**tool**: Specify arguments to a toolchain tool. 2660 ### <a name="tool"></a>**tool**: Specify arguments to a toolchain tool.
2846 2661
2847 #### **Usage** 2662 #### **Usage**
2848 2663
2849 ``` 2664 ```
2850 tool(<tool type>) { 2665 tool(<tool type>) {
2851 <tool variables...> 2666 <tool variables...>
2852 } 2667 }
2853
2854 ``` 2668 ```
2855 2669
2856 #### **Tool types** 2670 #### **Tool types**
2857 2671
2858 ``` 2672 ```
2859 Compiler tools: 2673 Compiler tools:
2860 "cc": C compiler 2674 "cc": C compiler
2861 "cxx": C++ compiler 2675 "cxx": C++ compiler
2862 "objc": Objective C compiler 2676 "objc": Objective C compiler
2863 "objcxx": Objective C++ compiler 2677 "objcxx": Objective C++ compiler
2864 "rc": Resource compiler (Windows .rc files) 2678 "rc": Resource compiler (Windows .rc files)
2865 "asm": Assembler 2679 "asm": Assembler
2866 2680
2867 Linker tools: 2681 Linker tools:
2868 "alink": Linker for static libraries (archives) 2682 "alink": Linker for static libraries (archives)
2869 "solink": Linker for shared libraries 2683 "solink": Linker for shared libraries
2870 "link": Linker for executables 2684 "link": Linker for executables
2871 2685
2872 Other tools: 2686 Other tools:
2873 "stamp": Tool for creating stamp files 2687 "stamp": Tool for creating stamp files
2874 "copy": Tool to copy files. 2688 "copy": Tool to copy files.
2875 2689
2876 Platform specific tools: 2690 Platform specific tools:
2877 "copy_bundle_data": [iOS, OS X] Tool to copy files in a bundle. 2691 "copy_bundle_data": [iOS, OS X] Tool to copy files in a bundle.
2878 "compile_xcassets": [iOS, OS X] Tool to compile asset catalogs. 2692 "compile_xcassets": [iOS, OS X] Tool to compile asset catalogs.
2879
2880 ``` 2693 ```
2881 2694
2882 #### **Tool variables** 2695 #### **Tool variables**
2883 2696
2884 ``` 2697 ```
2885 command [string with substitutions] 2698 command [string with substitutions]
2886 Valid for: all tools (required) 2699 Valid for: all tools (required)
2887 2700
2888 The command to run. 2701 The command to run.
2889 2702
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
3072 rspfile = "{{output}}.rsp" 2885 rspfile = "{{output}}.rsp"
3073 rspfile_content = "{{inputs}} {{solibs}} {{libs}}" 2886 rspfile_content = "{{inputs}} {{solibs}} {{libs}}"
3074 } 2887 }
3075 2888
3076 runtime_outputs [string list with substitutions] 2889 runtime_outputs [string list with substitutions]
3077 Valid for: linker tools 2890 Valid for: linker tools
3078 2891
3079 If specified, this list is the subset of the outputs that should be 2892 If specified, this list is the subset of the outputs that should be
3080 added to runtime deps (see "gn help runtime_deps"). By default (if 2893 added to runtime deps (see "gn help runtime_deps"). By default (if
3081 runtime_outputs is empty or unspecified), it will be the link_output. 2894 runtime_outputs is empty or unspecified), it will be the link_output.
3082
3083 ``` 2895 ```
3084 2896
3085 #### **Expansions for tool variables** 2897 #### **Expansions for tool variables**
3086 2898
3087 ``` 2899 ```
3088 All paths are relative to the root build directory, which is the current 2900 All paths are relative to the root build directory, which is the current
3089 directory for running all tools. These expansions are available to all tools: 2901 directory for running all tools. These expansions are available to all tools:
3090 2902
3091 {{label}} 2903 {{label}}
3092 The label of the current target. This is typically used in the 2904 The label of the current target. This is typically used in the
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
3241 substitutions are avaiable: 3053 substitutions are avaiable:
3242 3054
3243 {{inputs}} 3055 {{inputs}}
3244 Expands to the list of .xcassets to use as input to compile the asset 3056 Expands to the list of .xcassets to use as input to compile the asset
3245 catalog. 3057 catalog.
3246 3058
3247 {{bundle_product_type}} 3059 {{bundle_product_type}}
3248 Expands to the product_type of the bundle that will contain the 3060 Expands to the product_type of the bundle that will contain the
3249 compiled asset catalog. Usually corresponds to the product_type 3061 compiled asset catalog. Usually corresponds to the product_type
3250 property of the corresponding create_bundle target. 3062 property of the corresponding create_bundle target.
3251
3252 ``` 3063 ```
3253 3064
3254 #### **Separate linking and dependencies for shared libraries** 3065 #### **Separate linking and dependencies for shared libraries**
3255 3066
3256 ``` 3067 ```
3257 Shared libraries are special in that not all changes to them require that 3068 Shared libraries are special in that not all changes to them require that
3258 dependent targets be re-linked. If the shared library is changed but no 3069 dependent targets be re-linked. If the shared library is changed but no
3259 imports or exports are different, dependent code needn't be relinked, which 3070 imports or exports are different, dependent code needn't be relinked, which
3260 can speed up the build. 3071 can speed up the build.
3261 3072
(...skipping 15 matching lines...) Expand all
3277 "{{output_dir}}/{{target_output_name}}" 3088 "{{output_dir}}/{{target_output_name}}"
3278 "{{output_extension}}.TOC", 3089 "{{output_extension}}.TOC",
3279 ] 3090 ]
3280 link_output = 3091 link_output =
3281 "{{output_dir}}/{{target_output_name}}{{output_extension}}" 3092 "{{output_dir}}/{{target_output_name}}{{output_extension}}"
3282 depend_output = 3093 depend_output =
3283 "{{output_dir}}/{{target_output_name}}" 3094 "{{output_dir}}/{{target_output_name}}"
3284 "{{output_extension}}.TOC" 3095 "{{output_extension}}.TOC"
3285 restat = true 3096 restat = true
3286 } 3097 }
3287
3288 ``` 3098 ```
3289 3099
3290 #### **Example** 3100 #### **Example**
3291 3101
3292 ``` 3102 ```
3293 toolchain("my_toolchain") { 3103 toolchain("my_toolchain") {
3294 # Put these at the top to apply to all tools below. 3104 # Put these at the top to apply to all tools below.
3295 lib_prefix = "-l" 3105 lib_prefix = "-l"
3296 lib_dir_prefix = "-L" 3106 lib_dir_prefix = "-L"
3297 3107
3298 tool("cc") { 3108 tool("cc") {
3299 command = "gcc {{source}} -o {{output}}" 3109 command = "gcc {{source}} -o {{output}}"
3300 outputs = [ "{{source_out_dir}}/{{source_name_part}}.o" ] 3110 outputs = [ "{{source_out_dir}}/{{source_name_part}}.o" ]
3301 description = "GCC {{source}}" 3111 description = "GCC {{source}}"
3302 } 3112 }
3303 tool("cxx") { 3113 tool("cxx") {
3304 command = "g++ {{source}} -o {{output}}" 3114 command = "g++ {{source}} -o {{output}}"
3305 outputs = [ "{{source_out_dir}}/{{source_name_part}}.o" ] 3115 outputs = [ "{{source_out_dir}}/{{source_name_part}}.o" ]
3306 description = "G++ {{source}}" 3116 description = "G++ {{source}}"
3307 } 3117 }
3308 }; 3118 };
3309
3310
3311 ``` 3119 ```
3312 ### <a name="toolchain"></a>**toolchain**: Defines a toolchain. 3120 ### <a name="toolchain"></a>**toolchain**: Defines a toolchain.
3313 3121
3314 ``` 3122 ```
3315 A toolchain is a set of commands and build flags used to compile the source 3123 A toolchain is a set of commands and build flags used to compile the source
3316 code. The toolchain() function defines these commands. 3124 code. The toolchain() function defines these commands.
3317
3318 ``` 3125 ```
3319 3126
3320 #### **Toolchain overview** 3127 #### **Toolchain overview**
3321 3128
3322 ``` 3129 ```
3323 You can have more than one toolchain in use at once in a build and a target 3130 You can have more than one toolchain in use at once in a build and a target
3324 can exist simultaneously in multiple toolchains. A build file is executed 3131 can exist simultaneously in multiple toolchains. A build file is executed
3325 once for each toolchain it is referenced in so the GN code can vary all 3132 once for each toolchain it is referenced in so the GN code can vary all
3326 parameters of each target (or which targets exist) on a per-toolchain basis. 3133 parameters of each target (or which targets exist) on a per-toolchain basis.
3327 3134
(...skipping 19 matching lines...) Expand all
3347 3. Loads the destination build file in the context of the configuration file 3154 3. Loads the destination build file in the context of the configuration file
3348 in the previous step. 3155 in the previous step.
3349 3156
3350 The toolchain configuration is two-way. In the default toolchain (i.e. the 3157 The toolchain configuration is two-way. In the default toolchain (i.e. the
3351 main build target) the configuration flows from the build config file to the 3158 main build target) the configuration flows from the build config file to the
3352 toolchain. The build config file looks at the state of the build (OS type, 3159 toolchain. The build config file looks at the state of the build (OS type,
3353 CPU architecture, etc.) and decides which toolchain to use (via 3160 CPU architecture, etc.) and decides which toolchain to use (via
3354 set_default_toolchain()). In secondary toolchains, the configuration flows 3161 set_default_toolchain()). In secondary toolchains, the configuration flows
3355 from the toolchain to the build config file: the "toolchain_args" in the 3162 from the toolchain to the build config file: the "toolchain_args" in the
3356 toolchain definition specifies the arguments to re-invoke the build. 3163 toolchain definition specifies the arguments to re-invoke the build.
3357
3358 ``` 3164 ```
3359 3165
3360 #### **Functions and variables** 3166 #### **Functions and variables**
3361 3167
3362 ``` 3168 ```
3363 tool() 3169 tool()
3364 The tool() function call specifies the commands commands to run for a given 3170 The tool() function call specifies the commands commands to run for a given
3365 step. See "gn help tool". 3171 step. See "gn help tool".
3366 3172
3367 toolchain_args 3173 toolchain_args
(...skipping 19 matching lines...) Expand all
3387 Dependencies of this toolchain. These dependencies will be resolved before 3193 Dependencies of this toolchain. These dependencies will be resolved before
3388 any target in the toolchain is compiled. To avoid circular dependencies 3194 any target in the toolchain is compiled. To avoid circular dependencies
3389 these must be targets defined in another toolchain. 3195 these must be targets defined in another toolchain.
3390 3196
3391 This is expressed as a list of targets, and generally these targets will 3197 This is expressed as a list of targets, and generally these targets will
3392 always specify a toolchain: 3198 always specify a toolchain:
3393 deps = [ "//foo/bar:baz(//build/toolchain:bootstrap)" ] 3199 deps = [ "//foo/bar:baz(//build/toolchain:bootstrap)" ]
3394 3200
3395 This concept is somewhat inefficient to express in Ninja (it requires a lot 3201 This concept is somewhat inefficient to express in Ninja (it requires a lot
3396 of duplicate of rules) so should only be used when absolutely necessary. 3202 of duplicate of rules) so should only be used when absolutely necessary.
3397
3398 ``` 3203 ```
3399 3204
3400 #### **Example of defining a toolchain** 3205 #### **Example of defining a toolchain**
3401 3206
3402 ``` 3207 ```
3403 toolchain("32") { 3208 toolchain("32") {
3404 tool("cc") { 3209 tool("cc") {
3405 command = "gcc {{source}}" 3210 command = "gcc {{source}}"
3406 ... 3211 ...
3407 } 3212 }
3408 3213
3409 toolchain_args = { 3214 toolchain_args = {
3410 use_doom_melon = true # Doom melon always required for 32-bit builds. 3215 use_doom_melon = true # Doom melon always required for 32-bit builds.
3411 current_cpu = "x86" 3216 current_cpu = "x86"
3412 } 3217 }
3413 } 3218 }
3414 3219
3415 toolchain("64") { 3220 toolchain("64") {
3416 tool("cc") { 3221 tool("cc") {
3417 command = "gcc {{source}}" 3222 command = "gcc {{source}}"
3418 ... 3223 ...
3419 } 3224 }
3420 3225
3421 toolchain_args = { 3226 toolchain_args = {
3422 # use_doom_melon is not overridden here, it will take the default. 3227 # use_doom_melon is not overridden here, it will take the default.
3423 current_cpu = "x64" 3228 current_cpu = "x64"
3424 } 3229 }
3425 } 3230 }
3426
3427 ``` 3231 ```
3428 3232
3429 #### **Example of cross-toolchain dependencies** 3233 #### **Example of cross-toolchain dependencies**
3430 3234
3431 ``` 3235 ```
3432 If a 64-bit target wants to depend on a 32-bit binary, it would specify a 3236 If a 64-bit target wants to depend on a 32-bit binary, it would specify a
3433 dependency using data_deps (data deps are like deps that are only needed at 3237 dependency using data_deps (data deps are like deps that are only needed at
3434 runtime and aren't linked, since you can't link a 32-bit and a 64-bit 3238 runtime and aren't linked, since you can't link a 32-bit and a 64-bit
3435 library). 3239 library).
3436 3240
3437 executable("my_program") { 3241 executable("my_program") {
3438 ... 3242 ...
3439 if (target_cpu == "x64") { 3243 if (target_cpu == "x64") {
3440 # The 64-bit build needs this 32-bit helper. 3244 # The 64-bit build needs this 32-bit helper.
3441 data_deps = [ ":helper(//toolchains:32)" ] 3245 data_deps = [ ":helper(//toolchains:32)" ]
3442 } 3246 }
3443 } 3247 }
3444 3248
3445 if (target_cpu == "x86") { 3249 if (target_cpu == "x86") {
3446 # Our helper library is only compiled in 32-bits. 3250 # Our helper library is only compiled in 32-bits.
3447 shared_library("helper") { 3251 shared_library("helper") {
3448 ... 3252 ...
3449 } 3253 }
3450 } 3254 }
3451
3452
3453 ``` 3255 ```
3454 ### <a name="write_file"></a>**write_file**: Write a file to disk. 3256 ### <a name="write_file"></a>**write_file**: Write a file to disk.
3455 3257
3456 ``` 3258 ```
3457 write_file(filename, data) 3259 write_file(filename, data)
3458 3260
3459 If data is a list, the list will be written one-item-per-line with no quoting 3261 If data is a list, the list will be written one-item-per-line with no quoting
3460 or brackets. 3262 or brackets.
3461 3263
3462 If the file exists and the contents are identical to that being written, the 3264 If the file exists and the contents are identical to that being written, the
3463 file will not be updated. This will prevent unnecessary rebuilds of targets 3265 file will not be updated. This will prevent unnecessary rebuilds of targets
3464 that depend on this file. 3266 that depend on this file.
3465 3267
3466 One use for write_file is to write a list of inputs to an script that might 3268 One use for write_file is to write a list of inputs to an script that might
3467 be too long for the command line. However, it is preferrable to use response 3269 be too long for the command line. However, it is preferrable to use response
3468 files for this purpose. See "gn help response_file_contents". 3270 files for this purpose. See "gn help response_file_contents".
3469 3271
3470 TODO(brettw) we probably need an optional third argument to control list 3272 TODO(brettw) we probably need an optional third argument to control list
3471 formatting. 3273 formatting.
3472
3473 ``` 3274 ```
3474 3275
3475 #### **Arguments** 3276 #### **Arguments**
3476 3277
3477 ``` 3278 ```
3478 filename 3279 filename
3479 Filename to write. This must be within the output directory. 3280 Filename to write. This must be within the output directory.
3480 3281
3481 data 3282 data
3482 The list or string to write. 3283 The list or string to write.
3483
3484
3485 ``` 3284 ```
3486 ## <a name="predefined_variables"></a>Built-in predefined variables 3285 ## <a name="predefined_variables"></a>Built-in predefined variables
3487 3286
3488 ### <a name="current_cpu"></a>**current_cpu**: The processor architecture of the current toolchain. 3287 ### <a name="current_cpu"></a>**current_cpu**: The processor architecture of the current toolchain.
3489 3288
3490 ``` 3289 ```
3491 The build configuration usually sets this value based on the value of 3290 The build configuration usually sets this value based on the value of
3492 "host_cpu" (see "gn help host_cpu") and then threads this through the 3291 "host_cpu" (see "gn help host_cpu") and then threads this through the
3493 toolchain definitions to ensure that it always reflects the appropriate 3292 toolchain definitions to ensure that it always reflects the appropriate
3494 value. 3293 value.
3495 3294
3496 This value is not used internally by GN for any purpose. It is set it to the 3295 This value is not used internally by GN for any purpose. It is set it to the
3497 empty string ("") by default but is declared so that it can be overridden on 3296 empty string ("") by default but is declared so that it can be overridden on
3498 the command line if so desired. 3297 the command line if so desired.
3499 3298
3500 See "gn help target_cpu" for a list of common values returned. 3299 See "gn help target_cpu" for a list of common values returned.
3501
3502 ``` 3300 ```
3503 ### <a name="current_os"></a>**current_os**: The operating system of the current toolchain. 3301 ### <a name="current_os"></a>**current_os**: The operating system of the current toolchain.
3504 3302
3505 ``` 3303 ```
3506 The build configuration usually sets this value based on the value of 3304 The build configuration usually sets this value based on the value of
3507 "target_os" (see "gn help target_os"), and then threads this through the 3305 "target_os" (see "gn help target_os"), and then threads this through the
3508 toolchain definitions to ensure that it always reflects the appropriate 3306 toolchain definitions to ensure that it always reflects the appropriate
3509 value. 3307 value.
3510 3308
3511 This value is not used internally by GN for any purpose. It is set it to the 3309 This value is not used internally by GN for any purpose. It is set it to the
3512 empty string ("") by default but is declared so that it can be overridden on 3310 empty string ("") by default but is declared so that it can be overridden on
3513 the command line if so desired. 3311 the command line if so desired.
3514 3312
3515 See "gn help target_os" for a list of common values returned. 3313 See "gn help target_os" for a list of common values returned.
3516
3517
3518 ``` 3314 ```
3519 ### <a name="current_toolchain"></a>**current_toolchain**: Label of the current toolchain. 3315 ### <a name="current_toolchain"></a>**current_toolchain**: Label of the current toolchain.
3520 3316
3521 ``` 3317 ```
3522 A fully-qualified label representing the current toolchain. You can use this 3318 A fully-qualified label representing the current toolchain. You can use this
3523 to make toolchain-related decisions in the build. See also 3319 to make toolchain-related decisions in the build. See also
3524 "default_toolchain". 3320 "default_toolchain".
3525
3526 ``` 3321 ```
3527 3322
3528 #### **Example** 3323 #### **Example**
3529 3324
3530 ``` 3325 ```
3531 if (current_toolchain == "//build:64_bit_toolchain") { 3326 if (current_toolchain == "//build:64_bit_toolchain") {
3532 executable("output_thats_64_bit_only") { 3327 executable("output_thats_64_bit_only") {
3533 ... 3328 ...
3534
3535
3536 ``` 3329 ```
3537 ### <a name="default_toolchain"></a>**default_toolchain**: [string] Label of the default toolchain. 3330 ### <a name="default_toolchain"></a>**default_toolchain**: [string] Label of the default toolchain.
3538 3331
3539 ``` 3332 ```
3540 A fully-qualified label representing the default toolchain, which may not 3333 A fully-qualified label representing the default toolchain, which may not
3541 necessarily be the current one (see "current_toolchain"). 3334 necessarily be the current one (see "current_toolchain").
3542
3543
3544 ``` 3335 ```
3545 ### <a name="host_cpu"></a>**host_cpu**: The processor architecture that GN is r unning on. 3336 ### <a name="host_cpu"></a>**host_cpu**: The processor architecture that GN is r unning on.
3546 3337
3547 ``` 3338 ```
3548 This is value is exposed so that cross-compile toolchains can access the host 3339 This is value is exposed so that cross-compile toolchains can access the host
3549 architecture when needed. 3340 architecture when needed.
3550 3341
3551 The value should generally be considered read-only, but it can be overriden 3342 The value should generally be considered read-only, but it can be overriden
3552 in order to handle unusual cases where there might be multiple plausible 3343 in order to handle unusual cases where there might be multiple plausible
3553 values for the host architecture (e.g., if you can do either 32-bit or 64-bit 3344 values for the host architecture (e.g., if you can do either 32-bit or 64-bit
3554 builds). The value is not used internally by GN for any purpose. 3345 builds). The value is not used internally by GN for any purpose.
3555
3556 ``` 3346 ```
3557 3347
3558 #### **Some possible values** 3348 #### **Some possible values**
3559 3349
3560 ``` 3350 ```
3561 - "x64" 3351 - "x64"
3562 - "x86" 3352 - "x86"
3563
3564
3565 ``` 3353 ```
3566 ### <a name="host_os"></a>**host_os**: [string] The operating system that GN is running on. 3354 ### <a name="host_os"></a>**host_os**: [string] The operating system that GN is running on.
3567 3355
3568 ``` 3356 ```
3569 This value is exposed so that cross-compiles can access the host build 3357 This value is exposed so that cross-compiles can access the host build
3570 system's settings. 3358 system's settings.
3571 3359
3572 This value should generally be treated as read-only. It, however, is not used 3360 This value should generally be treated as read-only. It, however, is not used
3573 internally by GN for any purpose. 3361 internally by GN for any purpose.
3574
3575 ``` 3362 ```
3576 3363
3577 #### **Some possible values** 3364 #### **Some possible values**
3578 3365
3579 ``` 3366 ```
3580 - "linux" 3367 - "linux"
3581 - "mac" 3368 - "mac"
3582 - "win" 3369 - "win"
3583
3584
3585 ``` 3370 ```
3586 ### <a name="invoker"></a>**invoker**: [string] The invoking scope inside a temp late. 3371 ### <a name="invoker"></a>**invoker**: [string] The invoking scope inside a temp late.
3587 3372
3588 ``` 3373 ```
3589 Inside a template invocation, this variable refers to the scope of the 3374 Inside a template invocation, this variable refers to the scope of the
3590 invoker of the template. Outside of template invocations, this variable is 3375 invoker of the template. Outside of template invocations, this variable is
3591 undefined. 3376 undefined.
3592 3377
3593 All of the variables defined inside the template invocation are accessible as 3378 All of the variables defined inside the template invocation are accessible as
3594 members of the "invoker" scope. This is the way that templates read values 3379 members of the "invoker" scope. This is the way that templates read values
3595 set by the callers. 3380 set by the callers.
3596 3381
3597 This is often used with "defined" to see if a value is set on the invoking 3382 This is often used with "defined" to see if a value is set on the invoking
3598 scope. 3383 scope.
3599 3384
3600 See "gn help template" for more examples. 3385 See "gn help template" for more examples.
3601
3602 ``` 3386 ```
3603 3387
3604 #### **Example** 3388 #### **Example**
3605 3389
3606 ``` 3390 ```
3607 template("my_template") { 3391 template("my_template") {
3608 print(invoker.sources) # Prints [ "a.cc", "b.cc" ] 3392 print(invoker.sources) # Prints [ "a.cc", "b.cc" ]
3609 print(defined(invoker.foo)) # Prints false. 3393 print(defined(invoker.foo)) # Prints false.
3610 print(defined(invoker.bar)) # Prints true. 3394 print(defined(invoker.bar)) # Prints true.
3611 } 3395 }
3612 3396
3613 my_template("doom_melon") { 3397 my_template("doom_melon") {
3614 sources = [ "a.cc", "b.cc" ] 3398 sources = [ "a.cc", "b.cc" ]
3615 bar = 123 3399 bar = 123
3616 } 3400 }
3617
3618
3619 ``` 3401 ```
3620 ### <a name="python_path"></a>**python_path**: Absolute path of Python. 3402 ### <a name="python_path"></a>**python_path**: Absolute path of Python.
3621 3403
3622 ``` 3404 ```
3623 Normally used in toolchain definitions if running some command requires 3405 Normally used in toolchain definitions if running some command requires
3624 Python. You will normally not need this when invoking scripts since GN 3406 Python. You will normally not need this when invoking scripts since GN
3625 automatically finds it for you. 3407 automatically finds it for you.
3626
3627
3628 ``` 3408 ```
3629 ### <a name="root_build_dir"></a>**root_build_dir**: [string] Directory where bu ild commands are run. 3409 ### <a name="root_build_dir"></a>**root_build_dir**: [string] Directory where bu ild commands are run.
3630 3410
3631 ``` 3411 ```
3632 This is the root build output directory which will be the current directory 3412 This is the root build output directory which will be the current directory
3633 when executing all compilers and scripts. 3413 when executing all compilers and scripts.
3634 3414
3635 Most often this is used with rebase_path (see "gn help rebase_path") to 3415 Most often this is used with rebase_path (see "gn help rebase_path") to
3636 convert arguments to be relative to a script's current directory. 3416 convert arguments to be relative to a script's current directory.
3637
3638
3639 ``` 3417 ```
3640 ### <a name="root_gen_dir"></a>**root_gen_dir**: Directory for the toolchain's g enerated files. 3418 ### <a name="root_gen_dir"></a>**root_gen_dir**: Directory for the toolchain's g enerated files.
3641 3419
3642 ``` 3420 ```
3643 Absolute path to the root of the generated output directory tree for the 3421 Absolute path to the root of the generated output directory tree for the
3644 current toolchain. An example would be "//out/Debug/gen" for the default 3422 current toolchain. An example would be "//out/Debug/gen" for the default
3645 toolchain, or "//out/Debug/arm/gen" for the "arm" toolchain. 3423 toolchain, or "//out/Debug/arm/gen" for the "arm" toolchain.
3646 3424
3647 This is primarily useful for setting up include paths for generated files. If 3425 This is primarily useful for setting up include paths for generated files. If
3648 you are passing this to a script, you will want to pass it through 3426 you are passing this to a script, you will want to pass it through
3649 rebase_path() (see "gn help rebase_path") to convert it to be relative to the 3427 rebase_path() (see "gn help rebase_path") to convert it to be relative to the
3650 build directory. 3428 build directory.
3651 3429
3652 See also "target_gen_dir" which is usually a better location for generated 3430 See also "target_gen_dir" which is usually a better location for generated
3653 files. It will be inside the root generated dir. 3431 files. It will be inside the root generated dir.
3654
3655
3656 ``` 3432 ```
3657 ### <a name="root_out_dir"></a>**root_out_dir**: [string] Root directory for too lchain output files. 3433 ### <a name="root_out_dir"></a>**root_out_dir**: [string] Root directory for too lchain output files.
3658 3434
3659 ``` 3435 ```
3660 Absolute path to the root of the output directory tree for the current 3436 Absolute path to the root of the output directory tree for the current
3661 toolchain. It will not have a trailing slash. 3437 toolchain. It will not have a trailing slash.
3662 3438
3663 For the default toolchain this will be the same as the root_build_dir. An 3439 For the default toolchain this will be the same as the root_build_dir. An
3664 example would be "//out/Debug" for the default toolchain, or 3440 example would be "//out/Debug" for the default toolchain, or
3665 "//out/Debug/arm" for the "arm" toolchain. 3441 "//out/Debug/arm" for the "arm" toolchain.
3666 3442
3667 This is primarily useful for setting up script calls. If you are passing this 3443 This is primarily useful for setting up script calls. If you are passing this
3668 to a script, you will want to pass it through rebase_path() (see "gn help 3444 to a script, you will want to pass it through rebase_path() (see "gn help
3669 rebase_path") to convert it to be relative to the build directory. 3445 rebase_path") to convert it to be relative to the build directory.
3670 3446
3671 See also "target_out_dir" which is usually a better location for output 3447 See also "target_out_dir" which is usually a better location for output
3672 files. It will be inside the root output dir. 3448 files. It will be inside the root output dir.
3673
3674 ``` 3449 ```
3675 3450
3676 #### **Example** 3451 #### **Example**
3677 3452
3678 ``` 3453 ```
3679 action("myscript") { 3454 action("myscript") {
3680 # Pass the output dir to the script. 3455 # Pass the output dir to the script.
3681 args = [ "-o", rebase_path(root_out_dir, root_build_dir) ] 3456 args = [ "-o", rebase_path(root_out_dir, root_build_dir) ]
3682 } 3457 }
3683
3684
3685 ``` 3458 ```
3686 ### <a name="target_cpu"></a>**target_cpu**: The desired cpu architecture for th e build. 3459 ### <a name="target_cpu"></a>**target_cpu**: The desired cpu architecture for th e build.
3687 3460
3688 ``` 3461 ```
3689 This value should be used to indicate the desired architecture for the 3462 This value should be used to indicate the desired architecture for the
3690 primary objects of the build. It will match the cpu architecture of the 3463 primary objects of the build. It will match the cpu architecture of the
3691 default toolchain, but not necessarily the current toolchain. 3464 default toolchain, but not necessarily the current toolchain.
3692 3465
3693 In many cases, this is the same as "host_cpu", but in the case of 3466 In many cases, this is the same as "host_cpu", but in the case of
3694 cross-compiles, this can be set to something different. This value is 3467 cross-compiles, this can be set to something different. This value is
3695 different from "current_cpu" in that it does not change based on the current 3468 different from "current_cpu" in that it does not change based on the current
3696 toolchain. When writing rules, "current_cpu" should be used rather than 3469 toolchain. When writing rules, "current_cpu" should be used rather than
3697 "target_cpu" most of the time. 3470 "target_cpu" most of the time.
3698 3471
3699 This value is not used internally by GN for any purpose, so it may be set to 3472 This value is not used internally by GN for any purpose, so it may be set to
3700 whatever value is needed for the build. GN defaults this value to the empty 3473 whatever value is needed for the build. GN defaults this value to the empty
3701 string ("") and the configuration files should set it to an appropriate value 3474 string ("") and the configuration files should set it to an appropriate value
3702 (e.g., setting it to the value of "host_cpu") if it is not overridden on the 3475 (e.g., setting it to the value of "host_cpu") if it is not overridden on the
3703 command line or in the args.gn file. 3476 command line or in the args.gn file.
3704
3705 ``` 3477 ```
3706 3478
3707 #### **Possible values** 3479 #### **Possible values**
3708 3480
3709 ``` 3481 ```
3710 - "x86" 3482 - "x86"
3711 - "x64" 3483 - "x64"
3712 - "arm" 3484 - "arm"
3713 - "arm64" 3485 - "arm64"
3714 - "mipsel" 3486 - "mipsel"
3715
3716
3717 ``` 3487 ```
3718 ### <a name="target_gen_dir"></a>**target_gen_dir**: Directory for a target's ge nerated files. 3488 ### <a name="target_gen_dir"></a>**target_gen_dir**: Directory for a target's ge nerated files.
3719 3489
3720 ``` 3490 ```
3721 Absolute path to the target's generated file directory. This will be the 3491 Absolute path to the target's generated file directory. This will be the
3722 "root_gen_dir" followed by the relative path to the current build file. If 3492 "root_gen_dir" followed by the relative path to the current build file. If
3723 your file is in "//tools/doom_melon" then target_gen_dir would be 3493 your file is in "//tools/doom_melon" then target_gen_dir would be
3724 "//out/Debug/gen/tools/doom_melon". It will not have a trailing slash. 3494 "//out/Debug/gen/tools/doom_melon". It will not have a trailing slash.
3725 3495
3726 This is primarily useful for setting up include paths for generated files. If 3496 This is primarily useful for setting up include paths for generated files. If
3727 you are passing this to a script, you will want to pass it through 3497 you are passing this to a script, you will want to pass it through
3728 rebase_path() (see "gn help rebase_path") to convert it to be relative to the 3498 rebase_path() (see "gn help rebase_path") to convert it to be relative to the
3729 build directory. 3499 build directory.
3730 3500
3731 See also "gn help root_gen_dir". 3501 See also "gn help root_gen_dir".
3732
3733 ``` 3502 ```
3734 3503
3735 #### **Example** 3504 #### **Example**
3736 3505
3737 ``` 3506 ```
3738 action("myscript") { 3507 action("myscript") {
3739 # Pass the generated output dir to the script. 3508 # Pass the generated output dir to the script.
3740 args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ]" 3509 args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ]"
3741 } 3510 }
3742
3743
3744 ``` 3511 ```
3745 ### <a name="target_name"></a>**target_name**: [string] The name of the current target. 3512 ### <a name="target_name"></a>**target_name**: [string] The name of the current target.
3746 3513
3747 ``` 3514 ```
3748 Inside a target or template invocation, this variable refers to the name 3515 Inside a target or template invocation, this variable refers to the name
3749 given to the target or template invocation. Outside of these, this variable 3516 given to the target or template invocation. Outside of these, this variable
3750 is undefined. 3517 is undefined.
3751 3518
3752 This is most often used in template definitions to name targets defined in 3519 This is most often used in template definitions to name targets defined in
3753 the template based on the name of the invocation. This is necessary both to 3520 the template based on the name of the invocation. This is necessary both to
3754 ensure generated targets have unique names and to generate a target with the 3521 ensure generated targets have unique names and to generate a target with the
3755 exact name of the invocation that other targets can depend on. 3522 exact name of the invocation that other targets can depend on.
3756 3523
3757 Be aware that this value will always reflect the innermost scope. So when 3524 Be aware that this value will always reflect the innermost scope. So when
3758 defining a target inside a template, target_name will refer to the target 3525 defining a target inside a template, target_name will refer to the target
3759 rather than the template invocation. To get the name of the template 3526 rather than the template invocation. To get the name of the template
3760 invocation in this case, you should save target_name to a temporary variable 3527 invocation in this case, you should save target_name to a temporary variable
3761 outside of any target definitions. 3528 outside of any target definitions.
3762 3529
3763 See "gn help template" for more examples. 3530 See "gn help template" for more examples.
3764
3765 ``` 3531 ```
3766 3532
3767 #### **Example** 3533 #### **Example**
3768 3534
3769 ``` 3535 ```
3770 executable("doom_melon") { 3536 executable("doom_melon") {
3771 print(target_name) # Prints "doom_melon". 3537 print(target_name) # Prints "doom_melon".
3772 } 3538 }
3773 3539
3774 template("my_template") { 3540 template("my_template") {
3775 print(target_name) # Prints "space_ray" when invoked below. 3541 print(target_name) # Prints "space_ray" when invoked below.
3776 3542
3777 executable(target_name + "_impl") { 3543 executable(target_name + "_impl") {
3778 print(target_name) # Prints "space_ray_impl". 3544 print(target_name) # Prints "space_ray_impl".
3779 } 3545 }
3780 } 3546 }
3781 3547
3782 my_template("space_ray") { 3548 my_template("space_ray") {
3783 } 3549 }
3784
3785
3786 ``` 3550 ```
3787 ### <a name="target_os"></a>**target_os**: The desired operating system for the build. 3551 ### <a name="target_os"></a>**target_os**: The desired operating system for the build.
3788 3552
3789 ``` 3553 ```
3790 This value should be used to indicate the desired operating system for the 3554 This value should be used to indicate the desired operating system for the
3791 primary object(s) of the build. It will match the OS of the default 3555 primary object(s) of the build. It will match the OS of the default
3792 toolchain. 3556 toolchain.
3793 3557
3794 In many cases, this is the same as "host_os", but in the case of 3558 In many cases, this is the same as "host_os", but in the case of
3795 cross-compiles, it may be different. This variable differs from "current_os" 3559 cross-compiles, it may be different. This variable differs from "current_os"
3796 in that it can be referenced from inside any toolchain and will always return 3560 in that it can be referenced from inside any toolchain and will always return
3797 the initial value. 3561 the initial value.
3798 3562
3799 This should be set to the most specific value possible. So, "android" or 3563 This should be set to the most specific value possible. So, "android" or
3800 "chromeos" should be used instead of "linux" where applicable, even though 3564 "chromeos" should be used instead of "linux" where applicable, even though
3801 Android and ChromeOS are both Linux variants. This can mean that one needs to 3565 Android and ChromeOS are both Linux variants. This can mean that one needs to
3802 write 3566 write
3803 3567
3804 if (target_os == "android" || target_os == "linux") { 3568 if (target_os == "android" || target_os == "linux") {
3805 # ... 3569 # ...
3806 } 3570 }
3807 3571
3808 and so forth. 3572 and so forth.
3809 3573
3810 This value is not used internally by GN for any purpose, so it may be set to 3574 This value is not used internally by GN for any purpose, so it may be set to
3811 whatever value is needed for the build. GN defaults this value to the empty 3575 whatever value is needed for the build. GN defaults this value to the empty
3812 string ("") and the configuration files should set it to an appropriate value 3576 string ("") and the configuration files should set it to an appropriate value
3813 (e.g., setting it to the value of "host_os") if it is not set via the command 3577 (e.g., setting it to the value of "host_os") if it is not set via the command
3814 line or in the args.gn file. 3578 line or in the args.gn file.
3815
3816 ``` 3579 ```
3817 3580
3818 #### **Possible values** 3581 #### **Possible values**
3819 3582
3820 ``` 3583 ```
3821 - "android" 3584 - "android"
3822 - "chromeos" 3585 - "chromeos"
3823 - "ios" 3586 - "ios"
3824 - "linux" 3587 - "linux"
3825 - "nacl" 3588 - "nacl"
3826 - "mac" 3589 - "mac"
3827 - "win" 3590 - "win"
3828
3829
3830 ``` 3591 ```
3831 ### <a name="target_out_dir"></a>**target_out_dir**: [string] Directory for targ et output files. 3592 ### <a name="target_out_dir"></a>**target_out_dir**: [string] Directory for targ et output files.
3832 3593
3833 ``` 3594 ```
3834 Absolute path to the target's generated file directory. If your current 3595 Absolute path to the target's generated file directory. If your current
3835 target is in "//tools/doom_melon" then this value might be 3596 target is in "//tools/doom_melon" then this value might be
3836 "//out/Debug/obj/tools/doom_melon". It will not have a trailing slash. 3597 "//out/Debug/obj/tools/doom_melon". It will not have a trailing slash.
3837 3598
3838 This is primarily useful for setting up arguments for calling scripts. If you 3599 This is primarily useful for setting up arguments for calling scripts. If you
3839 are passing this to a script, you will want to pass it through rebase_path() 3600 are passing this to a script, you will want to pass it through rebase_path()
3840 (see "gn help rebase_path") to convert it to be relative to the build 3601 (see "gn help rebase_path") to convert it to be relative to the build
3841 directory. 3602 directory.
3842 3603
3843 See also "gn help root_out_dir". 3604 See also "gn help root_out_dir".
3844
3845 ``` 3605 ```
3846 3606
3847 #### **Example** 3607 #### **Example**
3848 3608
3849 ``` 3609 ```
3850 action("myscript") { 3610 action("myscript") {
3851 # Pass the output dir to the script. 3611 # Pass the output dir to the script.
3852 args = [ "-o", rebase_path(target_out_dir, root_build_dir) ]" 3612 args = [ "-o", rebase_path(target_out_dir, root_build_dir) ]"
3853 3613
3854 } 3614 }
3855
3856
3857 ``` 3615 ```
3858 ## <a name="target_variables"></a>Variables you set in targets 3616 ## <a name="target_variables"></a>Variables you set in targets
3859 3617
3860 ### <a name="all_dependent_configs"></a>**all_dependent_configs**: Configs to be forced on dependents. 3618 ### <a name="all_dependent_configs"></a>**all_dependent_configs**: Configs to be forced on dependents.
3861 3619
3862 ``` 3620 ```
3863 A list of config labels. 3621 A list of config labels.
3864 3622
3865 All targets depending on this one, and recursively, all targets depending on 3623 All targets depending on this one, and recursively, all targets depending on
3866 those, will have the configs listed in this variable added to them. These 3624 those, will have the configs listed in this variable added to them. These
3867 configs will also apply to the current target. 3625 configs will also apply to the current target.
3868 3626
3869 This addition happens in a second phase once a target and all of its 3627 This addition happens in a second phase once a target and all of its
3870 dependencies have been resolved. Therefore, a target will not see these 3628 dependencies have been resolved. Therefore, a target will not see these
3871 force-added configs in their "configs" variable while the script is running, 3629 force-added configs in their "configs" variable while the script is running,
3872 and they can not be removed. As a result, this capability should generally 3630 and they can not be removed. As a result, this capability should generally
3873 only be used to add defines and include directories necessary to compile a 3631 only be used to add defines and include directories necessary to compile a
3874 target's headers. 3632 target's headers.
3875 3633
3876 See also "public_configs". 3634 See also "public_configs".
3877
3878 ``` 3635 ```
3879 3636
3880 #### **Ordering of flags and values** 3637 #### **Ordering of flags and values**
3881 3638
3882 ``` 3639 ```
3883 1. Those set on the current target (not in a config). 3640 1. Those set on the current target (not in a config).
3884 2. Those set on the "configs" on the target in order that the 3641 2. Those set on the "configs" on the target in order that the
3885 configs appear in the list. 3642 configs appear in the list.
3886 3. Those set on the "all_dependent_configs" on the target in order 3643 3. Those set on the "all_dependent_configs" on the target in order
3887 that the configs appear in the list. 3644 that the configs appear in the list.
3888 4. Those set on the "public_configs" on the target in order that 3645 4. Those set on the "public_configs" on the target in order that
3889 those configs appear in the list. 3646 those configs appear in the list.
3890 5. all_dependent_configs pulled from dependencies, in the order of 3647 5. all_dependent_configs pulled from dependencies, in the order of
3891 the "deps" list. This is done recursively. If a config appears 3648 the "deps" list. This is done recursively. If a config appears
3892 more than once, only the first occurance will be used. 3649 more than once, only the first occurance will be used.
3893 6. public_configs pulled from dependencies, in the order of the 3650 6. public_configs pulled from dependencies, in the order of the
3894 "deps" list. If a dependency is public, they will be applied 3651 "deps" list. If a dependency is public, they will be applied
3895 recursively. 3652 recursively.
3896
3897
3898 ``` 3653 ```
3899 ### <a name="allow_circular_includes_from"></a>**allow_circular_includes_from**: Permit includes from deps. 3654 ### <a name="allow_circular_includes_from"></a>**allow_circular_includes_from**: Permit includes from deps.
3900 3655
3901 ``` 3656 ```
3902 A list of target labels. Must be a subset of the target's "deps". These 3657 A list of target labels. Must be a subset of the target's "deps". These
3903 targets will be permitted to include headers from the current target despite 3658 targets will be permitted to include headers from the current target despite
3904 the dependency going in the opposite direction. 3659 the dependency going in the opposite direction.
3905 3660
3906 When you use this, both targets must be included in a final binary for it to 3661 When you use this, both targets must be included in a final binary for it to
3907 link. To keep linker errors from happening, it is good practice to have all 3662 link. To keep linker errors from happening, it is good practice to have all
3908 external dependencies depend only on one of the two targets, and to set the 3663 external dependencies depend only on one of the two targets, and to set the
3909 visibility on the other to enforce this. Thus the targets will always be 3664 visibility on the other to enforce this. Thus the targets will always be
3910 linked together in any output. 3665 linked together in any output.
3911
3912 ``` 3666 ```
3913 3667
3914 #### **Details** 3668 #### **Details**
3915 3669
3916 ``` 3670 ```
3917 Normally, for a file in target A to include a file from target B, A must list 3671 Normally, for a file in target A to include a file from target B, A must list
3918 B as a dependency. This invariant is enforced by the "gn check" command (and 3672 B as a dependency. This invariant is enforced by the "gn check" command (and
3919 the --check flag to "gn gen" -- see "gn help check"). 3673 the --check flag to "gn gen" -- see "gn help check").
3920 3674
3921 Sometimes, two targets might be the same unit for linking purposes (two 3675 Sometimes, two targets might be the same unit for linking purposes (two
3922 source sets or static libraries that would always be linked together in a 3676 source sets or static libraries that would always be linked together in a
3923 final executable or shared library) and they each include headers from the 3677 final executable or shared library) and they each include headers from the
3924 other: you want A to be able to include B's headers, and B to include A's 3678 other: you want A to be able to include B's headers, and B to include A's
3925 headers. This is not an ideal situation but is sometimes unavoidable. 3679 headers. This is not an ideal situation but is sometimes unavoidable.
3926 3680
3927 This list, if specified, lists which of the dependencies of the current 3681 This list, if specified, lists which of the dependencies of the current
3928 target can include header files from the current target. That is, if A 3682 target can include header files from the current target. That is, if A
3929 depends on B, B can only include headers from A if it is in A's 3683 depends on B, B can only include headers from A if it is in A's
3930 allow_circular_includes_from list. Normally includes must follow the 3684 allow_circular_includes_from list. Normally includes must follow the
3931 direction of dependencies, this flag allows them to go in the opposite 3685 direction of dependencies, this flag allows them to go in the opposite
3932 direction. 3686 direction.
3933
3934 ``` 3687 ```
3935 3688
3936 #### **Danger** 3689 #### **Danger**
3937 3690
3938 ``` 3691 ```
3939 In the above example, A's headers are likely to include headers from A's 3692 In the above example, A's headers are likely to include headers from A's
3940 dependencies. Those dependencies may have public_configs that apply flags, 3693 dependencies. Those dependencies may have public_configs that apply flags,
3941 defines, and include paths that make those headers work properly. 3694 defines, and include paths that make those headers work properly.
3942 3695
3943 With allow_circular_includes_from, B can include A's headers, and 3696 With allow_circular_includes_from, B can include A's headers, and
3944 transitively from A's dependencies, without having the dependencies that 3697 transitively from A's dependencies, without having the dependencies that
3945 would bring in the public_configs those headers need. The result may be 3698 would bring in the public_configs those headers need. The result may be
3946 errors or inconsistent builds. 3699 errors or inconsistent builds.
3947 3700
3948 So when you use allow_circular_includes_from, make sure that any compiler 3701 So when you use allow_circular_includes_from, make sure that any compiler
3949 settings, flags, and include directories are the same between both targets 3702 settings, flags, and include directories are the same between both targets
3950 (consider putting such things in a shared config they can both reference). 3703 (consider putting such things in a shared config they can both reference).
3951 Make sure the dependencies are also the same (you might consider a group to 3704 Make sure the dependencies are also the same (you might consider a group to
3952 collect such dependencies they both depend on). 3705 collect such dependencies they both depend on).
3953
3954 ``` 3706 ```
3955 3707
3956 #### **Example** 3708 #### **Example**
3957 3709
3958 ``` 3710 ```
3959 source_set("a") { 3711 source_set("a") {
3960 deps = [ ":b", ":a_b_shared_deps" ] 3712 deps = [ ":b", ":a_b_shared_deps" ]
3961 allow_circular_includes_from = [ ":b" ] 3713 allow_circular_includes_from = [ ":b" ]
3962 ... 3714 ...
3963 } 3715 }
3964 3716
3965 source_set("b") { 3717 source_set("b") {
3966 deps = [ ":a_b_shared_deps" ] 3718 deps = [ ":a_b_shared_deps" ]
3967 # Sources here can include headers from a despite lack of deps. 3719 # Sources here can include headers from a despite lack of deps.
3968 ... 3720 ...
3969 } 3721 }
3970 3722
3971 group("a_b_shared_deps") { 3723 group("a_b_shared_deps") {
3972 public_deps = [ ":c" ] 3724 public_deps = [ ":c" ]
3973 } 3725 }
3974
3975
3976 ``` 3726 ```
3977 ### <a name="arflags"></a>**arflags**: Arguments passed to static_library archiv er. 3727 ### <a name="arflags"></a>**arflags**: Arguments passed to static_library archiv er.
3978 3728
3979 ``` 3729 ```
3980 A list of flags passed to the archive/lib command that creates static 3730 A list of flags passed to the archive/lib command that creates static
3981 libraries. 3731 libraries.
3982 3732
3983 arflags are NOT pushed to dependents, so applying arflags to source sets or 3733 arflags are NOT pushed to dependents, so applying arflags to source sets or
3984 any other target type will be a no-op. As with ldflags, you could put the 3734 any other target type will be a no-op. As with ldflags, you could put the
3985 arflags in a config and set that as a public or "all dependent" config, but 3735 arflags in a config and set that as a public or "all dependent" config, but
3986 that will likely not be what you want. If you have a chain of static 3736 that will likely not be what you want. If you have a chain of static
3987 libraries dependent on each other, this can cause the flags to propagate up 3737 libraries dependent on each other, this can cause the flags to propagate up
3988 to other static libraries. Due to the nature of how arflags are typically 3738 to other static libraries. Due to the nature of how arflags are typically
3989 used, you will normally want to apply them directly on static_library targets 3739 used, you will normally want to apply them directly on static_library targets
3990 themselves. 3740 themselves.
3991
3992 ``` 3741 ```
3993 3742
3994 #### **Ordering of flags and values** 3743 #### **Ordering of flags and values**
3995 3744
3996 ``` 3745 ```
3997 1. Those set on the current target (not in a config). 3746 1. Those set on the current target (not in a config).
3998 2. Those set on the "configs" on the target in order that the 3747 2. Those set on the "configs" on the target in order that the
3999 configs appear in the list. 3748 configs appear in the list.
4000 3. Those set on the "all_dependent_configs" on the target in order 3749 3. Those set on the "all_dependent_configs" on the target in order
4001 that the configs appear in the list. 3750 that the configs appear in the list.
4002 4. Those set on the "public_configs" on the target in order that 3751 4. Those set on the "public_configs" on the target in order that
4003 those configs appear in the list. 3752 those configs appear in the list.
4004 5. all_dependent_configs pulled from dependencies, in the order of 3753 5. all_dependent_configs pulled from dependencies, in the order of
4005 the "deps" list. This is done recursively. If a config appears 3754 the "deps" list. This is done recursively. If a config appears
4006 more than once, only the first occurance will be used. 3755 more than once, only the first occurance will be used.
4007 6. public_configs pulled from dependencies, in the order of the 3756 6. public_configs pulled from dependencies, in the order of the
4008 "deps" list. If a dependency is public, they will be applied 3757 "deps" list. If a dependency is public, they will be applied
4009 recursively. 3758 recursively.
4010
4011
4012 ``` 3759 ```
4013 ### <a name="args"></a>**args**: Arguments passed to an action. 3760 ### <a name="args"></a>**args**: Arguments passed to an action.
4014 3761
4015 ``` 3762 ```
4016 For action and action_foreach targets, args is the list of arguments to pass 3763 For action and action_foreach targets, args is the list of arguments to pass
4017 to the script. Typically you would use source expansion (see "gn help 3764 to the script. Typically you would use source expansion (see "gn help
4018 source_expansion") to insert the source file names. 3765 source_expansion") to insert the source file names.
4019 3766
4020 See also "gn help action" and "gn help action_foreach". 3767 See also "gn help action" and "gn help action_foreach".
4021
4022
4023 ``` 3768 ```
4024 ### <a name="asmflags"></a>**asmflags**: Flags passed to the assembler. 3769 ### <a name="asmflags"></a>**asmflags**: Flags passed to the assembler.
4025 3770
4026 ``` 3771 ```
4027 A list of strings. 3772 A list of strings.
4028 3773
4029 "asmflags" are passed to any invocation of a tool that takes an .asm or .S 3774 "asmflags" are passed to any invocation of a tool that takes an .asm or .S
4030 file as input. 3775 file as input.
4031
4032 ``` 3776 ```
4033 3777
4034 #### **Ordering of flags and values** 3778 #### **Ordering of flags and values**
4035 3779
4036 ``` 3780 ```
4037 1. Those set on the current target (not in a config). 3781 1. Those set on the current target (not in a config).
4038 2. Those set on the "configs" on the target in order that the 3782 2. Those set on the "configs" on the target in order that the
4039 configs appear in the list. 3783 configs appear in the list.
4040 3. Those set on the "all_dependent_configs" on the target in order 3784 3. Those set on the "all_dependent_configs" on the target in order
4041 that the configs appear in the list. 3785 that the configs appear in the list.
4042 4. Those set on the "public_configs" on the target in order that 3786 4. Those set on the "public_configs" on the target in order that
4043 those configs appear in the list. 3787 those configs appear in the list.
4044 5. all_dependent_configs pulled from dependencies, in the order of 3788 5. all_dependent_configs pulled from dependencies, in the order of
4045 the "deps" list. This is done recursively. If a config appears 3789 the "deps" list. This is done recursively. If a config appears
4046 more than once, only the first occurance will be used. 3790 more than once, only the first occurance will be used.
4047 6. public_configs pulled from dependencies, in the order of the 3791 6. public_configs pulled from dependencies, in the order of the
4048 "deps" list. If a dependency is public, they will be applied 3792 "deps" list. If a dependency is public, they will be applied
4049 recursively. 3793 recursively.
4050
4051
4052 ``` 3794 ```
4053 ### <a name="assert_no_deps"></a>**assert_no_deps**: Ensure no deps on these tar gets. 3795 ### <a name="assert_no_deps"></a>**assert_no_deps**: Ensure no deps on these tar gets.
4054 3796
4055 ``` 3797 ```
4056 A list of label patterns. 3798 A list of label patterns.
4057 3799
4058 This list is a list of patterns that must not match any of the transitive 3800 This list is a list of patterns that must not match any of the transitive
4059 dependencies of the target. These include all public, private, and data 3801 dependencies of the target. These include all public, private, and data
4060 dependencies, and cross shared library boundaries. This allows you to express 3802 dependencies, and cross shared library boundaries. This allows you to express
4061 that undesirable code isn't accidentally added to downstream dependencies in 3803 that undesirable code isn't accidentally added to downstream dependencies in
4062 a way that might otherwise be difficult to notice. 3804 a way that might otherwise be difficult to notice.
4063 3805
4064 Checking does not cross executable boundaries. If a target depends on an 3806 Checking does not cross executable boundaries. If a target depends on an
4065 executable, it's assumed that the executable is a tool that is producing part 3807 executable, it's assumed that the executable is a tool that is producing part
4066 of the build rather than something that is linked and distributed. This 3808 of the build rather than something that is linked and distributed. This
4067 allows assert_no_deps to express what is distributed in the final target 3809 allows assert_no_deps to express what is distributed in the final target
4068 rather than depend on the internal build steps (which may include 3810 rather than depend on the internal build steps (which may include
4069 non-distributable code). 3811 non-distributable code).
4070 3812
4071 See "gn help label_pattern" for the format of the entries in the list. These 3813 See "gn help label_pattern" for the format of the entries in the list. These
4072 patterns allow blacklisting individual targets or whole directory 3814 patterns allow blacklisting individual targets or whole directory
4073 hierarchies. 3815 hierarchies.
4074 3816
4075 Sometimes it is desirable to enforce that many targets have no dependencies 3817 Sometimes it is desirable to enforce that many targets have no dependencies
4076 on a target or set of targets. One efficient way to express this is to create 3818 on a target or set of targets. One efficient way to express this is to create
4077 a group with the assert_no_deps rule on it, and make that group depend on all 3819 a group with the assert_no_deps rule on it, and make that group depend on all
4078 targets you want to apply that assertion to. 3820 targets you want to apply that assertion to.
4079
4080 ``` 3821 ```
4081 3822
4082 #### **Example** 3823 #### **Example**
4083 3824
4084 ``` 3825 ```
4085 executable("doom_melon") { 3826 executable("doom_melon") {
4086 deps = [ "//foo:bar" ] 3827 deps = [ "//foo:bar" ]
4087 ... 3828 ...
4088 assert_no_deps = [ 3829 assert_no_deps = [
4089 "//evil/*", # Don't link any code from the evil directory. 3830 "//evil/*", # Don't link any code from the evil directory.
4090 "//foo:test_support", # This target is also disallowed. 3831 "//foo:test_support", # This target is also disallowed.
4091 ] 3832 ]
4092 } 3833 }
4093
4094
4095 ``` 3834 ```
4096 ### <a name="bundle_deps_filter"></a>**bundle_deps_filter**: [label list] A list of labels that are filtered out. 3835 ### <a name="bundle_deps_filter"></a>**bundle_deps_filter**: [label list] A list of labels that are filtered out.
4097 3836
4098 ``` 3837 ```
4099 A list of target labels. 3838 A list of target labels.
4100 3839
4101 This list contains target label patterns that should be filtered out when 3840 This list contains target label patterns that should be filtered out when
4102 creating the bundle. Any target matching one of those label will be removed 3841 creating the bundle. Any target matching one of those label will be removed
4103 from the dependencies of the create_bundle target. 3842 from the dependencies of the create_bundle target.
4104 3843
4105 This is mostly useful when creating application extension bundle as the 3844 This is mostly useful when creating application extension bundle as the
4106 application extension has access to runtime resources from the application 3845 application extension has access to runtime resources from the application
4107 bundle and thus do not require a second copy. 3846 bundle and thus do not require a second copy.
4108 3847
4109 See "gn help create_bundle" for more information. 3848 See "gn help create_bundle" for more information.
4110
4111 ``` 3849 ```
4112 3850
4113 #### **Example** 3851 #### **Example**
4114 3852
4115 ``` 3853 ```
4116 create_bundle("today_extension") { 3854 create_bundle("today_extension") {
4117 deps = [ 3855 deps = [
4118 "//base" 3856 "//base"
4119 ] 3857 ]
4120 bundle_root_dir = "$root_out_dir/today_extension.appex" 3858 bundle_root_dir = "$root_out_dir/today_extension.appex"
4121 bundle_deps_filter = [ 3859 bundle_deps_filter = [
4122 # The extension uses //base but does not use any function calling into 3860 # The extension uses //base but does not use any function calling into
4123 # third_party/icu and thus does not need the icudtl.dat file. 3861 # third_party/icu and thus does not need the icudtl.dat file.
4124 "//third_party/icu:icudata", 3862 "//third_party/icu:icudata",
4125 ] 3863 ]
4126 } 3864 }
4127
4128
4129 ``` 3865 ```
4130 ### <a name="bundle_executable_dir"></a>**bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in 3866 ### <a name="bundle_executable_dir"></a>**bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in
4131 ``` 3867 ```
4132 create_bundle. 3868 create_bundle.
4133 3869
4134 A string corresponding to a path in $root_build_dir. 3870 A string corresponding to a path in $root_build_dir.
4135 3871
4136 This string is used by the "create_bundle" target to expand the 3872 This string is used by the "create_bundle" target to expand the
4137 {{bundle_executable_dir}} of the "bundle_data" target it depends on. This 3873 {{bundle_executable_dir}} of the "bundle_data" target it depends on. This
4138 must correspond to a path under "bundle_root_dir". 3874 must correspond to a path under "bundle_root_dir".
4139 3875
4140 See "gn help bundle_root_dir" for examples. 3876 See "gn help bundle_root_dir" for examples.
4141
4142
4143 ``` 3877 ```
4144 ### <a name="bundle_plugins_dir"></a>**bundle_plugins_dir**: Expansion of {{bund le_plugins_dir}} in create_bundle. 3878 ### <a name="bundle_plugins_dir"></a>**bundle_plugins_dir**: Expansion of {{bund le_plugins_dir}} in create_bundle.
4145 3879
4146 ``` 3880 ```
4147 A string corresponding to a path in $root_build_dir. 3881 A string corresponding to a path in $root_build_dir.
4148 3882
4149 This string is used by the "create_bundle" target to expand the 3883 This string is used by the "create_bundle" target to expand the
4150 {{bundle_plugins_dir}} of the "bundle_data" target it depends on. This must 3884 {{bundle_plugins_dir}} of the "bundle_data" target it depends on. This must
4151 correspond to a path under "bundle_root_dir". 3885 correspond to a path under "bundle_root_dir".
4152 3886
4153 See "gn help bundle_root_dir" for examples. 3887 See "gn help bundle_root_dir" for examples.
4154
4155
4156 ``` 3888 ```
4157 ### <a name="bundle_resources_dir"></a>**bundle_resources_dir**: Expansion of {{ bundle_resources_dir}} in 3889 ### <a name="bundle_resources_dir"></a>**bundle_resources_dir**: Expansion of {{ bundle_resources_dir}} in
4158 ``` 3890 ```
4159 create_bundle. 3891 create_bundle.
4160 3892
4161 A string corresponding to a path in $root_build_dir. 3893 A string corresponding to a path in $root_build_dir.
4162 3894
4163 This string is used by the "create_bundle" target to expand the 3895 This string is used by the "create_bundle" target to expand the
4164 {{bundle_resources_dir}} of the "bundle_data" target it depends on. This must 3896 {{bundle_resources_dir}} of the "bundle_data" target it depends on. This must
4165 correspond to a path under "bundle_root_dir". 3897 correspond to a path under "bundle_root_dir".
4166 3898
4167 See "gn help bundle_root_dir" for examples. 3899 See "gn help bundle_root_dir" for examples.
4168
4169
4170 ``` 3900 ```
4171 ### <a name="bundle_root_dir"></a>**bundle_root_dir**: Expansion of {{bundle_roo t_dir}} in create_bundle. 3901 ### <a name="bundle_root_dir"></a>**bundle_root_dir**: Expansion of {{bundle_roo t_dir}} in create_bundle.
4172 3902
4173 ``` 3903 ```
4174 A string corresponding to a path in root_build_dir. 3904 A string corresponding to a path in root_build_dir.
4175 3905
4176 This string is used by the "create_bundle" target to expand the 3906 This string is used by the "create_bundle" target to expand the
4177 {{bundle_root_dir}} of the "bundle_data" target it depends on. This must 3907 {{bundle_root_dir}} of the "bundle_data" target it depends on. This must
4178 correspond to a path under root_build_dir. 3908 correspond to a path under root_build_dir.
4179
4180 ``` 3909 ```
4181 3910
4182 #### **Example** 3911 #### **Example**
4183 3912
4184 ``` 3913 ```
4185 bundle_data("info_plist") { 3914 bundle_data("info_plist") {
4186 sources = [ "Info.plist" ] 3915 sources = [ "Info.plist" ]
4187 outputs = [ "{{bundle_root_dir}}/Info.plist" ] 3916 outputs = [ "{{bundle_root_dir}}/Info.plist" ]
4188 } 3917 }
4189 3918
4190 create_bundle("doom_melon.app") { 3919 create_bundle("doom_melon.app") {
4191 deps = [ ":info_plist" ] 3920 deps = [ ":info_plist" ]
4192 bundle_root_dir = root_build_dir + "/doom_melon.app/Contents" 3921 bundle_root_dir = root_build_dir + "/doom_melon.app/Contents"
4193 bundle_resources_dir = bundle_root_dir + "/Resources" 3922 bundle_resources_dir = bundle_root_dir + "/Resources"
4194 bundle_executable_dir = bundle_root_dir + "/MacOS" 3923 bundle_executable_dir = bundle_root_dir + "/MacOS"
4195 bundle_plugins_dir = bundle_root_dir + "/PlugIns" 3924 bundle_plugins_dir = bundle_root_dir + "/PlugIns"
4196 } 3925 }
4197
4198
4199 ``` 3926 ```
4200 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. 3927 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
4201 3928
4202 ``` 3929 ```
4203 A list of strings. 3930 A list of strings.
4204 3931
4205 "cflags" are passed to all invocations of the C, C++, Objective C, and 3932 "cflags" are passed to all invocations of the C, C++, Objective C, and
4206 Objective C++ compilers. 3933 Objective C++ compilers.
4207 3934
4208 To target one of these variants individually, use "cflags_c", "cflags_cc", 3935 To target one of these variants individually, use "cflags_c", "cflags_cc",
4209 "cflags_objc", and "cflags_objcc", respectively. These variant-specific 3936 "cflags_objc", and "cflags_objcc", respectively. These variant-specific
4210 versions of cflags* will be appended on the compiler command line after 3937 versions of cflags* will be appended on the compiler command line after
4211 "cflags". 3938 "cflags".
4212 3939
4213 See also "asmflags" for flags for assembly-language files. 3940 See also "asmflags" for flags for assembly-language files.
4214
4215 ``` 3941 ```
4216 3942
4217 #### **Ordering of flags and values** 3943 #### **Ordering of flags and values**
4218 3944
4219 ``` 3945 ```
4220 1. Those set on the current target (not in a config). 3946 1. Those set on the current target (not in a config).
4221 2. Those set on the "configs" on the target in order that the 3947 2. Those set on the "configs" on the target in order that the
4222 configs appear in the list. 3948 configs appear in the list.
4223 3. Those set on the "all_dependent_configs" on the target in order 3949 3. Those set on the "all_dependent_configs" on the target in order
4224 that the configs appear in the list. 3950 that the configs appear in the list.
4225 4. Those set on the "public_configs" on the target in order that 3951 4. Those set on the "public_configs" on the target in order that
4226 those configs appear in the list. 3952 those configs appear in the list.
4227 5. all_dependent_configs pulled from dependencies, in the order of 3953 5. all_dependent_configs pulled from dependencies, in the order of
4228 the "deps" list. This is done recursively. If a config appears 3954 the "deps" list. This is done recursively. If a config appears
4229 more than once, only the first occurance will be used. 3955 more than once, only the first occurance will be used.
4230 6. public_configs pulled from dependencies, in the order of the 3956 6. public_configs pulled from dependencies, in the order of the
4231 "deps" list. If a dependency is public, they will be applied 3957 "deps" list. If a dependency is public, they will be applied
4232 recursively. 3958 recursively.
4233
4234
4235 ``` 3959 ```
4236 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. 3960 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
4237 3961
4238 ``` 3962 ```
4239 A list of strings. 3963 A list of strings.
4240 3964
4241 "cflags" are passed to all invocations of the C, C++, Objective C, and 3965 "cflags" are passed to all invocations of the C, C++, Objective C, and
4242 Objective C++ compilers. 3966 Objective C++ compilers.
4243 3967
4244 To target one of these variants individually, use "cflags_c", "cflags_cc", 3968 To target one of these variants individually, use "cflags_c", "cflags_cc",
4245 "cflags_objc", and "cflags_objcc", respectively. These variant-specific 3969 "cflags_objc", and "cflags_objcc", respectively. These variant-specific
4246 versions of cflags* will be appended on the compiler command line after 3970 versions of cflags* will be appended on the compiler command line after
4247 "cflags". 3971 "cflags".
4248 3972
4249 See also "asmflags" for flags for assembly-language files. 3973 See also "asmflags" for flags for assembly-language files.
4250
4251 ``` 3974 ```
4252 3975
4253 #### **Ordering of flags and values** 3976 #### **Ordering of flags and values**
4254 3977
4255 ``` 3978 ```
4256 1. Those set on the current target (not in a config). 3979 1. Those set on the current target (not in a config).
4257 2. Those set on the "configs" on the target in order that the 3980 2. Those set on the "configs" on the target in order that the
4258 configs appear in the list. 3981 configs appear in the list.
4259 3. Those set on the "all_dependent_configs" on the target in order 3982 3. Those set on the "all_dependent_configs" on the target in order
4260 that the configs appear in the list. 3983 that the configs appear in the list.
4261 4. Those set on the "public_configs" on the target in order that 3984 4. Those set on the "public_configs" on the target in order that
4262 those configs appear in the list. 3985 those configs appear in the list.
4263 5. all_dependent_configs pulled from dependencies, in the order of 3986 5. all_dependent_configs pulled from dependencies, in the order of
4264 the "deps" list. This is done recursively. If a config appears 3987 the "deps" list. This is done recursively. If a config appears
4265 more than once, only the first occurance will be used. 3988 more than once, only the first occurance will be used.
4266 6. public_configs pulled from dependencies, in the order of the 3989 6. public_configs pulled from dependencies, in the order of the
4267 "deps" list. If a dependency is public, they will be applied 3990 "deps" list. If a dependency is public, they will be applied
4268 recursively. 3991 recursively.
4269
4270
4271 ``` 3992 ```
4272 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. 3993 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
4273 3994
4274 ``` 3995 ```
4275 A list of strings. 3996 A list of strings.
4276 3997
4277 "cflags" are passed to all invocations of the C, C++, Objective C, and 3998 "cflags" are passed to all invocations of the C, C++, Objective C, and
4278 Objective C++ compilers. 3999 Objective C++ compilers.
4279 4000
4280 To target one of these variants individually, use "cflags_c", "cflags_cc", 4001 To target one of these variants individually, use "cflags_c", "cflags_cc",
4281 "cflags_objc", and "cflags_objcc", respectively. These variant-specific 4002 "cflags_objc", and "cflags_objcc", respectively. These variant-specific
4282 versions of cflags* will be appended on the compiler command line after 4003 versions of cflags* will be appended on the compiler command line after
4283 "cflags". 4004 "cflags".
4284 4005
4285 See also "asmflags" for flags for assembly-language files. 4006 See also "asmflags" for flags for assembly-language files.
4286
4287 ``` 4007 ```
4288 4008
4289 #### **Ordering of flags and values** 4009 #### **Ordering of flags and values**
4290 4010
4291 ``` 4011 ```
4292 1. Those set on the current target (not in a config). 4012 1. Those set on the current target (not in a config).
4293 2. Those set on the "configs" on the target in order that the 4013 2. Those set on the "configs" on the target in order that the
4294 configs appear in the list. 4014 configs appear in the list.
4295 3. Those set on the "all_dependent_configs" on the target in order 4015 3. Those set on the "all_dependent_configs" on the target in order
4296 that the configs appear in the list. 4016 that the configs appear in the list.
4297 4. Those set on the "public_configs" on the target in order that 4017 4. Those set on the "public_configs" on the target in order that
4298 those configs appear in the list. 4018 those configs appear in the list.
4299 5. all_dependent_configs pulled from dependencies, in the order of 4019 5. all_dependent_configs pulled from dependencies, in the order of
4300 the "deps" list. This is done recursively. If a config appears 4020 the "deps" list. This is done recursively. If a config appears
4301 more than once, only the first occurance will be used. 4021 more than once, only the first occurance will be used.
4302 6. public_configs pulled from dependencies, in the order of the 4022 6. public_configs pulled from dependencies, in the order of the
4303 "deps" list. If a dependency is public, they will be applied 4023 "deps" list. If a dependency is public, they will be applied
4304 recursively. 4024 recursively.
4305
4306
4307 ``` 4025 ```
4308 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. 4026 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
4309 4027
4310 ``` 4028 ```
4311 A list of strings. 4029 A list of strings.
4312 4030
4313 "cflags" are passed to all invocations of the C, C++, Objective C, and 4031 "cflags" are passed to all invocations of the C, C++, Objective C, and
4314 Objective C++ compilers. 4032 Objective C++ compilers.
4315 4033
4316 To target one of these variants individually, use "cflags_c", "cflags_cc", 4034 To target one of these variants individually, use "cflags_c", "cflags_cc",
4317 "cflags_objc", and "cflags_objcc", respectively. These variant-specific 4035 "cflags_objc", and "cflags_objcc", respectively. These variant-specific
4318 versions of cflags* will be appended on the compiler command line after 4036 versions of cflags* will be appended on the compiler command line after
4319 "cflags". 4037 "cflags".
4320 4038
4321 See also "asmflags" for flags for assembly-language files. 4039 See also "asmflags" for flags for assembly-language files.
4322
4323 ``` 4040 ```
4324 4041
4325 #### **Ordering of flags and values** 4042 #### **Ordering of flags and values**
4326 4043
4327 ``` 4044 ```
4328 1. Those set on the current target (not in a config). 4045 1. Those set on the current target (not in a config).
4329 2. Those set on the "configs" on the target in order that the 4046 2. Those set on the "configs" on the target in order that the
4330 configs appear in the list. 4047 configs appear in the list.
4331 3. Those set on the "all_dependent_configs" on the target in order 4048 3. Those set on the "all_dependent_configs" on the target in order
4332 that the configs appear in the list. 4049 that the configs appear in the list.
4333 4. Those set on the "public_configs" on the target in order that 4050 4. Those set on the "public_configs" on the target in order that
4334 those configs appear in the list. 4051 those configs appear in the list.
4335 5. all_dependent_configs pulled from dependencies, in the order of 4052 5. all_dependent_configs pulled from dependencies, in the order of
4336 the "deps" list. This is done recursively. If a config appears 4053 the "deps" list. This is done recursively. If a config appears
4337 more than once, only the first occurance will be used. 4054 more than once, only the first occurance will be used.
4338 6. public_configs pulled from dependencies, in the order of the 4055 6. public_configs pulled from dependencies, in the order of the
4339 "deps" list. If a dependency is public, they will be applied 4056 "deps" list. If a dependency is public, they will be applied
4340 recursively. 4057 recursively.
4341
4342
4343 ``` 4058 ```
4344 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler. 4059 ### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
4345 4060
4346 ``` 4061 ```
4347 A list of strings. 4062 A list of strings.
4348 4063
4349 "cflags" are passed to all invocations of the C, C++, Objective C, and 4064 "cflags" are passed to all invocations of the C, C++, Objective C, and
4350 Objective C++ compilers. 4065 Objective C++ compilers.
4351 4066
4352 To target one of these variants individually, use "cflags_c", "cflags_cc", 4067 To target one of these variants individually, use "cflags_c", "cflags_cc",
4353 "cflags_objc", and "cflags_objcc", respectively. These variant-specific 4068 "cflags_objc", and "cflags_objcc", respectively. These variant-specific
4354 versions of cflags* will be appended on the compiler command line after 4069 versions of cflags* will be appended on the compiler command line after
4355 "cflags". 4070 "cflags".
4356 4071
4357 See also "asmflags" for flags for assembly-language files. 4072 See also "asmflags" for flags for assembly-language files.
4358
4359 ``` 4073 ```
4360 4074
4361 #### **Ordering of flags and values** 4075 #### **Ordering of flags and values**
4362 4076
4363 ``` 4077 ```
4364 1. Those set on the current target (not in a config). 4078 1. Those set on the current target (not in a config).
4365 2. Those set on the "configs" on the target in order that the 4079 2. Those set on the "configs" on the target in order that the
4366 configs appear in the list. 4080 configs appear in the list.
4367 3. Those set on the "all_dependent_configs" on the target in order 4081 3. Those set on the "all_dependent_configs" on the target in order
4368 that the configs appear in the list. 4082 that the configs appear in the list.
4369 4. Those set on the "public_configs" on the target in order that 4083 4. Those set on the "public_configs" on the target in order that
4370 those configs appear in the list. 4084 those configs appear in the list.
4371 5. all_dependent_configs pulled from dependencies, in the order of 4085 5. all_dependent_configs pulled from dependencies, in the order of
4372 the "deps" list. This is done recursively. If a config appears 4086 the "deps" list. This is done recursively. If a config appears
4373 more than once, only the first occurance will be used. 4087 more than once, only the first occurance will be used.
4374 6. public_configs pulled from dependencies, in the order of the 4088 6. public_configs pulled from dependencies, in the order of the
4375 "deps" list. If a dependency is public, they will be applied 4089 "deps" list. If a dependency is public, they will be applied
4376 recursively. 4090 recursively.
4377
4378
4379 ``` 4091 ```
4380 ### <a name="check_includes"></a>**check_includes**: [boolean] Controls whether a target's files are checked. 4092 ### <a name="check_includes"></a>**check_includes**: [boolean] Controls whether a target's files are checked.
4381 4093
4382 ``` 4094 ```
4383 When true (the default), the "gn check" command (as well as "gn gen" with the 4095 When true (the default), the "gn check" command (as well as "gn gen" with the
4384 --check flag) will check this target's sources and headers for proper 4096 --check flag) will check this target's sources and headers for proper
4385 dependencies. 4097 dependencies.
4386 4098
4387 When false, the files in this target will be skipped by default. This does 4099 When false, the files in this target will be skipped by default. This does
4388 not affect other targets that depend on the current target, it just skips 4100 not affect other targets that depend on the current target, it just skips
4389 checking the includes of the current target's files. 4101 checking the includes of the current target's files.
4390 4102
4391 If there are a few conditionally included headers that trip up checking, you 4103 If there are a few conditionally included headers that trip up checking, you
4392 can exclude headers individually by annotating them with "nogncheck" (see "gn 4104 can exclude headers individually by annotating them with "nogncheck" (see "gn
4393 help nogncheck"). 4105 help nogncheck").
4394 4106
4395 The topic "gn help check" has general information on how checking works and 4107 The topic "gn help check" has general information on how checking works and
4396 advice on how to pass a check in problematic cases. 4108 advice on how to pass a check in problematic cases.
4397
4398 ``` 4109 ```
4399 4110
4400 #### **Example** 4111 #### **Example**
4401 4112
4402 ``` 4113 ```
4403 source_set("busted_includes") { 4114 source_set("busted_includes") {
4404 # This target's includes are messed up, exclude it from checking. 4115 # This target's includes are messed up, exclude it from checking.
4405 check_includes = false 4116 check_includes = false
4406 ... 4117 ...
4407 } 4118 }
4408
4409
4410 ``` 4119 ```
4411 ### <a name="code_signing_args"></a>**code_signing_args**: [string list] Argumen ts passed to code signing script. 4120 ### <a name="code_signing_args"></a>**code_signing_args**: [string list] Argumen ts passed to code signing script.
4412 4121
4413 ``` 4122 ```
4414 For create_bundle targets, code_signing_args is the list of arguments to pass 4123 For create_bundle targets, code_signing_args is the list of arguments to pass
4415 to the code signing script. Typically you would use source expansion (see "gn 4124 to the code signing script. Typically you would use source expansion (see "gn
4416 help source_expansion") to insert the source file names. 4125 help source_expansion") to insert the source file names.
4417 4126
4418 See also "gn help create_bundle". 4127 See also "gn help create_bundle".
4419
4420
4421 ``` 4128 ```
4422 ### <a name="code_signing_outputs"></a>**code_signing_outputs**: [file list] Out put files for code signing step. 4129 ### <a name="code_signing_outputs"></a>**code_signing_outputs**: [file list] Out put files for code signing step.
4423 4130
4424 ``` 4131 ```
4425 Outputs from the code signing step of a create_bundle target. Must refer to 4132 Outputs from the code signing step of a create_bundle target. Must refer to
4426 files in the build directory. 4133 files in the build directory.
4427 4134
4428 See also "gn help create_bundle". 4135 See also "gn help create_bundle".
4429
4430
4431 ``` 4136 ```
4432 ### <a name="code_signing_script"></a>**code_signing_script**: [file name] Scrip t for code signing." 4137 ### <a name="code_signing_script"></a>**code_signing_script**: [file name] Scrip t for code signing."
4433 4138
4434 ``` 4139 ```
4435 An absolute or buildfile-relative file name of a Python script to run for a 4140 An absolute or buildfile-relative file name of a Python script to run for a
4436 create_bundle target to perform code signing step. 4141 create_bundle target to perform code signing step.
4437 4142
4438 See also "gn help create_bundle". 4143 See also "gn help create_bundle".
4439
4440
4441 ``` 4144 ```
4442 ### <a name="code_signing_sources"></a>**code_signing_sources**: [file list] Sou rces for code signing step. 4145 ### <a name="code_signing_sources"></a>**code_signing_sources**: [file list] Sou rces for code signing step.
4443 4146
4444 ``` 4147 ```
4445 A list of files used as input for code signing script step of a create_bundle 4148 A list of files used as input for code signing script step of a create_bundle
4446 target. Non-absolute paths will be resolved relative to the current build 4149 target. Non-absolute paths will be resolved relative to the current build
4447 file. 4150 file.
4448 4151
4449 See also "gn help create_bundle". 4152 See also "gn help create_bundle".
4450
4451
4452 ``` 4153 ```
4453 ### <a name="complete_static_lib"></a>**complete_static_lib**: [boolean] Links a ll deps into a static library. 4154 ### <a name="complete_static_lib"></a>**complete_static_lib**: [boolean] Links a ll deps into a static library.
4454 4155
4455 ``` 4156 ```
4456 A static library normally doesn't include code from dependencies, but instead 4157 A static library normally doesn't include code from dependencies, but instead
4457 forwards the static libraries and source sets in its deps up the dependency 4158 forwards the static libraries and source sets in its deps up the dependency
4458 chain until a linkable target (an executable or shared library) is reached. 4159 chain until a linkable target (an executable or shared library) is reached.
4459 The final linkable target only links each static library once, even if it 4160 The final linkable target only links each static library once, even if it
4460 appears more than once in its dependency graph. 4161 appears more than once in its dependency graph.
4461 4162
4462 In some cases the static library might be the final desired output. For 4163 In some cases the static library might be the final desired output. For
4463 example, you may be producing a static library for distribution to third 4164 example, you may be producing a static library for distribution to third
4464 parties. In this case, the static library should include code for all 4165 parties. In this case, the static library should include code for all
4465 dependencies in one complete package. However, complete static libraries 4166 dependencies in one complete package. However, complete static libraries
4466 themselves are never linked into other complete static libraries. All 4167 themselves are never linked into other complete static libraries. All
4467 complete static libraries are for distribution and linking them in would 4168 complete static libraries are for distribution and linking them in would
4468 cause code duplication in this case. If the static library is not for 4169 cause code duplication in this case. If the static library is not for
4469 distribution, it should not be complete. 4170 distribution, it should not be complete.
4470 4171
4471 GN treats non-complete static libraries as source sets when they are linked 4172 GN treats non-complete static libraries as source sets when they are linked
4472 into complete static libraries. This is done because some tools like AR do 4173 into complete static libraries. This is done because some tools like AR do
4473 not handle dependent static libraries properly. This makes it easier to write 4174 not handle dependent static libraries properly. This makes it easier to write
4474 "alink" rules. 4175 "alink" rules.
4475 4176
4476 In rare cases it makes sense to list a header in more than one target if it 4177 In rare cases it makes sense to list a header in more than one target if it
4477 could be considered conceptually a member of both. libraries. 4178 could be considered conceptually a member of both. libraries.
4478
4479 ``` 4179 ```
4480 4180
4481 #### **Example** 4181 #### **Example**
4482 4182
4483 ``` 4183 ```
4484 static_library("foo") { 4184 static_library("foo") {
4485 complete_static_lib = true 4185 complete_static_lib = true
4486 deps = [ "bar" ] 4186 deps = [ "bar" ]
4487 } 4187 }
4488
4489
4490 ``` 4188 ```
4491 ### <a name="configs"></a>**configs**: Configs applying to this target or config . 4189 ### <a name="configs"></a>**configs**: Configs applying to this target or config .
4492 4190
4493 ``` 4191 ```
4494 A list of config labels. 4192 A list of config labels.
4495
4496 ``` 4193 ```
4497 4194
4498 #### **Configs on a target** 4195 #### **Configs on a target**
4499 4196
4500 ``` 4197 ```
4501 When used on a target, the include_dirs, defines, etc. in each config are 4198 When used on a target, the include_dirs, defines, etc. in each config are
4502 appended in the order they appear to the compile command for each file in the 4199 appended in the order they appear to the compile command for each file in the
4503 target. They will appear after the include_dirs, defines, etc. that the 4200 target. They will appear after the include_dirs, defines, etc. that the
4504 target sets directly. 4201 target sets directly.
4505 4202
4506 Since configs apply after the values set on a target, directly setting a 4203 Since configs apply after the values set on a target, directly setting a
4507 compiler flag will prepend it to the command line. If you want to append a 4204 compiler flag will prepend it to the command line. If you want to append a
4508 flag instead, you can put that flag in a one-off config and append that 4205 flag instead, you can put that flag in a one-off config and append that
4509 config to the target's configs list. 4206 config to the target's configs list.
4510 4207
4511 The build configuration script will generally set up the default configs 4208 The build configuration script will generally set up the default configs
4512 applying to a given target type (see "set_defaults"). When a target is being 4209 applying to a given target type (see "set_defaults"). When a target is being
4513 defined, it can add to or remove from this list. 4210 defined, it can add to or remove from this list.
4514
4515 ``` 4211 ```
4516 4212
4517 #### **Configs on a config** 4213 #### **Configs on a config**
4518 4214
4519 ``` 4215 ```
4520 It is possible to create composite configs by specifying configs on a config. 4216 It is possible to create composite configs by specifying configs on a config.
4521 One might do this to forward values, or to factor out blocks of settings from 4217 One might do this to forward values, or to factor out blocks of settings from
4522 very large configs into more manageable named chunks. 4218 very large configs into more manageable named chunks.
4523 4219
4524 In this case, the composite config is expanded to be the concatenation of its 4220 In this case, the composite config is expanded to be the concatenation of its
4525 own values, and in order, the values from its sub-configs *before* anything 4221 own values, and in order, the values from its sub-configs *before* anything
4526 else happens. This has some ramifications: 4222 else happens. This has some ramifications:
4527 4223
4528 - A target has no visibility into a config's sub-configs. Target code only 4224 - A target has no visibility into a config's sub-configs. Target code only
4529 sees the name of the composite config. It can't remove sub-configs or opt 4225 sees the name of the composite config. It can't remove sub-configs or opt
4530 in to only parts of it. The composite config may not even be defined 4226 in to only parts of it. The composite config may not even be defined
4531 before the target is. 4227 before the target is.
4532 4228
4533 - You can get duplication of values if a config is listed twice, say, on a 4229 - You can get duplication of values if a config is listed twice, say, on a
4534 target and in a sub-config that also applies. In other cases, the configs 4230 target and in a sub-config that also applies. In other cases, the configs
4535 applying to a target are de-duped. It's expected that if a config is 4231 applying to a target are de-duped. It's expected that if a config is
4536 listed as a sub-config that it is only used in that context. (Note that 4232 listed as a sub-config that it is only used in that context. (Note that
4537 it's possible to fix this and de-dupe, but it's not normally relevant and 4233 it's possible to fix this and de-dupe, but it's not normally relevant and
4538 complicates the implementation.) 4234 complicates the implementation.)
4539
4540 ``` 4235 ```
4541 4236
4542 #### **Ordering of flags and values** 4237 #### **Ordering of flags and values**
4543 4238
4544 ``` 4239 ```
4545 1. Those set on the current target (not in a config). 4240 1. Those set on the current target (not in a config).
4546 2. Those set on the "configs" on the target in order that the 4241 2. Those set on the "configs" on the target in order that the
4547 configs appear in the list. 4242 configs appear in the list.
4548 3. Those set on the "all_dependent_configs" on the target in order 4243 3. Those set on the "all_dependent_configs" on the target in order
4549 that the configs appear in the list. 4244 that the configs appear in the list.
4550 4. Those set on the "public_configs" on the target in order that 4245 4. Those set on the "public_configs" on the target in order that
4551 those configs appear in the list. 4246 those configs appear in the list.
4552 5. all_dependent_configs pulled from dependencies, in the order of 4247 5. all_dependent_configs pulled from dependencies, in the order of
4553 the "deps" list. This is done recursively. If a config appears 4248 the "deps" list. This is done recursively. If a config appears
4554 more than once, only the first occurance will be used. 4249 more than once, only the first occurance will be used.
4555 6. public_configs pulled from dependencies, in the order of the 4250 6. public_configs pulled from dependencies, in the order of the
4556 "deps" list. If a dependency is public, they will be applied 4251 "deps" list. If a dependency is public, they will be applied
4557 recursively. 4252 recursively.
4558
4559 ``` 4253 ```
4560 4254
4561 #### **Example** 4255 #### **Example**
4562 4256
4563 ``` 4257 ```
4564 # Configs on a target. 4258 # Configs on a target.
4565 source_set("foo") { 4259 source_set("foo") {
4566 # Don't use the default RTTI config that BUILDCONFIG applied to us. 4260 # Don't use the default RTTI config that BUILDCONFIG applied to us.
4567 configs -= [ "//build:no_rtti" ] 4261 configs -= [ "//build:no_rtti" ]
4568 4262
4569 # Add some of our own settings. 4263 # Add some of our own settings.
4570 configs += [ ":mysettings" ] 4264 configs += [ ":mysettings" ]
4571 } 4265 }
4572 4266
4573 # Create a default_optimization config that forwards to one of a set of more 4267 # Create a default_optimization config that forwards to one of a set of more
4574 # specialized configs depending on build flags. This pattern is useful 4268 # specialized configs depending on build flags. This pattern is useful
4575 # because it allows a target to opt in to either a default set, or a more 4269 # because it allows a target to opt in to either a default set, or a more
4576 # specific set, while avoid duplicating the settings in two places. 4270 # specific set, while avoid duplicating the settings in two places.
4577 config("super_optimization") { 4271 config("super_optimization") {
4578 cflags = [ ... ] 4272 cflags = [ ... ]
4579 } 4273 }
4580 config("default_optimization") { 4274 config("default_optimization") {
4581 if (optimize_everything) { 4275 if (optimize_everything) {
4582 configs = [ ":super_optimization" ] 4276 configs = [ ":super_optimization" ]
4583 } else { 4277 } else {
4584 configs = [ ":no_optimization" ] 4278 configs = [ ":no_optimization" ]
4585 } 4279 }
4586 } 4280 }
4587
4588
4589 ``` 4281 ```
4590 ### <a name="console"></a>**console**: Run this action in the console pool. 4282 ### <a name="console"></a>**console**: Run this action in the console pool.
4591 4283
4592 ``` 4284 ```
4593 Boolean. Defaults to false. 4285 Boolean. Defaults to false.
4594 4286
4595 Actions marked "console = true" will be run in the built-in ninja "console" 4287 Actions marked "console = true" will be run in the built-in ninja "console"
4596 pool. They will have access to real stdin and stdout, and output will not be 4288 pool. They will have access to real stdin and stdout, and output will not be
4597 buffered by ninja. This can be useful for long-running actions with progress 4289 buffered by ninja. This can be useful for long-running actions with progress
4598 logs, or actions that require user input. 4290 logs, or actions that require user input.
4599 4291
4600 Only one console pool target can run at any one time in Ninja. Refer to the 4292 Only one console pool target can run at any one time in Ninja. Refer to the
4601 Ninja documentation on the console pool for more info. 4293 Ninja documentation on the console pool for more info.
4602
4603 ``` 4294 ```
4604 4295
4605 #### **Example** 4296 #### **Example**
4606 4297
4607 ``` 4298 ```
4608 action("long_action_with_progress_logs") { 4299 action("long_action_with_progress_logs") {
4609 console = true 4300 console = true
4610 } 4301 }
4611
4612
4613 ``` 4302 ```
4614 ### <a name="data"></a>**data**: Runtime data file dependencies. 4303 ### <a name="data"></a>**data**: Runtime data file dependencies.
4615 4304
4616 ``` 4305 ```
4617 Lists files or directories required to run the given target. These are 4306 Lists files or directories required to run the given target. These are
4618 typically data files or directories of data files. The paths are interpreted 4307 typically data files or directories of data files. The paths are interpreted
4619 as being relative to the current build file. Since these are runtime 4308 as being relative to the current build file. Since these are runtime
4620 dependencies, they do not affect which targets are built or when. To declare 4309 dependencies, they do not affect which targets are built or when. To declare
4621 input files to a script, use "inputs". 4310 input files to a script, use "inputs".
4622 4311
4623 Appearing in the "data" section does not imply any special handling such as 4312 Appearing in the "data" section does not imply any special handling such as
4624 copying them to the output directory. This is just used for declaring runtime 4313 copying them to the output directory. This is just used for declaring runtime
4625 dependencies. Runtime dependencies can be queried using the "runtime_deps" 4314 dependencies. Runtime dependencies can be queried using the "runtime_deps"
4626 category of "gn desc" or written during build generation via 4315 category of "gn desc" or written during build generation via
4627 "--runtime-deps-list-file". 4316 "--runtime-deps-list-file".
4628 4317
4629 GN doesn't require data files to exist at build-time. So actions that produce 4318 GN doesn't require data files to exist at build-time. So actions that produce
4630 files that are in turn runtime dependencies can list those generated files 4319 files that are in turn runtime dependencies can list those generated files
4631 both in the "outputs" list as well as the "data" list. 4320 both in the "outputs" list as well as the "data" list.
4632 4321
4633 By convention, directories are listed with a trailing slash: 4322 By convention, directories are listed with a trailing slash:
4634 data = [ "test/data/" ] 4323 data = [ "test/data/" ]
4635 However, no verification is done on these so GN doesn't enforce this. The 4324 However, no verification is done on these so GN doesn't enforce this. The
4636 paths are just rebased and passed along when requested. 4325 paths are just rebased and passed along when requested.
4637 4326
4638 Note: On iOS and OS X, create_bundle targets will not be recursed into when 4327 Note: On iOS and OS X, create_bundle targets will not be recursed into when
4639 gathering data. See "gn help create_bundle" for details. 4328 gathering data. See "gn help create_bundle" for details.
4640 4329
4641 See "gn help runtime_deps" for how these are used. 4330 See "gn help runtime_deps" for how these are used.
4642
4643
4644 ``` 4331 ```
4645 ### <a name="data_deps"></a>**data_deps**: Non-linked dependencies. 4332 ### <a name="data_deps"></a>**data_deps**: Non-linked dependencies.
4646 4333
4647 ``` 4334 ```
4648 A list of target labels. 4335 A list of target labels.
4649 4336
4650 Specifies dependencies of a target that are not actually linked into the 4337 Specifies dependencies of a target that are not actually linked into the
4651 current target. Such dependencies will be built and will be available at 4338 current target. Such dependencies will be built and will be available at
4652 runtime. 4339 runtime.
4653 4340
4654 This is normally used for things like plugins or helper programs that a 4341 This is normally used for things like plugins or helper programs that a
4655 target needs at runtime. 4342 target needs at runtime.
4656 4343
4657 Note: On iOS and OS X, create_bundle targets will not be recursed into when 4344 Note: On iOS and OS X, create_bundle targets will not be recursed into when
4658 gathering data_deps. See "gn help create_bundle" for details. 4345 gathering data_deps. See "gn help create_bundle" for details.
4659 4346
4660 See also "gn help deps" and "gn help data". 4347 See also "gn help deps" and "gn help data".
4661
4662 ``` 4348 ```
4663 4349
4664 #### **Example** 4350 #### **Example**
4665 4351
4666 ``` 4352 ```
4667 executable("foo") { 4353 executable("foo") {
4668 deps = [ "//base" ] 4354 deps = [ "//base" ]
4669 data_deps = [ "//plugins:my_runtime_plugin" ] 4355 data_deps = [ "//plugins:my_runtime_plugin" ]
4670 } 4356 }
4671
4672
4673 ``` 4357 ```
4674 ### <a name="defines"></a>**defines**: C preprocessor defines. 4358 ### <a name="defines"></a>**defines**: C preprocessor defines.
4675 4359
4676 ``` 4360 ```
4677 A list of strings 4361 A list of strings
4678 4362
4679 These strings will be passed to the C/C++ compiler as #defines. The strings 4363 These strings will be passed to the C/C++ compiler as #defines. The strings
4680 may or may not include an "=" to assign a value. 4364 may or may not include an "=" to assign a value.
4681
4682 ``` 4365 ```
4683 4366
4684 #### **Ordering of flags and values** 4367 #### **Ordering of flags and values**
4685 4368
4686 ``` 4369 ```
4687 1. Those set on the current target (not in a config). 4370 1. Those set on the current target (not in a config).
4688 2. Those set on the "configs" on the target in order that the 4371 2. Those set on the "configs" on the target in order that the
4689 configs appear in the list. 4372 configs appear in the list.
4690 3. Those set on the "all_dependent_configs" on the target in order 4373 3. Those set on the "all_dependent_configs" on the target in order
4691 that the configs appear in the list. 4374 that the configs appear in the list.
4692 4. Those set on the "public_configs" on the target in order that 4375 4. Those set on the "public_configs" on the target in order that
4693 those configs appear in the list. 4376 those configs appear in the list.
4694 5. all_dependent_configs pulled from dependencies, in the order of 4377 5. all_dependent_configs pulled from dependencies, in the order of
4695 the "deps" list. This is done recursively. If a config appears 4378 the "deps" list. This is done recursively. If a config appears
4696 more than once, only the first occurance will be used. 4379 more than once, only the first occurance will be used.
4697 6. public_configs pulled from dependencies, in the order of the 4380 6. public_configs pulled from dependencies, in the order of the
4698 "deps" list. If a dependency is public, they will be applied 4381 "deps" list. If a dependency is public, they will be applied
4699 recursively. 4382 recursively.
4700
4701 ``` 4383 ```
4702 4384
4703 #### **Example** 4385 #### **Example**
4704 4386
4705 ``` 4387 ```
4706 defines = [ "AWESOME_FEATURE", "LOG_LEVEL=3" ] 4388 defines = [ "AWESOME_FEATURE", "LOG_LEVEL=3" ]
4707
4708
4709 ``` 4389 ```
4710 ### <a name="depfile"></a>**depfile**: [string] File name for input dependencies for actions. 4390 ### <a name="depfile"></a>**depfile**: [string] File name for input dependencies for actions.
4711 4391
4712 ``` 4392 ```
4713 If nonempty, this string specifies that the current action or action_foreach 4393 If nonempty, this string specifies that the current action or action_foreach
4714 target will generate the given ".d" file containing the dependencies of the 4394 target will generate the given ".d" file containing the dependencies of the
4715 input. Empty or unset means that the script doesn't generate the files. 4395 input. Empty or unset means that the script doesn't generate the files.
4716 4396
4717 A depfile should be used only when a target depends on files that are not 4397 A depfile should be used only when a target depends on files that are not
4718 already specified by a target's inputs and sources. Likewise, depfiles should 4398 already specified by a target's inputs and sources. Likewise, depfiles should
4719 specify only those dependencies not already included in sources or inputs. 4399 specify only those dependencies not already included in sources or inputs.
4720 4400
4721 The .d file should go in the target output directory. If you have more than 4401 The .d file should go in the target output directory. If you have more than
4722 one source file that the script is being run over, you can use the output 4402 one source file that the script is being run over, you can use the output
4723 file expansions described in "gn help action_foreach" to name the .d file 4403 file expansions described in "gn help action_foreach" to name the .d file
4724 according to the input." 4404 according to the input."
4725 4405
4726 The format is that of a Makefile and all paths must be relative to the root 4406 The format is that of a Makefile and all paths must be relative to the root
4727 build directory. Only one output may be listed and it must match the first 4407 build directory. Only one output may be listed and it must match the first
4728 output of the action. 4408 output of the action.
4729 4409
4730 Although depfiles are created by an action, they should not be listed in the 4410 Although depfiles are created by an action, they should not be listed in the
4731 action's "outputs" unless another target will use the file as an input. 4411 action's "outputs" unless another target will use the file as an input.
4732
4733 ``` 4412 ```
4734 4413
4735 #### **Example** 4414 #### **Example**
4736 4415
4737 ``` 4416 ```
4738 action_foreach("myscript_target") { 4417 action_foreach("myscript_target") {
4739 script = "myscript.py" 4418 script = "myscript.py"
4740 sources = [ ... ] 4419 sources = [ ... ]
4741 4420
4742 # Locate the depfile in the output directory named like the 4421 # Locate the depfile in the output directory named like the
4743 # inputs but with a ".d" appended. 4422 # inputs but with a ".d" appended.
4744 depfile = "$relative_target_output_dir/{{source_name}}.d" 4423 depfile = "$relative_target_output_dir/{{source_name}}.d"
4745 4424
4746 # Say our script uses "-o <d file>" to indicate the depfile. 4425 # Say our script uses "-o <d file>" to indicate the depfile.
4747 args = [ "{{source}}", "-o", depfile ] 4426 args = [ "{{source}}", "-o", depfile ]
4748 } 4427 }
4749
4750
4751 ``` 4428 ```
4752 ### <a name="deps"></a>**deps**: Private linked dependencies. 4429 ### <a name="deps"></a>**deps**: Private linked dependencies.
4753 4430
4754 ``` 4431 ```
4755 A list of target labels. 4432 A list of target labels.
4756 4433
4757 Specifies private dependencies of a target. Private dependencies are 4434 Specifies private dependencies of a target. Private dependencies are
4758 propagated up the dependency tree and linked to dependant targets, but do not 4435 propagated up the dependency tree and linked to dependant targets, but do not
4759 grant the ability to include headers from the dependency. Public configs are 4436 grant the ability to include headers from the dependency. Public configs are
4760 not forwarded. 4437 not forwarded.
4761
4762 ``` 4438 ```
4763 4439
4764 #### **Details of dependency propagation** 4440 #### **Details of dependency propagation**
4765 4441
4766 ``` 4442 ```
4767 Source sets, shared libraries, and non-complete static libraries will be 4443 Source sets, shared libraries, and non-complete static libraries will be
4768 propagated up the dependency tree across groups, non-complete static 4444 propagated up the dependency tree across groups, non-complete static
4769 libraries and source sets. 4445 libraries and source sets.
4770 4446
4771 Executables, shared libraries, and complete static libraries will link all 4447 Executables, shared libraries, and complete static libraries will link all
4772 propagated targets and stop propagation. Actions and copy steps also stop 4448 propagated targets and stop propagation. Actions and copy steps also stop
4773 propagation, allowing them to take a library as an input but not force 4449 propagation, allowing them to take a library as an input but not force
4774 dependants to link to it. 4450 dependants to link to it.
4775 4451
4776 Propagation of all_dependent_configs and public_configs happens independently 4452 Propagation of all_dependent_configs and public_configs happens independently
4777 of target type. all_dependent_configs are always propagated across all types 4453 of target type. all_dependent_configs are always propagated across all types
4778 of targets, and public_configs are always propagated across public deps of 4454 of targets, and public_configs are always propagated across public deps of
4779 all types of targets. 4455 all types of targets.
4780 4456
4781 Data dependencies are propagated differently. See "gn help data_deps" and 4457 Data dependencies are propagated differently. See "gn help data_deps" and
4782 "gn help runtime_deps". 4458 "gn help runtime_deps".
4783 4459
4784 See also "public_deps". 4460 See also "public_deps".
4785
4786
4787 ``` 4461 ```
4788 ### <a name="include_dirs"></a>**include_dirs**: Additional include directories. 4462 ### <a name="include_dirs"></a>**include_dirs**: Additional include directories.
4789 4463
4790 ``` 4464 ```
4791 A list of source directories. 4465 A list of source directories.
4792 4466
4793 The directories in this list will be added to the include path for the files 4467 The directories in this list will be added to the include path for the files
4794 in the affected target. 4468 in the affected target.
4795
4796 ``` 4469 ```
4797 4470
4798 #### **Ordering of flags and values** 4471 #### **Ordering of flags and values**
4799 4472
4800 ``` 4473 ```
4801 1. Those set on the current target (not in a config). 4474 1. Those set on the current target (not in a config).
4802 2. Those set on the "configs" on the target in order that the 4475 2. Those set on the "configs" on the target in order that the
4803 configs appear in the list. 4476 configs appear in the list.
4804 3. Those set on the "all_dependent_configs" on the target in order 4477 3. Those set on the "all_dependent_configs" on the target in order
4805 that the configs appear in the list. 4478 that the configs appear in the list.
4806 4. Those set on the "public_configs" on the target in order that 4479 4. Those set on the "public_configs" on the target in order that
4807 those configs appear in the list. 4480 those configs appear in the list.
4808 5. all_dependent_configs pulled from dependencies, in the order of 4481 5. all_dependent_configs pulled from dependencies, in the order of
4809 the "deps" list. This is done recursively. If a config appears 4482 the "deps" list. This is done recursively. If a config appears
4810 more than once, only the first occurance will be used. 4483 more than once, only the first occurance will be used.
4811 6. public_configs pulled from dependencies, in the order of the 4484 6. public_configs pulled from dependencies, in the order of the
4812 "deps" list. If a dependency is public, they will be applied 4485 "deps" list. If a dependency is public, they will be applied
4813 recursively. 4486 recursively.
4814
4815 ``` 4487 ```
4816 4488
4817 #### **Example** 4489 #### **Example**
4818 4490
4819 ``` 4491 ```
4820 include_dirs = [ "src/include", "//third_party/foo" ] 4492 include_dirs = [ "src/include", "//third_party/foo" ]
4821
4822
4823 ``` 4493 ```
4824 ### <a name="inputs"></a>**inputs**: Additional compile-time dependencies. 4494 ### <a name="inputs"></a>**inputs**: Additional compile-time dependencies.
4825 4495
4826 ``` 4496 ```
4827 Inputs are compile-time dependencies of the current target. This means that 4497 Inputs are compile-time dependencies of the current target. This means that
4828 all inputs must be available before compiling any of the sources or executing 4498 all inputs must be available before compiling any of the sources or executing
4829 any actions. 4499 any actions.
4830 4500
4831 Inputs are typically only used for action and action_foreach targets. 4501 Inputs are typically only used for action and action_foreach targets.
4832
4833 ``` 4502 ```
4834 4503
4835 #### **Inputs for actions** 4504 #### **Inputs for actions**
4836 4505
4837 ``` 4506 ```
4838 For action and action_foreach targets, inputs should be the inputs to script 4507 For action and action_foreach targets, inputs should be the inputs to script
4839 that don't vary. These should be all .py files that the script uses via 4508 that don't vary. These should be all .py files that the script uses via
4840 imports (the main script itself will be an implicit dependency of the action 4509 imports (the main script itself will be an implicit dependency of the action
4841 so need not be listed). 4510 so need not be listed).
4842 4511
4843 For action targets, inputs and sources are treated the same, but from a style 4512 For action targets, inputs and sources are treated the same, but from a style
4844 perspective, it's recommended to follow the same rule as action_foreach and 4513 perspective, it's recommended to follow the same rule as action_foreach and
4845 put helper files in the inputs, and the data used by the script (if any) in 4514 put helper files in the inputs, and the data used by the script (if any) in
4846 sources. 4515 sources.
4847 4516
4848 Note that another way to declare input dependencies from an action is to have 4517 Note that another way to declare input dependencies from an action is to have
4849 the action write a depfile (see "gn help depfile"). This allows the script to 4518 the action write a depfile (see "gn help depfile"). This allows the script to
4850 dynamically write input dependencies, that might not be known until actually 4519 dynamically write input dependencies, that might not be known until actually
4851 executing the script. This is more efficient than doing processing while 4520 executing the script. This is more efficient than doing processing while
4852 running GN to determine the inputs, and is easier to keep in-sync than 4521 running GN to determine the inputs, and is easier to keep in-sync than
4853 hardcoding the list. 4522 hardcoding the list.
4854
4855 ``` 4523 ```
4856 4524
4857 #### **Script input gotchas** 4525 #### **Script input gotchas**
4858 4526
4859 ``` 4527 ```
4860 It may be tempting to write a script that enumerates all files in a directory 4528 It may be tempting to write a script that enumerates all files in a directory
4861 as inputs. Don't do this! Even if you specify all the files in the inputs or 4529 as inputs. Don't do this! Even if you specify all the files in the inputs or
4862 sources in the GN target (or worse, enumerate the files in an exec_script 4530 sources in the GN target (or worse, enumerate the files in an exec_script
4863 call when running GN, which will be slow), the dependencies will be broken. 4531 call when running GN, which will be slow), the dependencies will be broken.
4864 4532
4865 The problem happens if a file is ever removed because the inputs are not 4533 The problem happens if a file is ever removed because the inputs are not
4866 listed on the command line to the script. Because the script hasn't changed 4534 listed on the command line to the script. Because the script hasn't changed
4867 and all inputs are up to date, the script will not re-run and you will get a 4535 and all inputs are up to date, the script will not re-run and you will get a
4868 stale build. Instead, either list all inputs on the command line to the 4536 stale build. Instead, either list all inputs on the command line to the
4869 script, or if there are many, create a separate list file that the script 4537 script, or if there are many, create a separate list file that the script
4870 reads. As long as this file is listed in the inputs, the build will detect 4538 reads. As long as this file is listed in the inputs, the build will detect
4871 when it has changed in any way and the action will re-run. 4539 when it has changed in any way and the action will re-run.
4872
4873 ``` 4540 ```
4874 4541
4875 #### **Inputs for binary targets** 4542 #### **Inputs for binary targets**
4876 4543
4877 ``` 4544 ```
4878 Any input dependencies will be resolved before compiling any sources. 4545 Any input dependencies will be resolved before compiling any sources.
4879 Normally, all actions that a target depends on will be run before any files 4546 Normally, all actions that a target depends on will be run before any files
4880 in a target are compiled. So if you depend on generated headers, you do not 4547 in a target are compiled. So if you depend on generated headers, you do not
4881 typically need to list them in the inputs section. 4548 typically need to list them in the inputs section.
4882 4549
4883 Inputs for binary targets will be treated as implicit dependencies, meaning 4550 Inputs for binary targets will be treated as implicit dependencies, meaning
4884 that changes in any of the inputs will force all sources in the target to be 4551 that changes in any of the inputs will force all sources in the target to be
4885 recompiled. If an input only applies to a subset of source files, you may 4552 recompiled. If an input only applies to a subset of source files, you may
4886 want to split those into a separate target to avoid unnecessary recompiles. 4553 want to split those into a separate target to avoid unnecessary recompiles.
4887
4888 ``` 4554 ```
4889 4555
4890 #### **Example** 4556 #### **Example**
4891 4557
4892 ``` 4558 ```
4893 action("myscript") { 4559 action("myscript") {
4894 script = "domything.py" 4560 script = "domything.py"
4895 inputs = [ "input.data" ] 4561 inputs = [ "input.data" ]
4896 } 4562 }
4897
4898
4899 ``` 4563 ```
4900 ### <a name="ldflags"></a>**ldflags**: Flags passed to the linker. 4564 ### <a name="ldflags"></a>**ldflags**: Flags passed to the linker.
4901 4565
4902 ``` 4566 ```
4903 A list of strings. 4567 A list of strings.
4904 4568
4905 These flags are passed on the command-line to the linker and generally 4569 These flags are passed on the command-line to the linker and generally
4906 specify various linking options. Most targets will not need these and will 4570 specify various linking options. Most targets will not need these and will
4907 use "libs" and "lib_dirs" instead. 4571 use "libs" and "lib_dirs" instead.
4908 4572
4909 ldflags are NOT pushed to dependents, so applying ldflags to source sets or 4573 ldflags are NOT pushed to dependents, so applying ldflags to source sets or
4910 static libraries will be a no-op. If you want to apply ldflags to dependent 4574 static libraries will be a no-op. If you want to apply ldflags to dependent
4911 targets, put them in a config and set it in the all_dependent_configs or 4575 targets, put them in a config and set it in the all_dependent_configs or
4912 public_configs. 4576 public_configs.
4913
4914 ``` 4577 ```
4915 4578
4916 #### **Ordering of flags and values** 4579 #### **Ordering of flags and values**
4917 4580
4918 ``` 4581 ```
4919 1. Those set on the current target (not in a config). 4582 1. Those set on the current target (not in a config).
4920 2. Those set on the "configs" on the target in order that the 4583 2. Those set on the "configs" on the target in order that the
4921 configs appear in the list. 4584 configs appear in the list.
4922 3. Those set on the "all_dependent_configs" on the target in order 4585 3. Those set on the "all_dependent_configs" on the target in order
4923 that the configs appear in the list. 4586 that the configs appear in the list.
4924 4. Those set on the "public_configs" on the target in order that 4587 4. Those set on the "public_configs" on the target in order that
4925 those configs appear in the list. 4588 those configs appear in the list.
4926 5. all_dependent_configs pulled from dependencies, in the order of 4589 5. all_dependent_configs pulled from dependencies, in the order of
4927 the "deps" list. This is done recursively. If a config appears 4590 the "deps" list. This is done recursively. If a config appears
4928 more than once, only the first occurance will be used. 4591 more than once, only the first occurance will be used.
4929 6. public_configs pulled from dependencies, in the order of the 4592 6. public_configs pulled from dependencies, in the order of the
4930 "deps" list. If a dependency is public, they will be applied 4593 "deps" list. If a dependency is public, they will be applied
4931 recursively. 4594 recursively.
4932
4933
4934 ``` 4595 ```
4935 ### <a name="lib_dirs"></a>**lib_dirs**: Additional library directories. 4596 ### <a name="lib_dirs"></a>**lib_dirs**: Additional library directories.
4936 4597
4937 ``` 4598 ```
4938 A list of directories. 4599 A list of directories.
4939 4600
4940 Specifies additional directories passed to the linker for searching for the 4601 Specifies additional directories passed to the linker for searching for the
4941 required libraries. If an item is not an absolute path, it will be treated as 4602 required libraries. If an item is not an absolute path, it will be treated as
4942 being relative to the current build file. 4603 being relative to the current build file.
4943 4604
4944 libs and lib_dirs work differently than other flags in two respects. 4605 libs and lib_dirs work differently than other flags in two respects.
4945 First, then are inherited across static library boundaries until a 4606 First, then are inherited across static library boundaries until a
4946 shared library or executable target is reached. Second, they are 4607 shared library or executable target is reached. Second, they are
4947 uniquified so each one is only passed once (the first instance of it 4608 uniquified so each one is only passed once (the first instance of it
4948 will be the one used). 4609 will be the one used).
4949
4950 ``` 4610 ```
4951 4611
4952 #### **Ordering of flags and values** 4612 #### **Ordering of flags and values**
4953 4613
4954 ``` 4614 ```
4955 1. Those set on the current target (not in a config). 4615 1. Those set on the current target (not in a config).
4956 2. Those set on the "configs" on the target in order that the 4616 2. Those set on the "configs" on the target in order that the
4957 configs appear in the list. 4617 configs appear in the list.
4958 3. Those set on the "all_dependent_configs" on the target in order 4618 3. Those set on the "all_dependent_configs" on the target in order
4959 that the configs appear in the list. 4619 that the configs appear in the list.
4960 4. Those set on the "public_configs" on the target in order that 4620 4. Those set on the "public_configs" on the target in order that
4961 those configs appear in the list. 4621 those configs appear in the list.
4962 5. all_dependent_configs pulled from dependencies, in the order of 4622 5. all_dependent_configs pulled from dependencies, in the order of
4963 the "deps" list. This is done recursively. If a config appears 4623 the "deps" list. This is done recursively. If a config appears
4964 more than once, only the first occurance will be used. 4624 more than once, only the first occurance will be used.
4965 6. public_configs pulled from dependencies, in the order of the 4625 6. public_configs pulled from dependencies, in the order of the
4966 "deps" list. If a dependency is public, they will be applied 4626 "deps" list. If a dependency is public, they will be applied
4967 recursively. 4627 recursively.
4968 4628
4969 For "libs" and "lib_dirs" only, the values propagated from 4629 For "libs" and "lib_dirs" only, the values propagated from
4970 dependencies (as described above) are applied last assuming they 4630 dependencies (as described above) are applied last assuming they
4971 are not already in the list. 4631 are not already in the list.
4972
4973 ``` 4632 ```
4974 4633
4975 #### **Example** 4634 #### **Example**
4976 4635
4977 ``` 4636 ```
4978 lib_dirs = [ "/usr/lib/foo", "lib/doom_melon" ] 4637 lib_dirs = [ "/usr/lib/foo", "lib/doom_melon" ]
4979
4980
4981 ``` 4638 ```
4982 ### <a name="libs"></a>**libs**: Additional libraries to link. 4639 ### <a name="libs"></a>**libs**: Additional libraries to link.
4983 4640
4984 ``` 4641 ```
4985 A list of library names or library paths. 4642 A list of library names or library paths.
4986 4643
4987 These libraries will be linked into the final binary (executable or shared 4644 These libraries will be linked into the final binary (executable or shared
4988 library) containing the current target. 4645 library) containing the current target.
4989 4646
4990 libs and lib_dirs work differently than other flags in two respects. 4647 libs and lib_dirs work differently than other flags in two respects.
4991 First, then are inherited across static library boundaries until a 4648 First, then are inherited across static library boundaries until a
4992 shared library or executable target is reached. Second, they are 4649 shared library or executable target is reached. Second, they are
4993 uniquified so each one is only passed once (the first instance of it 4650 uniquified so each one is only passed once (the first instance of it
4994 will be the one used). 4651 will be the one used).
4995
4996 ``` 4652 ```
4997 4653
4998 #### **Types of libs** 4654 #### **Types of libs**
4999 4655
5000 ``` 4656 ```
5001 There are several different things that can be expressed in libs: 4657 There are several different things that can be expressed in libs:
5002 4658
5003 File paths 4659 File paths
5004 Values containing '/' will be treated as references to files in the 4660 Values containing '/' will be treated as references to files in the
5005 checkout. They will be rebased to be relative to the build directory and 4661 checkout. They will be rebased to be relative to the build directory and
5006 specified in the "libs" for linker tools. This facility should be used 4662 specified in the "libs" for linker tools. This facility should be used
5007 for libraries that are checked in to the version control. For libraries 4663 for libraries that are checked in to the version control. For libraries
5008 that are generated by the build, use normal GN deps to link them. 4664 that are generated by the build, use normal GN deps to link them.
5009 4665
5010 System libraries 4666 System libraries
5011 Values not containing '/' will be treated as system library names. These 4667 Values not containing '/' will be treated as system library names. These
5012 will be passed unmodified to the linker and prefixed with the 4668 will be passed unmodified to the linker and prefixed with the
5013 "lib_prefix" attribute of the linker tool. Generally you would set the 4669 "lib_prefix" attribute of the linker tool. Generally you would set the
5014 "lib_dirs" so the given library is found. Your BUILD.gn file should not 4670 "lib_dirs" so the given library is found. Your BUILD.gn file should not
5015 specify the switch (like "-l"): this will be encoded in the "lib_prefix" 4671 specify the switch (like "-l"): this will be encoded in the "lib_prefix"
5016 of the tool. 4672 of the tool.
5017 4673
5018 Apple frameworks 4674 Apple frameworks
5019 System libraries ending in ".framework" will be special-cased: the switch 4675 System libraries ending in ".framework" will be special-cased: the switch
5020 "-framework" will be prepended instead of the lib_prefix, and the 4676 "-framework" will be prepended instead of the lib_prefix, and the
5021 ".framework" suffix will be trimmed. This is to support the way Mac links 4677 ".framework" suffix will be trimmed. This is to support the way Mac links
5022 framework dependencies. 4678 framework dependencies.
5023
5024 ``` 4679 ```
5025 4680
5026 #### **Ordering of flags and values** 4681 #### **Ordering of flags and values**
5027 4682
5028 ``` 4683 ```
5029 1. Those set on the current target (not in a config). 4684 1. Those set on the current target (not in a config).
5030 2. Those set on the "configs" on the target in order that the 4685 2. Those set on the "configs" on the target in order that the
5031 configs appear in the list. 4686 configs appear in the list.
5032 3. Those set on the "all_dependent_configs" on the target in order 4687 3. Those set on the "all_dependent_configs" on the target in order
5033 that the configs appear in the list. 4688 that the configs appear in the list.
5034 4. Those set on the "public_configs" on the target in order that 4689 4. Those set on the "public_configs" on the target in order that
5035 those configs appear in the list. 4690 those configs appear in the list.
5036 5. all_dependent_configs pulled from dependencies, in the order of 4691 5. all_dependent_configs pulled from dependencies, in the order of
5037 the "deps" list. This is done recursively. If a config appears 4692 the "deps" list. This is done recursively. If a config appears
5038 more than once, only the first occurance will be used. 4693 more than once, only the first occurance will be used.
5039 6. public_configs pulled from dependencies, in the order of the 4694 6. public_configs pulled from dependencies, in the order of the
5040 "deps" list. If a dependency is public, they will be applied 4695 "deps" list. If a dependency is public, they will be applied
5041 recursively. 4696 recursively.
5042 4697
5043 For "libs" and "lib_dirs" only, the values propagated from 4698 For "libs" and "lib_dirs" only, the values propagated from
5044 dependencies (as described above) are applied last assuming they 4699 dependencies (as described above) are applied last assuming they
5045 are not already in the list. 4700 are not already in the list.
5046
5047 ``` 4701 ```
5048 4702
5049 #### **Examples** 4703 #### **Examples**
5050 4704
5051 ``` 4705 ```
5052 On Windows: 4706 On Windows:
5053 libs = [ "ctl3d.lib" ] 4707 libs = [ "ctl3d.lib" ]
5054 4708
5055 On Linux: 4709 On Linux:
5056 libs = [ "ld" ] 4710 libs = [ "ld" ]
5057
5058
5059 ``` 4711 ```
5060 ### <a name="output_dir"></a>**output_dir**: [directory] Directory to put output file in. 4712 ### <a name="output_dir"></a>**output_dir**: [directory] Directory to put output file in.
5061 4713
5062 ``` 4714 ```
5063 For library and executable targets, overrides the directory for the final 4715 For library and executable targets, overrides the directory for the final
5064 output. This must be in the root_build_dir or a child thereof. 4716 output. This must be in the root_build_dir or a child thereof.
5065 4717
5066 This should generally be in the root_out_dir or a subdirectory thereof (the 4718 This should generally be in the root_out_dir or a subdirectory thereof (the
5067 root_out_dir will be the same as the root_build_dir for the default 4719 root_out_dir will be the same as the root_build_dir for the default
5068 toolchain, and will be a subdirectory for other toolchains). Not putting the 4720 toolchain, and will be a subdirectory for other toolchains). Not putting the
5069 output in a subdirectory of root_out_dir can result in collisions between 4721 output in a subdirectory of root_out_dir can result in collisions between
5070 different toolchains, so you will need to take steps to ensure that your 4722 different toolchains, so you will need to take steps to ensure that your
5071 target is only present in one toolchain. 4723 target is only present in one toolchain.
5072 4724
5073 Normally the toolchain specifies the output directory for libraries and 4725 Normally the toolchain specifies the output directory for libraries and
5074 executables (see "gn help tool"). You will have to consult that for the 4726 executables (see "gn help tool"). You will have to consult that for the
5075 default location. The default location will be used if output_dir is 4727 default location. The default location will be used if output_dir is
5076 undefined or empty. 4728 undefined or empty.
5077
5078 ``` 4729 ```
5079 4730
5080 #### **Example** 4731 #### **Example**
5081 4732
5082 ``` 4733 ```
5083 shared_library("doom_melon") { 4734 shared_library("doom_melon") {
5084 output_dir = "$root_out_dir/plugin_libs" 4735 output_dir = "$root_out_dir/plugin_libs"
5085 ... 4736 ...
5086 } 4737 }
5087
5088
5089 ``` 4738 ```
5090 ### <a name="output_extension"></a>**output_extension**: Value to use for the ou tput's file extension. 4739 ### <a name="output_extension"></a>**output_extension**: Value to use for the ou tput's file extension.
5091 4740
5092 ``` 4741 ```
5093 Normally the file extension for a target is based on the target type and the 4742 Normally the file extension for a target is based on the target type and the
5094 operating system, but in rare cases you will need to override the name (for 4743 operating system, but in rare cases you will need to override the name (for
5095 example to use "libfreetype.so.6" instead of libfreetype.so on Linux). 4744 example to use "libfreetype.so.6" instead of libfreetype.so on Linux).
5096 4745
5097 This value should not include a leading dot. If undefined, the default 4746 This value should not include a leading dot. If undefined, the default
5098 specified on the tool will be used. If set to the empty string, no output 4747 specified on the tool will be used. If set to the empty string, no output
5099 extension will be used. 4748 extension will be used.
5100 4749
5101 The output_extension will be used to set the "{{output_extension}}" expansion 4750 The output_extension will be used to set the "{{output_extension}}" expansion
5102 which the linker tool will generally use to specify the output file name. See 4751 which the linker tool will generally use to specify the output file name. See
5103 "gn help tool". 4752 "gn help tool".
5104
5105 ``` 4753 ```
5106 4754
5107 #### **Example** 4755 #### **Example**
5108 4756
5109 ``` 4757 ```
5110 shared_library("freetype") { 4758 shared_library("freetype") {
5111 if (is_linux) { 4759 if (is_linux) {
5112 # Call the output "libfreetype.so.6" 4760 # Call the output "libfreetype.so.6"
5113 output_extension = "so.6" 4761 output_extension = "so.6"
5114 } 4762 }
5115 ... 4763 ...
5116 } 4764 }
5117 4765
5118 # On Windows, generate a "mysettings.cpl" control panel applet. Control panel 4766 # On Windows, generate a "mysettings.cpl" control panel applet. Control panel
5119 # applets are actually special shared libraries. 4767 # applets are actually special shared libraries.
5120 if (is_win) { 4768 if (is_win) {
5121 shared_library("mysettings") { 4769 shared_library("mysettings") {
5122 output_extension = "cpl" 4770 output_extension = "cpl"
5123 ... 4771 ...
5124 } 4772 }
5125 } 4773 }
5126
5127
5128 ``` 4774 ```
5129 ### <a name="output_name"></a>**output_name**: Define a name for the output file other than the default. 4775 ### <a name="output_name"></a>**output_name**: Define a name for the output file other than the default.
5130 4776
5131 ``` 4777 ```
5132 Normally the output name of a target will be based on the target name, so the 4778 Normally the output name of a target will be based on the target name, so the
5133 target "//foo/bar:bar_unittests" will generate an output file such as 4779 target "//foo/bar:bar_unittests" will generate an output file such as
5134 "bar_unittests.exe" (using Windows as an example). 4780 "bar_unittests.exe" (using Windows as an example).
5135 4781
5136 Sometimes you will want an alternate name to avoid collisions or if the 4782 Sometimes you will want an alternate name to avoid collisions or if the
5137 internal name isn't appropriate for public distribution. 4783 internal name isn't appropriate for public distribution.
5138 4784
5139 The output name should have no extension or prefixes, these will be added 4785 The output name should have no extension or prefixes, these will be added
5140 using the default system rules. For example, on Linux an output name of "foo" 4786 using the default system rules. For example, on Linux an output name of "foo"
5141 will produce a shared library "libfoo.so". There is no way to override the 4787 will produce a shared library "libfoo.so". There is no way to override the
5142 output prefix of a linker tool on a per- target basis. If you need more 4788 output prefix of a linker tool on a per- target basis. If you need more
5143 flexibility, create a copy target to produce the file you want. 4789 flexibility, create a copy target to produce the file you want.
5144 4790
5145 This variable is valid for all binary output target types. 4791 This variable is valid for all binary output target types.
5146
5147 ``` 4792 ```
5148 4793
5149 #### **Example** 4794 #### **Example**
5150 4795
5151 ``` 4796 ```
5152 static_library("doom_melon") { 4797 static_library("doom_melon") {
5153 output_name = "fluffy_bunny" 4798 output_name = "fluffy_bunny"
5154 } 4799 }
5155
5156
5157 ``` 4800 ```
5158 ### <a name="output_prefix_override"></a>**output_prefix_override**: Don't use p refix for output name. 4801 ### <a name="output_prefix_override"></a>**output_prefix_override**: Don't use p refix for output name.
5159 4802
5160 ``` 4803 ```
5161 A boolean that overrides the output prefix for a target. Defaults to false. 4804 A boolean that overrides the output prefix for a target. Defaults to false.
5162 4805
5163 Some systems use prefixes for the names of the final target output file. The 4806 Some systems use prefixes for the names of the final target output file. The
5164 normal example is "libfoo.so" on Linux for a target named "foo". 4807 normal example is "libfoo.so" on Linux for a target named "foo".
5165 4808
5166 The output prefix for a given target type is specified on the linker tool 4809 The output prefix for a given target type is specified on the linker tool
5167 (see "gn help tool"). Sometimes this prefix is undesired. 4810 (see "gn help tool"). Sometimes this prefix is undesired.
5168 4811
5169 See also "gn help output_extension". 4812 See also "gn help output_extension".
5170
5171 ``` 4813 ```
5172 4814
5173 #### **Example** 4815 #### **Example**
5174 4816
5175 ``` 4817 ```
5176 shared_library("doom_melon") { 4818 shared_library("doom_melon") {
5177 # Normally this will produce "libdoom_melon.so" on Linux. Setting this flag 4819 # Normally this will produce "libdoom_melon.so" on Linux. Setting this flag
5178 # will produce "doom_melon.so". 4820 # will produce "doom_melon.so".
5179 output_prefix_override = true 4821 output_prefix_override = true
5180 ... 4822 ...
5181 } 4823 }
5182
5183
5184 ``` 4824 ```
5185 ### <a name="outputs"></a>**outputs**: Output files for actions and copy targets . 4825 ### <a name="outputs"></a>**outputs**: Output files for actions and copy targets .
5186 4826
5187 ``` 4827 ```
5188 Outputs is valid for "copy", "action", and "action_foreach" target types and 4828 Outputs is valid for "copy", "action", and "action_foreach" target types and
5189 indicates the resulting files. Outputs must always refer to files in the 4829 indicates the resulting files. Outputs must always refer to files in the
5190 build directory. 4830 build directory.
5191 4831
5192 copy 4832 copy
5193 Copy targets should have exactly one entry in the outputs list. If there is 4833 Copy targets should have exactly one entry in the outputs list. If there is
5194 exactly one source, this can be a literal file name or a source expansion. 4834 exactly one source, this can be a literal file name or a source expansion.
5195 If there is more than one source, this must contain a source expansion to 4835 If there is more than one source, this must contain a source expansion to
5196 map a single input name to a single output name. See "gn help copy". 4836 map a single input name to a single output name. See "gn help copy".
5197 4837
5198 action_foreach 4838 action_foreach
5199 Action_foreach targets must always use source expansions to map input files 4839 Action_foreach targets must always use source expansions to map input files
5200 to output files. There can be more than one output, which means that each 4840 to output files. There can be more than one output, which means that each
5201 invocation of the script will produce a set of files (presumably based on 4841 invocation of the script will produce a set of files (presumably based on
5202 the name of the input file). See "gn help action_foreach". 4842 the name of the input file). See "gn help action_foreach".
5203 4843
5204 action 4844 action
5205 Action targets (excluding action_foreach) must list literal output file(s) 4845 Action targets (excluding action_foreach) must list literal output file(s)
5206 with no source expansions. See "gn help action". 4846 with no source expansions. See "gn help action".
5207
5208
5209 ``` 4847 ```
5210 ### <a name="precompiled_header"></a>**precompiled_header**: [string] Header fil e to precompile. 4848 ### <a name="precompiled_header"></a>**precompiled_header**: [string] Header fil e to precompile.
5211 4849
5212 ``` 4850 ```
5213 Precompiled headers will be used when a target specifies this value, or a 4851 Precompiled headers will be used when a target specifies this value, or a
5214 config applying to this target specifies this value. In addition, the tool 4852 config applying to this target specifies this value. In addition, the tool
5215 corresponding to the source files must also specify precompiled headers (see 4853 corresponding to the source files must also specify precompiled headers (see
5216 "gn help tool"). The tool will also specify what type of precompiled headers 4854 "gn help tool"). The tool will also specify what type of precompiled headers
5217 to use, by setting precompiled_header_type to either "gcc" or "msvc". 4855 to use, by setting precompiled_header_type to either "gcc" or "msvc".
5218 4856
5219 The precompiled header/source variables can be specified on a target or a 4857 The precompiled header/source variables can be specified on a target or a
5220 config, but must be the same for all configs applying to a given target since 4858 config, but must be the same for all configs applying to a given target since
5221 a target can only have one precompiled header. 4859 a target can only have one precompiled header.
5222 4860
5223 If you use both C and C++ sources, the precompiled header and source file 4861 If you use both C and C++ sources, the precompiled header and source file
5224 will be compiled once per language. You will want to make sure to wrap C++ 4862 will be compiled once per language. You will want to make sure to wrap C++
5225 includes in __cplusplus #ifdefs so the file will compile in C mode. 4863 includes in __cplusplus #ifdefs so the file will compile in C mode.
5226
5227 ``` 4864 ```
5228 4865
5229 #### **GCC precompiled headers** 4866 #### **GCC precompiled headers**
5230 4867
5231 ``` 4868 ```
5232 When using GCC-style precompiled headers, "precompiled_source" contains the 4869 When using GCC-style precompiled headers, "precompiled_source" contains the
5233 path of a .h file that is precompiled and then included by all source files 4870 path of a .h file that is precompiled and then included by all source files
5234 in targets that set "precompiled_source". 4871 in targets that set "precompiled_source".
5235 4872
5236 The value of "precompiled_header" is not used with GCC-style precompiled 4873 The value of "precompiled_header" is not used with GCC-style precompiled
5237 headers. 4874 headers.
5238
5239 ``` 4875 ```
5240 4876
5241 #### **MSVC precompiled headers** 4877 #### **MSVC precompiled headers**
5242 4878
5243 ``` 4879 ```
5244 When using MSVC-style precompiled headers, the "precompiled_header" value is 4880 When using MSVC-style precompiled headers, the "precompiled_header" value is
5245 a string corresponding to the header. This is NOT a path to a file that GN 4881 a string corresponding to the header. This is NOT a path to a file that GN
5246 recognises, but rather the exact string that appears in quotes after 4882 recognises, but rather the exact string that appears in quotes after
5247 an #include line in source code. The compiler will match this string against 4883 an #include line in source code. The compiler will match this string against
5248 includes or forced includes (/FI). 4884 includes or forced includes (/FI).
(...skipping 20 matching lines...) Expand all
5269 # Either your source files should #include "build/precompile.h" 4905 # Either your source files should #include "build/precompile.h"
5270 # first, or you can do this to force-include the header. 4906 # first, or you can do this to force-include the header.
5271 cflags = [ "/FI$precompiled_header" ] 4907 cflags = [ "/FI$precompiled_header" ]
5272 } 4908 }
5273 4909
5274 And then define a target that uses the config: 4910 And then define a target that uses the config:
5275 4911
5276 executable("doom_melon") { 4912 executable("doom_melon") {
5277 configs += [ ":use_precompiled_headers" ] 4913 configs += [ ":use_precompiled_headers" ]
5278 ... 4914 ...
5279
5280
5281 ``` 4915 ```
5282 ### <a name="precompiled_header_type"></a>**precompiled_header_type**: [string] "gcc" or "msvc". 4916 ### <a name="precompiled_header_type"></a>**precompiled_header_type**: [string] "gcc" or "msvc".
5283 4917
5284 ``` 4918 ```
5285 See "gn help precompiled_header". 4919 See "gn help precompiled_header".
5286
5287
5288 ``` 4920 ```
5289 ### <a name="precompiled_source"></a>**precompiled_source**: [file name] Source file to precompile. 4921 ### <a name="precompiled_source"></a>**precompiled_source**: [file name] Source file to precompile.
5290 4922
5291 ``` 4923 ```
5292 The source file that goes along with the precompiled_header when using 4924 The source file that goes along with the precompiled_header when using
5293 "msvc"-style precompiled headers. It will be implicitly added to the sources 4925 "msvc"-style precompiled headers. It will be implicitly added to the sources
5294 of the target. See "gn help precompiled_header". 4926 of the target. See "gn help precompiled_header".
5295
5296
5297 ``` 4927 ```
5298 ### <a name="product_type"></a>**product_type**: Product type for Xcode projects . 4928 ### <a name="product_type"></a>**product_type**: Product type for Xcode projects .
5299 4929
5300 ``` 4930 ```
5301 Correspond to the type of the product of a create_bundle target. Only 4931 Correspond to the type of the product of a create_bundle target. Only
5302 meaningful to Xcode (used as part of the Xcode project generation). 4932 meaningful to Xcode (used as part of the Xcode project generation).
5303 4933
5304 When generating Xcode project files, only create_bundle target with a 4934 When generating Xcode project files, only create_bundle target with a
5305 non-empty product_type will have a corresponding target in Xcode project. 4935 non-empty product_type will have a corresponding target in Xcode project.
5306
5307
5308 ``` 4936 ```
5309 ### <a name="public"></a>**public**: Declare public header files for a target. 4937 ### <a name="public"></a>**public**: Declare public header files for a target.
5310 4938
5311 ``` 4939 ```
5312 A list of files that other targets can include. These permissions are checked 4940 A list of files that other targets can include. These permissions are checked
5313 via the "check" command (see "gn help check"). 4941 via the "check" command (see "gn help check").
5314 4942
5315 If no public files are declared, other targets (assuming they have visibility 4943 If no public files are declared, other targets (assuming they have visibility
5316 to depend on this target can include any file in the sources list. If this 4944 to depend on this target can include any file in the sources list. If this
5317 variable is defined on a target, dependent targets may only include files on 4945 variable is defined on a target, dependent targets may only include files on
5318 this whitelist. 4946 this whitelist.
5319 4947
5320 Header file permissions are also subject to visibility. A target must be 4948 Header file permissions are also subject to visibility. A target must be
5321 visible to another target to include any files from it at all and the public 4949 visible to another target to include any files from it at all and the public
5322 headers indicate which subset of those files are permitted. See "gn help 4950 headers indicate which subset of those files are permitted. See "gn help
5323 visibility" for more. 4951 visibility" for more.
5324 4952
5325 Public files are inherited through the dependency tree. So if there is a 4953 Public files are inherited through the dependency tree. So if there is a
5326 dependency A -> B -> C, then A can include C's public headers. However, the 4954 dependency A -> B -> C, then A can include C's public headers. However, the
5327 same is NOT true of visibility, so unless A is in C's visibility list, the 4955 same is NOT true of visibility, so unless A is in C's visibility list, the
5328 include will be rejected. 4956 include will be rejected.
5329 4957
5330 GN only knows about files declared in the "sources" and "public" sections of 4958 GN only knows about files declared in the "sources" and "public" sections of
5331 targets. If a file is included that is not known to the build, it will be 4959 targets. If a file is included that is not known to the build, it will be
5332 allowed. 4960 allowed.
5333
5334 ``` 4961 ```
5335 4962
5336 #### **Examples** 4963 #### **Examples**
5337 4964
5338 ``` 4965 ```
5339 These exact files are public: 4966 These exact files are public:
5340 public = [ "foo.h", "bar.h" ] 4967 public = [ "foo.h", "bar.h" ]
5341 4968
5342 No files are public (no targets may include headers from this one): 4969 No files are public (no targets may include headers from this one):
5343 public = [] 4970 public = []
5344
5345
5346 ``` 4971 ```
5347 ### <a name="public_configs"></a>**public_configs**: Configs to be applied on de pendents. 4972 ### <a name="public_configs"></a>**public_configs**: Configs to be applied on de pendents.
5348 4973
5349 ``` 4974 ```
5350 A list of config labels. 4975 A list of config labels.
5351 4976
5352 Targets directly depending on this one will have the configs listed in this 4977 Targets directly depending on this one will have the configs listed in this
5353 variable added to them. These configs will also apply to the current target. 4978 variable added to them. These configs will also apply to the current target.
5354 4979
5355 This addition happens in a second phase once a target and all of its 4980 This addition happens in a second phase once a target and all of its
5356 dependencies have been resolved. Therefore, a target will not see these 4981 dependencies have been resolved. Therefore, a target will not see these
5357 force-added configs in their "configs" variable while the script is running, 4982 force-added configs in their "configs" variable while the script is running,
5358 and they can not be removed. As a result, this capability should generally 4983 and they can not be removed. As a result, this capability should generally
5359 only be used to add defines and include directories necessary to compile a 4984 only be used to add defines and include directories necessary to compile a
5360 target's headers. 4985 target's headers.
5361 4986
5362 See also "all_dependent_configs". 4987 See also "all_dependent_configs".
5363
5364 ``` 4988 ```
5365 4989
5366 #### **Ordering of flags and values** 4990 #### **Ordering of flags and values**
5367 4991
5368 ``` 4992 ```
5369 1. Those set on the current target (not in a config). 4993 1. Those set on the current target (not in a config).
5370 2. Those set on the "configs" on the target in order that the 4994 2. Those set on the "configs" on the target in order that the
5371 configs appear in the list. 4995 configs appear in the list.
5372 3. Those set on the "all_dependent_configs" on the target in order 4996 3. Those set on the "all_dependent_configs" on the target in order
5373 that the configs appear in the list. 4997 that the configs appear in the list.
5374 4. Those set on the "public_configs" on the target in order that 4998 4. Those set on the "public_configs" on the target in order that
5375 those configs appear in the list. 4999 those configs appear in the list.
5376 5. all_dependent_configs pulled from dependencies, in the order of 5000 5. all_dependent_configs pulled from dependencies, in the order of
5377 the "deps" list. This is done recursively. If a config appears 5001 the "deps" list. This is done recursively. If a config appears
5378 more than once, only the first occurance will be used. 5002 more than once, only the first occurance will be used.
5379 6. public_configs pulled from dependencies, in the order of the 5003 6. public_configs pulled from dependencies, in the order of the
5380 "deps" list. If a dependency is public, they will be applied 5004 "deps" list. If a dependency is public, they will be applied
5381 recursively. 5005 recursively.
5382
5383
5384 ``` 5006 ```
5385 ### <a name="public_deps"></a>**public_deps**: Declare public dependencies. 5007 ### <a name="public_deps"></a>**public_deps**: Declare public dependencies.
5386 5008
5387 ``` 5009 ```
5388 Public dependencies are like private dependencies (see "gn help deps") but 5010 Public dependencies are like private dependencies (see "gn help deps") but
5389 additionally express that the current target exposes the listed deps as part 5011 additionally express that the current target exposes the listed deps as part
5390 of its public API. 5012 of its public API.
5391 5013
5392 This has several ramifications: 5014 This has several ramifications:
5393 5015
5394 - public_configs that are part of the dependency are forwarded to direct 5016 - public_configs that are part of the dependency are forwarded to direct
5395 dependents. 5017 dependents.
5396 5018
5397 - Public headers in the dependency are usable by dependents (includes do 5019 - Public headers in the dependency are usable by dependents (includes do
5398 not require a direct dependency or visibility). 5020 not require a direct dependency or visibility).
5399 5021
5400 - If the current target is a shared library, other shared libraries that it 5022 - If the current target is a shared library, other shared libraries that it
5401 publicly depends on (directly or indirectly) are propagated up the 5023 publicly depends on (directly or indirectly) are propagated up the
5402 dependency tree to dependents for linking. 5024 dependency tree to dependents for linking.
5403
5404 ``` 5025 ```
5405 5026
5406 #### **Discussion** 5027 #### **Discussion**
5407 5028
5408 ``` 5029 ```
5409 Say you have three targets: A -> B -> C. C's visibility may allow B to depend 5030 Say you have three targets: A -> B -> C. C's visibility may allow B to depend
5410 on it but not A. Normally, this would prevent A from including any headers 5031 on it but not A. Normally, this would prevent A from including any headers
5411 from C, and C's public_configs would apply only to B. 5032 from C, and C's public_configs would apply only to B.
5412 5033
5413 If B lists C in its public_deps instead of regular deps, A will now inherit 5034 If B lists C in its public_deps instead of regular deps, A will now inherit
5414 C's public_configs and the ability to include C's public headers. 5035 C's public_configs and the ability to include C's public headers.
5415 5036
5416 Generally if you are writing a target B and you include C's headers as part 5037 Generally if you are writing a target B and you include C's headers as part
5417 of B's public headers, or targets depending on B should consider B and C to 5038 of B's public headers, or targets depending on B should consider B and C to
5418 be part of a unit, you should use public_deps instead of deps. 5039 be part of a unit, you should use public_deps instead of deps.
5419
5420 ``` 5040 ```
5421 5041
5422 #### **Example** 5042 #### **Example**
5423 5043
5424 ``` 5044 ```
5425 # This target can include files from "c" but not from 5045 # This target can include files from "c" but not from
5426 # "super_secret_implementation_details". 5046 # "super_secret_implementation_details".
5427 executable("a") { 5047 executable("a") {
5428 deps = [ ":b" ] 5048 deps = [ ":b" ]
5429 } 5049 }
5430 5050
5431 shared_library("b") { 5051 shared_library("b") {
5432 deps = [ ":super_secret_implementation_details" ] 5052 deps = [ ":super_secret_implementation_details" ]
5433 public_deps = [ ":c" ] 5053 public_deps = [ ":c" ]
5434 } 5054 }
5435
5436
5437 ``` 5055 ```
5438 ### <a name="response_file_contents"></a>**response_file_contents**: Contents of a response file for actions. 5056 ### <a name="response_file_contents"></a>**response_file_contents**: Contents of a response file for actions.
5439 5057
5440 ``` 5058 ```
5441 Sometimes the arguments passed to a script can be too long for the system's 5059 Sometimes the arguments passed to a script can be too long for the system's
5442 command-line capabilities. This is especially the case on Windows where the 5060 command-line capabilities. This is especially the case on Windows where the
5443 maximum command-line length is less than 8K. A response file allows you to 5061 maximum command-line length is less than 8K. A response file allows you to
5444 pass an unlimited amount of data to a script in a temporary file for an 5062 pass an unlimited amount of data to a script in a temporary file for an
5445 action or action_foreach target. 5063 action or action_foreach target.
5446 5064
5447 If the response_file_contents variable is defined and non-empty, the list 5065 If the response_file_contents variable is defined and non-empty, the list
5448 will be treated as script args (including possibly substitution patterns) 5066 will be treated as script args (including possibly substitution patterns)
5449 that will be written to a temporary file at build time. The name of the 5067 that will be written to a temporary file at build time. The name of the
5450 temporary file will be substituted for "{{response_file_name}}" in the script 5068 temporary file will be substituted for "{{response_file_name}}" in the script
5451 args. 5069 args.
5452 5070
5453 The response file contents will always be quoted and escaped according to 5071 The response file contents will always be quoted and escaped according to
5454 Unix shell rules. To parse the response file, the Python script should use 5072 Unix shell rules. To parse the response file, the Python script should use
5455 "shlex.split(file_contents)". 5073 "shlex.split(file_contents)".
5456
5457 ``` 5074 ```
5458 5075
5459 #### **Example** 5076 #### **Example**
5460 5077
5461 ``` 5078 ```
5462 action("process_lots_of_files") { 5079 action("process_lots_of_files") {
5463 script = "process.py", 5080 script = "process.py",
5464 inputs = [ ... huge list of files ... ] 5081 inputs = [ ... huge list of files ... ]
5465 5082
5466 # Write all the inputs to a response file for the script. Also, 5083 # Write all the inputs to a response file for the script. Also,
5467 # make the paths relative to the script working directory. 5084 # make the paths relative to the script working directory.
5468 response_file_contents = rebase_path(inputs, root_build_dir) 5085 response_file_contents = rebase_path(inputs, root_build_dir)
5469 5086
5470 # The script expects the name of the response file in --file-list. 5087 # The script expects the name of the response file in --file-list.
5471 args = [ 5088 args = [
5472 "--enable-foo", 5089 "--enable-foo",
5473 "--file-list={{response_file_name}}", 5090 "--file-list={{response_file_name}}",
5474 ] 5091 ]
5475 } 5092 }
5476
5477
5478 ``` 5093 ```
5479 ### <a name="script"></a>**script**: Script file for actions. 5094 ### <a name="script"></a>**script**: Script file for actions.
5480 5095
5481 ``` 5096 ```
5482 An absolute or buildfile-relative file name of a Python script to run for a 5097 An absolute or buildfile-relative file name of a Python script to run for a
5483 action and action_foreach targets (see "gn help action" and "gn help 5098 action and action_foreach targets (see "gn help action" and "gn help
5484 action_foreach"). 5099 action_foreach").
5485
5486
5487 ``` 5100 ```
5488 ### <a name="sources"></a>**sources**: Source files for a target 5101 ### <a name="sources"></a>**sources**: Source files for a target
5489 5102
5490 ``` 5103 ```
5491 A list of files. Non-absolute paths will be resolved relative to the current 5104 A list of files. Non-absolute paths will be resolved relative to the current
5492 build file. 5105 build file.
5493
5494 ``` 5106 ```
5495 5107
5496 #### **Sources for binary targets** 5108 #### **Sources for binary targets**
5497 5109
5498 ``` 5110 ```
5499 For binary targets (source sets, executables, and libraries), the known file 5111 For binary targets (source sets, executables, and libraries), the known file
5500 types will be compiled with the associated tools. Unknown file types and 5112 types will be compiled with the associated tools. Unknown file types and
5501 headers will be skipped. However, you should still list all C/C+ header files 5113 headers will be skipped. However, you should still list all C/C+ header files
5502 so GN knows about the existance of those files for the purposes of include 5114 so GN knows about the existance of those files for the purposes of include
5503 checking. 5115 checking.
5504 5116
5505 As a special case, a file ending in ".def" will be treated as a Windows 5117 As a special case, a file ending in ".def" will be treated as a Windows
5506 module definition file. It will be appended to the link line with a 5118 module definition file. It will be appended to the link line with a
5507 preceeding "/DEF:" string. There must be at most one .def file in a target 5119 preceeding "/DEF:" string. There must be at most one .def file in a target
5508 and they do not cross dependency boundaries (so specifying a .def file in a 5120 and they do not cross dependency boundaries (so specifying a .def file in a
5509 static library or source set will have no effect on the executable or shared 5121 static library or source set will have no effect on the executable or shared
5510 library they're linked into). 5122 library they're linked into).
5511
5512 ``` 5123 ```
5513 5124
5514 #### **Sources for non-binary targets** 5125 #### **Sources for non-binary targets**
5515 5126
5516 ``` 5127 ```
5517 action_foreach 5128 action_foreach
5518 The sources are the set of files that the script will be executed over. The 5129 The sources are the set of files that the script will be executed over. The
5519 script will run once per file. 5130 script will run once per file.
5520 5131
5521 action 5132 action
5522 The sources will be treated the same as inputs. See "gn help inputs" for 5133 The sources will be treated the same as inputs. See "gn help inputs" for
5523 more information and usage advice. 5134 more information and usage advice.
5524 5135
5525 copy 5136 copy
5526 The source are the source files to copy. 5137 The source are the source files to copy.
5527
5528
5529 ``` 5138 ```
5530 ### <a name="testonly"></a>**testonly**: Declares a target must only be used for testing. 5139 ### <a name="testonly"></a>**testonly**: Declares a target must only be used for testing.
5531 5140
5532 ``` 5141 ```
5533 Boolean. Defaults to false. 5142 Boolean. Defaults to false.
5534 5143
5535 When a target is marked "testonly = true", it must only be depended on by 5144 When a target is marked "testonly = true", it must only be depended on by
5536 other test-only targets. Otherwise, GN will issue an error that the 5145 other test-only targets. Otherwise, GN will issue an error that the
5537 depenedency is not allowed. 5146 depenedency is not allowed.
5538 5147
5539 This feature is intended to prevent accidentally shipping test code in a 5148 This feature is intended to prevent accidentally shipping test code in a
5540 final product. 5149 final product.
5541
5542 ``` 5150 ```
5543 5151
5544 #### **Example** 5152 #### **Example**
5545 5153
5546 ``` 5154 ```
5547 source_set("test_support") { 5155 source_set("test_support") {
5548 testonly = true 5156 testonly = true
5549 ... 5157 ...
5550 } 5158 }
5551
5552
5553 ``` 5159 ```
5554 ### <a name="visibility"></a>**visibility**: A list of labels that can depend on a target. 5160 ### <a name="visibility"></a>**visibility**: A list of labels that can depend on a target.
5555 5161
5556 ``` 5162 ```
5557 A list of labels and label patterns that define which targets can depend on 5163 A list of labels and label patterns that define which targets can depend on
5558 the current one. These permissions are checked via the "check" command (see 5164 the current one. These permissions are checked via the "check" command (see
5559 "gn help check"). 5165 "gn help check").
5560 5166
5561 If visibility is not defined, it defaults to public ("*"). 5167 If visibility is not defined, it defaults to public ("*").
5562 5168
5563 If visibility is defined, only the targets with labels that match it can 5169 If visibility is defined, only the targets with labels that match it can
5564 depend on the current target. The empty list means no targets can depend on 5170 depend on the current target. The empty list means no targets can depend on
5565 the current target. 5171 the current target.
5566 5172
5567 Tip: Often you will want the same visibility for all targets in a BUILD file. 5173 Tip: Often you will want the same visibility for all targets in a BUILD file.
5568 In this case you can just put the definition at the top, outside of any 5174 In this case you can just put the definition at the top, outside of any
5569 target, and the targets will inherit that scope and see the definition. 5175 target, and the targets will inherit that scope and see the definition.
5570
5571 ``` 5176 ```
5572 5177
5573 #### **Patterns** 5178 #### **Patterns**
5574 5179
5575 ``` 5180 ```
5576 See "gn help label_pattern" for more details on what types of patterns are 5181 See "gn help label_pattern" for more details on what types of patterns are
5577 supported. If a toolchain is specified, only targets in that toolchain will 5182 supported. If a toolchain is specified, only targets in that toolchain will
5578 be matched. If a toolchain is not specified on a pattern, targets in all 5183 be matched. If a toolchain is not specified on a pattern, targets in all
5579 toolchains will be matched. 5184 toolchains will be matched.
5580
5581 ``` 5185 ```
5582 5186
5583 #### **Examples** 5187 #### **Examples**
5584 5188
5585 ``` 5189 ```
5586 Only targets in the current buildfile ("private"): 5190 Only targets in the current buildfile ("private"):
5587 visibility = [ ":*" ] 5191 visibility = [ ":*" ]
5588 5192
5589 No targets (used for targets that should be leaf nodes): 5193 No targets (used for targets that should be leaf nodes):
5590 visibility = [] 5194 visibility = []
5591 5195
5592 Any target ("public", the default): 5196 Any target ("public", the default):
5593 visibility = [ "*" ] 5197 visibility = [ "*" ]
5594 5198
5595 All targets in the current directory and any subdirectory: 5199 All targets in the current directory and any subdirectory:
5596 visibility = [ "./*" ] 5200 visibility = [ "./*" ]
5597 5201
5598 Any target in "//bar/BUILD.gn": 5202 Any target in "//bar/BUILD.gn":
5599 visibility = [ "//bar:*" ] 5203 visibility = [ "//bar:*" ]
5600 5204
5601 Any target in "//bar/" or any subdirectory thereof: 5205 Any target in "//bar/" or any subdirectory thereof:
5602 visibility = [ "//bar/*" ] 5206 visibility = [ "//bar/*" ]
5603 5207
5604 Just these specific targets: 5208 Just these specific targets:
5605 visibility = [ ":mything", "//foo:something_else" ] 5209 visibility = [ ":mything", "//foo:something_else" ]
5606 5210
5607 Any target in the current directory and any subdirectory thereof, plus 5211 Any target in the current directory and any subdirectory thereof, plus
5608 any targets in "//bar/" and any subdirectory thereof. 5212 any targets in "//bar/" and any subdirectory thereof.
5609 visibility = [ "./*", "//bar/*" ] 5213 visibility = [ "./*", "//bar/*" ]
5610
5611
5612 ``` 5214 ```
5613 ### <a name="write_runtime_deps"></a>**write_runtime_deps**: Writes the target's runtime_deps to the given path. 5215 ### <a name="write_runtime_deps"></a>**write_runtime_deps**: Writes the target's runtime_deps to the given path.
5614 5216
5615 ``` 5217 ```
5616 Does not synchronously write the file, but rather schedules it to be written 5218 Does not synchronously write the file, but rather schedules it to be written
5617 at the end of generation. 5219 at the end of generation.
5618 5220
5619 If the file exists and the contents are identical to that being written, the 5221 If the file exists and the contents are identical to that being written, the
5620 file will not be updated. This will prevent unnecessary rebuilds of targets 5222 file will not be updated. This will prevent unnecessary rebuilds of targets
5621 that depend on this file. 5223 that depend on this file.
5622 5224
5623 Path must be within the output directory. 5225 Path must be within the output directory.
5624 5226
5625 See "gn help runtime_deps" for how the runtime dependencies are computed. 5227 See "gn help runtime_deps" for how the runtime dependencies are computed.
5626 5228
5627 The format of this file will list one file per line with no escaping. The 5229 The format of this file will list one file per line with no escaping. The
5628 files will be relative to the root_build_dir. The first line of the file will 5230 files will be relative to the root_build_dir. The first line of the file will
5629 be the main output file of the target itself. The file contents will be the 5231 be the main output file of the target itself. The file contents will be the
5630 same as requesting the runtime deps be written on the command line (see "gn 5232 same as requesting the runtime deps be written on the command line (see "gn
5631 help --runtime-deps-list-file"). 5233 help --runtime-deps-list-file").
5632
5633
5634 ``` 5234 ```
5635 ## <a name="other"></a>Other help topics 5235 ## <a name="other"></a>Other help topics
5636 5236
5637 ### <a name="buildargs"></a>**Build Arguments Overview** 5237 ### <a name="buildargs"></a>**Build Arguments Overview**
5638 5238
5639 ``` 5239 ```
5640 Build arguments are variables passed in from outside of the build that build 5240 Build arguments are variables passed in from outside of the build that build
5641 files can query to determine how the build works. 5241 files can query to determine how the build works.
5642
5643 ``` 5242 ```
5644 5243
5645 #### **How build arguments are set** 5244 #### **How build arguments are set**
5646 5245
5647 ``` 5246 ```
5648 First, system default arguments are set based on the current system. The 5247 First, system default arguments are set based on the current system. The
5649 built-in arguments are: 5248 built-in arguments are:
5650 - host_cpu 5249 - host_cpu
5651 - host_os 5250 - host_os
5652 - current_cpu 5251 - current_cpu
5653 - current_os 5252 - current_os
5654 - target_cpu 5253 - target_cpu
5655 - target_os 5254 - target_os
5656 5255
5657 Next, project-specific overrides are applied. These are specified inside 5256 Next, project-specific overrides are applied. These are specified inside
5658 the default_args variable of //.gn. See "gn help dotfile" for more. 5257 the default_args variable of //.gn. See "gn help dotfile" for more.
5659 5258
5660 If specified, arguments from the --args command line flag are used. If that 5259 If specified, arguments from the --args command line flag are used. If that
5661 flag is not specified, args from previous builds in the build directory will 5260 flag is not specified, args from previous builds in the build directory will
5662 be used (this is in the file args.gn in the build directory). 5261 be used (this is in the file args.gn in the build directory).
5663 5262
5664 Last, for targets being compiled with a non-default toolchain, the toolchain 5263 Last, for targets being compiled with a non-default toolchain, the toolchain
5665 overrides are applied. These are specified in the toolchain_args section of a 5264 overrides are applied. These are specified in the toolchain_args section of a
5666 toolchain definition. The use-case for this is that a toolchain may be 5265 toolchain definition. The use-case for this is that a toolchain may be
5667 building code for a different platform, and that it may want to always 5266 building code for a different platform, and that it may want to always
5668 specify Posix, for example. See "gn help toolchain" for more. 5267 specify Posix, for example. See "gn help toolchain" for more.
5669 5268
5670 If you specify an override for a build argument that never appears in a 5269 If you specify an override for a build argument that never appears in a
5671 "declare_args" call, a nonfatal error will be displayed. 5270 "declare_args" call, a nonfatal error will be displayed.
5672
5673 ``` 5271 ```
5674 5272
5675 #### **Examples** 5273 #### **Examples**
5676 5274
5677 ``` 5275 ```
5678 gn args out/FooBar 5276 gn args out/FooBar
5679 Create the directory out/FooBar and open an editor. You would type 5277 Create the directory out/FooBar and open an editor. You would type
5680 something like this into that file: 5278 something like this into that file:
5681 enable_doom_melon=false 5279 enable_doom_melon=false
5682 os="android" 5280 os="android"
5683 5281
5684 gn gen out/FooBar --args="enable_doom_melon=true os=\"android\"" 5282 gn gen out/FooBar --args="enable_doom_melon=true os=\"android\""
5685 This will overwrite the build directory with the given arguments. (Note 5283 This will overwrite the build directory with the given arguments. (Note
5686 that the quotes inside the args command will usually need to be escaped 5284 that the quotes inside the args command will usually need to be escaped
5687 for your shell to pass through strings values.) 5285 for your shell to pass through strings values.)
5688
5689 ``` 5286 ```
5690 5287
5691 #### **How build arguments are used** 5288 #### **How build arguments are used**
5692 5289
5693 ``` 5290 ```
5694 If you want to use an argument, you use declare_args() and specify default 5291 If you want to use an argument, you use declare_args() and specify default
5695 values. These default values will apply if none of the steps listed in the 5292 values. These default values will apply if none of the steps listed in the
5696 "How build arguments are set" section above apply to the given argument, but 5293 "How build arguments are set" section above apply to the given argument, but
5697 the defaults will not override any of these. 5294 the defaults will not override any of these.
5698 5295
5699 Often, the root build config file will declare global arguments that will be 5296 Often, the root build config file will declare global arguments that will be
5700 passed to all buildfiles. Individual build files can also specify arguments 5297 passed to all buildfiles. Individual build files can also specify arguments
5701 that apply only to those files. It is also useful to specify build args in an 5298 that apply only to those files. It is also useful to specify build args in an
5702 "import"-ed file if you want such arguments to apply to multiple buildfiles. 5299 "import"-ed file if you want such arguments to apply to multiple buildfiles.
5703
5704
5705 ``` 5300 ```
5706 ### <a name="dotfile"></a>**.gn file** 5301 ### <a name="dotfile"></a>**.gn file**
5707 5302
5708 ``` 5303 ```
5709 When gn starts, it will search the current directory and parent directories 5304 When gn starts, it will search the current directory and parent directories
5710 for a file called ".gn". This indicates the source root. You can override 5305 for a file called ".gn". This indicates the source root. You can override
5711 this detection by using the --root command-line argument 5306 this detection by using the --root command-line argument
5712 5307
5713 The .gn file in the source root will be executed. The syntax is the same as a 5308 The .gn file in the source root will be executed. The syntax is the same as a
5714 buildfile, but with very limited build setup-specific meaning. 5309 buildfile, but with very limited build setup-specific meaning.
5715 5310
5716 If you specify --root, by default GN will look for the file .gn in that 5311 If you specify --root, by default GN will look for the file .gn in that
5717 directory. If you want to specify a different file, you can additionally pass 5312 directory. If you want to specify a different file, you can additionally pass
5718 --dotfile: 5313 --dotfile:
5719 5314
5720 gn gen out/Debug --root=/home/build --dotfile=/home/my_gn_file.gn 5315 gn gen out/Debug --root=/home/build --dotfile=/home/my_gn_file.gn
5721
5722 ``` 5316 ```
5723 5317
5724 #### **Variables** 5318 #### **Variables**
5725 5319
5726 ``` 5320 ```
5727 arg_file_template [optional] 5321 arg_file_template [optional]
5728 Path to a file containing the text that should be used as the default 5322 Path to a file containing the text that should be used as the default
5729 args.gn content when you run `gn args`. 5323 args.gn content when you run `gn args`.
5730 5324
5731 buildconfig [required] 5325 buildconfig [required]
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
5777 The secondary source root must be inside the main source tree. 5371 The secondary source root must be inside the main source tree.
5778 5372
5779 default_args [optional] 5373 default_args [optional]
5780 Scope containing the default overrides for declared arguments. These 5374 Scope containing the default overrides for declared arguments. These
5781 overrides take precedence over the default values specified in the 5375 overrides take precedence over the default values specified in the
5782 declare_args() block, but can be overriden using --args or the 5376 declare_args() block, but can be overriden using --args or the
5783 args.gn file. 5377 args.gn file.
5784 5378
5785 This is intended to be used when subprojects declare arguments with 5379 This is intended to be used when subprojects declare arguments with
5786 default values that need to be changed for whatever reason. 5380 default values that need to be changed for whatever reason.
5787
5788 ``` 5381 ```
5789 5382
5790 #### **Example .gn file contents** 5383 #### **Example .gn file contents**
5791 5384
5792 ``` 5385 ```
5793 buildconfig = "//build/config/BUILDCONFIG.gn" 5386 buildconfig = "//build/config/BUILDCONFIG.gn"
5794 5387
5795 check_targets = [ 5388 check_targets = [
5796 "//doom_melon/*", # Check everything in this subtree. 5389 "//doom_melon/*", # Check everything in this subtree.
5797 "//tools:mind_controlling_ant", # Check this specific target. 5390 "//tools:mind_controlling_ant", # Check this specific target.
5798 ] 5391 ]
5799 5392
5800 root = "//:root" 5393 root = "//:root"
5801 5394
5802 secondary_source = "//build/config/temporary_buildfiles/" 5395 secondary_source = "//build/config/temporary_buildfiles/"
5803 5396
5804 default_args = { 5397 default_args = {
5805 # Default to release builds for this project. 5398 # Default to release builds for this project.
5806 is_debug = false 5399 is_debug = false
5807 is_component_build = false 5400 is_component_build = false
5808 } 5401 }
5809
5810
5811 ``` 5402 ```
5812 ### <a name="execution"></a>**Build graph and execution overview** 5403 ### <a name="execution"></a>**Build graph and execution overview**
5813 5404
5814 #### **Overall build flow** 5405 #### **Overall build flow**
5815 5406
5816 ``` 5407 ```
5817 1. Look for ".gn" file (see "gn help dotfile") in the current directory and 5408 1. Look for ".gn" file (see "gn help dotfile") in the current directory and
5818 walk up the directory tree until one is found. Set this directory to be 5409 walk up the directory tree until one is found. Set this directory to be
5819 the "source root" and interpret this file to find the name of the build 5410 the "source root" and interpret this file to find the name of the build
5820 config file. 5411 config file.
5821 5412
5822 2. Execute the build config file identified by .gn to set up the global 5413 2. Execute the build config file identified by .gn to set up the global
5823 variables and default toolchain name. Any arguments, variables, defaults, 5414 variables and default toolchain name. Any arguments, variables, defaults,
5824 etc. set up in this file will be visible to all files in the build. 5415 etc. set up in this file will be visible to all files in the build.
5825 5416
5826 3. Load the //BUILD.gn (in the source root directory). 5417 3. Load the //BUILD.gn (in the source root directory).
5827 5418
5828 4. Recursively evaluate rules and load BUILD.gn in other directories as 5419 4. Recursively evaluate rules and load BUILD.gn in other directories as
5829 necessary to resolve dependencies. If a BUILD file isn't found in the 5420 necessary to resolve dependencies. If a BUILD file isn't found in the
5830 specified location, GN will look in the corresponding location inside 5421 specified location, GN will look in the corresponding location inside
5831 the secondary_source defined in the dotfile (see "gn help dotfile"). 5422 the secondary_source defined in the dotfile (see "gn help dotfile").
5832 5423
5833 5. When a target's dependencies are resolved, write out the `.ninja` 5424 5. When a target's dependencies are resolved, write out the `.ninja`
5834 file to disk. 5425 file to disk.
5835 5426
5836 6. When all targets are resolved, write out the root build.ninja file. 5427 6. When all targets are resolved, write out the root build.ninja file.
5837
5838 ``` 5428 ```
5839 5429
5840 #### **Executing target definitions and templates** 5430 #### **Executing target definitions and templates**
5841 5431
5842 ``` 5432 ```
5843 Build files are loaded in parallel. This means it is impossible to 5433 Build files are loaded in parallel. This means it is impossible to
5844 interrogate a target from GN code for any information not derivable from its 5434 interrogate a target from GN code for any information not derivable from its
5845 label (see "gn help label"). The exception is the get_target_outputs() 5435 label (see "gn help label"). The exception is the get_target_outputs()
5846 function which requires the target being interrogated to have been defined 5436 function which requires the target being interrogated to have been defined
5847 previously in the same file. 5437 previously in the same file.
5848 5438
5849 Targets are declared by their type and given a name: 5439 Targets are declared by their type and given a name:
5850 5440
5851 static_library("my_static_library") { 5441 static_library("my_static_library") {
5852 ... target parameter definitions ... 5442 ... target parameter definitions ...
5853 } 5443 }
5854 5444
5855 There is also a generic "target" function for programatically defined types 5445 There is also a generic "target" function for programatically defined types
5856 (see "gn help target"). You can define new types using templates (see "gn 5446 (see "gn help target"). You can define new types using templates (see "gn
5857 help template"). A template defines some custom code that expands to one or 5447 help template"). A template defines some custom code that expands to one or
5858 more other targets. 5448 more other targets.
5859 5449
5860 Before executing the code inside the target's { }, the target defaults are 5450 Before executing the code inside the target's { }, the target defaults are
5861 applied (see "gn help set_defaults"). It will inject implicit variable 5451 applied (see "gn help set_defaults"). It will inject implicit variable
5862 definitions that can be overridden by the target code as necessary. Typically 5452 definitions that can be overridden by the target code as necessary. Typically
5863 this mechanism is used to inject a default set of configs that define the 5453 this mechanism is used to inject a default set of configs that define the
5864 global compiler and linker flags. 5454 global compiler and linker flags.
5865
5866 ``` 5455 ```
5867 5456
5868 #### **Which targets are built** 5457 #### **Which targets are built**
5869 5458
5870 ``` 5459 ```
5871 All targets encountered in the default toolchain (see "gn help toolchain") 5460 All targets encountered in the default toolchain (see "gn help toolchain")
5872 will have build rules generated for them, even if no other targets reference 5461 will have build rules generated for them, even if no other targets reference
5873 them. Their dependencies must resolve and they will be added to the implicit 5462 them. Their dependencies must resolve and they will be added to the implicit
5874 "all" rule (see "gn help ninja_rules"). 5463 "all" rule (see "gn help ninja_rules").
5875 5464
5876 Targets in non-default toolchains will only be generated when they are 5465 Targets in non-default toolchains will only be generated when they are
5877 required (directly or transitively) to build a target in the default 5466 required (directly or transitively) to build a target in the default
5878 toolchain. 5467 toolchain.
5879 5468
5880 See also "gn help ninja_rules". 5469 See also "gn help ninja_rules".
5881
5882 ``` 5470 ```
5883 5471
5884 #### **Dependencies** 5472 #### **Dependencies**
5885 5473
5886 ``` 5474 ```
5887 The only difference between "public_deps" and "deps" except for pushing 5475 The only difference between "public_deps" and "deps" except for pushing
5888 configs around the build tree and allowing includes for the purposes of "gn 5476 configs around the build tree and allowing includes for the purposes of "gn
5889 check". 5477 check".
5890 5478
5891 A target's "data_deps" are guaranteed to be built whenever the target is 5479 A target's "data_deps" are guaranteed to be built whenever the target is
5892 built, but the ordering is not defined. The meaning of this is dependencies 5480 built, but the ordering is not defined. The meaning of this is dependencies
5893 required at runtime. Currently data deps will be complete before the target 5481 required at runtime. Currently data deps will be complete before the target
5894 is linked, but this is not semantically guaranteed and this is undesirable 5482 is linked, but this is not semantically guaranteed and this is undesirable
5895 from a build performance perspective. Since we hope to change this in the 5483 from a build performance perspective. Since we hope to change this in the
5896 future, do not rely on this behavior. 5484 future, do not rely on this behavior.
5897
5898
5899 ``` 5485 ```
5900 ### <a name="grammar"></a>**Language and grammar for GN build files** 5486 ### <a name="grammar"></a>**Language and grammar for GN build files**
5901 5487
5902 #### **Tokens** 5488 #### **Tokens**
5903 5489
5904 ``` 5490 ```
5905 GN build files are read as sequences of tokens. While splitting the file 5491 GN build files are read as sequences of tokens. While splitting the file
5906 into tokens, the next token is the longest sequence of characters that form a 5492 into tokens, the next token is the longest sequence of characters that form a
5907 valid token. 5493 valid token.
5908
5909 ``` 5494 ```
5910 5495
5911 #### **White space and comments** 5496 #### **White space and comments**
5912 5497
5913 ``` 5498 ```
5914 White space is comprised of spaces (U+0020), horizontal tabs (U+0009), 5499 White space is comprised of spaces (U+0020), horizontal tabs (U+0009),
5915 carriage returns (U+000D), and newlines (U+000A). 5500 carriage returns (U+000D), and newlines (U+000A).
5916 5501
5917 Comments start at the character "#" and stop at the next newline. 5502 Comments start at the character "#" and stop at the next newline.
5918 5503
5919 White space and comments are ignored except that they may separate tokens 5504 White space and comments are ignored except that they may separate tokens
5920 that would otherwise combine into a single token. 5505 that would otherwise combine into a single token.
5921
5922 ``` 5506 ```
5923 5507
5924 #### **Identifiers** 5508 #### **Identifiers**
5925 5509
5926 ``` 5510 ```
5927 Identifiers name variables and functions. 5511 Identifiers name variables and functions.
5928 5512
5929 identifier = letter { letter | digit } . 5513 identifier = letter { letter | digit } .
5930 letter = "A" ... "Z" | "a" ... "z" | "_" . 5514 letter = "A" ... "Z" | "a" ... "z" | "_" .
5931 digit = "0" ... "9" . 5515 digit = "0" ... "9" .
5932
5933 ``` 5516 ```
5934 5517
5935 #### **Keywords** 5518 #### **Keywords**
5936 5519
5937 ``` 5520 ```
5938 The following keywords are reserved and may not be used as identifiers: 5521 The following keywords are reserved and may not be used as identifiers:
5939 5522
5940 else false if true 5523 else false if true
5941
5942 ``` 5524 ```
5943 5525
5944 #### **Integer literals** 5526 #### **Integer literals**
5945 5527
5946 ``` 5528 ```
5947 An integer literal represents a decimal integer value. 5529 An integer literal represents a decimal integer value.
5948 5530
5949 integer = [ "-" ] digit { digit } . 5531 integer = [ "-" ] digit { digit } .
5950 5532
5951 Leading zeros and negative zero are disallowed. 5533 Leading zeros and negative zero are disallowed.
5952
5953 ``` 5534 ```
5954 5535
5955 #### **String literals** 5536 #### **String literals**
5956 5537
5957 ``` 5538 ```
5958 A string literal represents a string value consisting of the quoted 5539 A string literal represents a string value consisting of the quoted
5959 characters with possible escape sequences and variable expansions. 5540 characters with possible escape sequences and variable expansions.
5960 5541
5961 string = `"` { char | escape | expansion } `"` . 5542 string = `"` { char | escape | expansion } `"` .
5962 escape = `\` ( "$" | `"` | char ) . 5543 escape = `\` ( "$" | `"` | char ) .
(...skipping 14 matching lines...) Expand all
5977 5558
5978 To insert an arbitrary byte value, use $0xFF. For example, to insert a 5559 To insert an arbitrary byte value, use $0xFF. For example, to insert a
5979 newline character: "Line one$0x0ALine two". 5560 newline character: "Line one$0x0ALine two".
5980 5561
5981 An expansion will evaluate the variable following the '$' and insert a 5562 An expansion will evaluate the variable following the '$' and insert a
5982 stringified version of it into the result. For example, to concat two path 5563 stringified version of it into the result. For example, to concat two path
5983 components with a slash separating them: 5564 components with a slash separating them:
5984 "$var_one/$var_two" 5565 "$var_one/$var_two"
5985 Use the "${var_one}" format to be explicitly deliniate the variable for 5566 Use the "${var_one}" format to be explicitly deliniate the variable for
5986 otherwise-ambiguous cases. 5567 otherwise-ambiguous cases.
5987
5988 ``` 5568 ```
5989 5569
5990 #### **Punctuation** 5570 #### **Punctuation**
5991 5571
5992 ``` 5572 ```
5993 The following character sequences represent punctuation: 5573 The following character sequences represent punctuation:
5994 5574
5995 + += == != ( ) 5575 + += == != ( )
5996 - -= < <= [ ] 5576 - -= < <= [ ]
5997 ! = > >= { } 5577 ! = > >= { }
5998 && || . , 5578 && || . ,
5999
6000 ``` 5579 ```
6001 5580
6002 #### **Grammar** 5581 #### **Grammar**
6003 5582
6004 ``` 5583 ```
6005 The input tokens form a syntax tree following a context-free grammar: 5584 The input tokens form a syntax tree following a context-free grammar:
6006 5585
6007 File = StatementList . 5586 File = StatementList .
6008 5587
6009 Statement = Assignment | Call | Condition . 5588 Statement = Assignment | Call | Condition .
(...skipping 17 matching lines...) Expand all
6027 5606
6028 AssignOp = "=" | "+=" | "-=" . 5607 AssignOp = "=" | "+=" | "-=" .
6029 UnaryOp = "!" . 5608 UnaryOp = "!" .
6030 BinaryOp = "+" | "-" // highest priority 5609 BinaryOp = "+" | "-" // highest priority
6031 | "<" | "<=" | ">" | ">=" 5610 | "<" | "<=" | ">" | ">="
6032 | "==" | "!=" 5611 | "==" | "!="
6033 | "&&" 5612 | "&&"
6034 | "||" . // lowest priority 5613 | "||" . // lowest priority
6035 5614
6036 All binary operators are left-associative. 5615 All binary operators are left-associative.
6037
6038 ``` 5616 ```
6039 5617
6040 #### **Types** 5618 #### **Types**
6041 5619
6042 ``` 5620 ```
6043 The GN language is dynamically typed. The following types are used: 5621 The GN language is dynamically typed. The following types are used:
6044 5622
6045 - Boolean: Uses the keywords "true" and "false". There is no implicit 5623 - Boolean: Uses the keywords "true" and "false". There is no implicit
6046 conversion between booleans and integers. 5624 conversion between booleans and integers.
6047 5625
6048 - Integers: All numbers in GN are signed 64-bit integers. 5626 - Integers: All numbers in GN are signed 64-bit integers.
6049 5627
6050 - Strings: Strings are 8-bit with no enforced encoding. When a string is 5628 - Strings: Strings are 8-bit with no enforced encoding. When a string is
6051 used to interact with other systems with particular encodings (like the 5629 used to interact with other systems with particular encodings (like the
6052 Windows and Mac filesystems) it is assumed to be UTF-8. See "String 5630 Windows and Mac filesystems) it is assumed to be UTF-8. See "String
6053 literals" above for more. 5631 literals" above for more.
6054 5632
6055 - Lists: Lists are arbitrary-length ordered lists of values. See "Lists" 5633 - Lists: Lists are arbitrary-length ordered lists of values. See "Lists"
6056 below for more. 5634 below for more.
6057 5635
6058 - Scopes: Scopes are like dictionaries that use variable names for keys. See 5636 - Scopes: Scopes are like dictionaries that use variable names for keys. See
6059 "Scopes" below for more. 5637 "Scopes" below for more.
6060
6061 ``` 5638 ```
6062 5639
6063 #### **Lists** 5640 #### **Lists**
6064 5641
6065 ``` 5642 ```
6066 Lists are created with [] and using commas to separate items: 5643 Lists are created with [] and using commas to separate items:
6067 5644
6068 mylist = [ 0, 1, 2, "some string" ] 5645 mylist = [ 0, 1, 2, "some string" ]
6069 5646
6070 A comma after the last item is optional. Lists are dereferenced using 0-based 5647 A comma after the last item is optional. Lists are dereferenced using 0-based
(...skipping 16 matching lines...) Expand all
6087 list. This is to prevent accidentally overwriting data when in most cases 5664 list. This is to prevent accidentally overwriting data when in most cases
6088 '+=' was intended. To overwrite a list on purpose, first assign it to the 5665 '+=' was intended. To overwrite a list on purpose, first assign it to the
6089 empty list: 5666 empty list:
6090 5667
6091 mylist = [] 5668 mylist = []
6092 mylist = otherlist 5669 mylist = otherlist
6093 5670
6094 When assigning to a list named 'sources' using '=' or '+=', list items may be 5671 When assigning to a list named 'sources' using '=' or '+=', list items may be
6095 automatically filtered out. See "gn help set_sources_assignment_filter" for 5672 automatically filtered out. See "gn help set_sources_assignment_filter" for
6096 more. 5673 more.
6097
6098 ``` 5674 ```
6099 5675
6100 #### **Scopes** 5676 #### **Scopes**
6101 5677
6102 ``` 5678 ```
6103 All execution happens in the context of a scope which holds the current state 5679 All execution happens in the context of a scope which holds the current state
6104 (like variables). With the exception of loops and conditions, '{' introduces 5680 (like variables). With the exception of loops and conditions, '{' introduces
6105 a new scope that has a parent reference to the old scope. 5681 a new scope that has a parent reference to the old scope.
6106 5682
6107 Variable reads recursively search all nested scopes until the variable is 5683 Variable reads recursively search all nested scopes until the variable is
(...skipping 14 matching lines...) Expand all
6122 bar = "something" 5698 bar = "something"
6123 } 5699 }
6124 5700
6125 Inside such a scope definition can be any GN code including conditionals and 5701 Inside such a scope definition can be any GN code including conditionals and
6126 function calls. After the close of the scope, it will contain all variables 5702 function calls. After the close of the scope, it will contain all variables
6127 explicitly set by the code contained inside it. After this, the values can be 5703 explicitly set by the code contained inside it. After this, the values can be
6128 read, modified, or added to: 5704 read, modified, or added to:
6129 5705
6130 myvalues.foo += 2 5706 myvalues.foo += 2
6131 empty_scope.new_thing = [ 1, 2, 3 ] 5707 empty_scope.new_thing = [ 1, 2, 3 ]
6132
6133
6134 ``` 5708 ```
6135 ### <a name="input_conversion"></a>**input_conversion**: Specifies how to transf orm input to a variable. 5709 ### <a name="input_conversion"></a>**input_conversion**: Specifies how to transf orm input to a variable.
6136 5710
6137 ``` 5711 ```
6138 input_conversion is an argument to read_file and exec_script that specifies 5712 input_conversion is an argument to read_file and exec_script that specifies
6139 how the result of the read operation should be converted into a variable. 5713 how the result of the read operation should be converted into a variable.
6140 5714
6141 "" (the default) 5715 "" (the default)
6142 Discard the result and return None. 5716 Discard the result and return None.
6143 5717
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
6176 5750
6177 "trim ..." 5751 "trim ..."
6178 Prefixing any of the other transformations with the word "trim" will 5752 Prefixing any of the other transformations with the word "trim" will
6179 result in whitespace being trimmed from the beginning and end of the 5753 result in whitespace being trimmed from the beginning and end of the
6180 result before processing. 5754 result before processing.
6181 5755
6182 Examples: "trim string" or "trim list lines" 5756 Examples: "trim string" or "trim list lines"
6183 5757
6184 Note that "trim value" is useless because the value parser skips 5758 Note that "trim value" is useless because the value parser skips
6185 whitespace anyway. 5759 whitespace anyway.
6186
6187
6188 ``` 5760 ```
6189 ### <a name="label_pattern"></a>**Label patterns** 5761 ### <a name="label_pattern"></a>**Label patterns**
6190 5762
6191 ``` 5763 ```
6192 A label pattern is a way of expressing one or more labels in a portion of the 5764 A label pattern is a way of expressing one or more labels in a portion of the
6193 source tree. They are not general regular expressions. 5765 source tree. They are not general regular expressions.
6194 5766
6195 They can take the following forms only: 5767 They can take the following forms only:
6196 5768
6197 - Explicit (no wildcard): 5769 - Explicit (no wildcard):
(...skipping 15 matching lines...) Expand all
6213 5785
6214 "//foo:bar(//build/toochain:mac)" 5786 "//foo:bar(//build/toochain:mac)"
6215 An explicit target in an explicit toolchain. 5787 An explicit target in an explicit toolchain.
6216 5788
6217 ":*(//build/toolchain/linux:32bit)" 5789 ":*(//build/toolchain/linux:32bit)"
6218 All targets in the current build file using the 32-bit Linux toolchain. 5790 All targets in the current build file using the 32-bit Linux toolchain.
6219 5791
6220 "//foo/*(//build/toolchain:win)" 5792 "//foo/*(//build/toolchain:win)"
6221 All targets in //foo and any subdirectory using the Windows 5793 All targets in //foo and any subdirectory using the Windows
6222 toolchain. 5794 toolchain.
6223
6224
6225 ``` 5795 ```
6226 ### <a name="labels"></a>**About labels** 5796 ### <a name="labels"></a>**About labels**
6227 5797
6228 ``` 5798 ```
6229 Everything that can participate in the dependency graph (targets, configs, 5799 Everything that can participate in the dependency graph (targets, configs,
6230 and toolchains) are identified by labels. A common label looks like: 5800 and toolchains) are identified by labels. A common label looks like:
6231 5801
6232 //base/test:test_support 5802 //base/test:test_support
6233 5803
6234 This consists of a source-root-absolute path, a colon, and a name. This means 5804 This consists of a source-root-absolute path, a colon, and a name. This means
6235 to look for the thing named "test_support" in "base/test/BUILD.gn". 5805 to look for the thing named "test_support" in "base/test/BUILD.gn".
6236 5806
6237 You can also specify system absolute paths if necessary. Typically such 5807 You can also specify system absolute paths if necessary. Typically such
6238 paths would be specified via a build arg so the developer can specify where 5808 paths would be specified via a build arg so the developer can specify where
6239 the component is on their system. 5809 the component is on their system.
6240 5810
6241 /usr/local/foo:bar (Posix) 5811 /usr/local/foo:bar (Posix)
6242 /C:/Program Files/MyLibs:bar (Windows) 5812 /C:/Program Files/MyLibs:bar (Windows)
6243
6244 ``` 5813 ```
6245 5814
6246 #### **Toolchains** 5815 #### **Toolchains**
6247 5816
6248 ``` 5817 ```
6249 A canonical label includes the label of the toolchain being used. Normally, 5818 A canonical label includes the label of the toolchain being used. Normally,
6250 the toolchain label is implicitly inherited from the current execution 5819 the toolchain label is implicitly inherited from the current execution
6251 context, but you can override this to specify cross-toolchain dependencies: 5820 context, but you can override this to specify cross-toolchain dependencies:
6252 5821
6253 //base/test:test_support(//build/toolchain/win:msvc) 5822 //base/test:test_support(//build/toolchain/win:msvc)
6254 5823
6255 Here GN will look for the toolchain definition called "msvc" in the file 5824 Here GN will look for the toolchain definition called "msvc" in the file
6256 "//build/toolchain/win" to know how to compile this target. 5825 "//build/toolchain/win" to know how to compile this target.
6257
6258 ``` 5826 ```
6259 5827
6260 #### **Relative labels** 5828 #### **Relative labels**
6261 5829
6262 ``` 5830 ```
6263 If you want to refer to something in the same buildfile, you can omit 5831 If you want to refer to something in the same buildfile, you can omit
6264 the path name and just start with a colon. This format is recommended for 5832 the path name and just start with a colon. This format is recommended for
6265 all same-file references. 5833 all same-file references.
6266 5834
6267 :base 5835 :base
6268 5836
6269 Labels can be specified as being relative to the current directory. 5837 Labels can be specified as being relative to the current directory.
6270 Stylistically, we prefer to use absolute paths for all non-file-local 5838 Stylistically, we prefer to use absolute paths for all non-file-local
6271 references unless a build file needs to be run in different contexts (like a 5839 references unless a build file needs to be run in different contexts (like a
6272 project needs to be both standalone and pulled into other projects in 5840 project needs to be both standalone and pulled into other projects in
6273 difference places in the directory hierarchy). 5841 difference places in the directory hierarchy).
6274 5842
6275 source/plugin:myplugin 5843 source/plugin:myplugin
6276 ../net:url_request 5844 ../net:url_request
6277
6278 ``` 5845 ```
6279 5846
6280 #### **Implicit names** 5847 #### **Implicit names**
6281 5848
6282 ``` 5849 ```
6283 If a name is unspecified, it will inherit the directory name. Stylistically, 5850 If a name is unspecified, it will inherit the directory name. Stylistically,
6284 we prefer to omit the colon and name when possible: 5851 we prefer to omit the colon and name when possible:
6285 5852
6286 //net -> //net:net 5853 //net -> //net:net
6287 //tools/gn -> //tools/gn:gn 5854 //tools/gn -> //tools/gn:gn
6288
6289
6290 ``` 5855 ```
6291 ### <a name="ninja_rules"></a>**Ninja build rules** 5856 ### <a name="ninja_rules"></a>**Ninja build rules**
6292 5857
6293 #### **The "all" and "default" rules** 5858 #### **The "all" and "default" rules**
6294 5859
6295 ``` 5860 ```
6296 All generated targets (see "gn help execution") will be added to an implicit 5861 All generated targets (see "gn help execution") will be added to an implicit
6297 build rule called "all" so "ninja all" will always compile everything. The 5862 build rule called "all" so "ninja all" will always compile everything. The
6298 default rule will be used by Ninja if no specific target is specified (just 5863 default rule will be used by Ninja if no specific target is specified (just
6299 typing "ninja"). If there is a target named "//:default" it will be the 5864 typing "ninja"). If there is a target named "//:default" it will be the
6300 default build rule, otherwise the implicit "all" rule will be used. 5865 default build rule, otherwise the implicit "all" rule will be used.
6301
6302 ``` 5866 ```
6303 5867
6304 #### **Phony rules** 5868 #### **Phony rules**
6305 5869
6306 ``` 5870 ```
6307 GN generates Ninja "phony" rules for targets in the default toolchain. The 5871 GN generates Ninja "phony" rules for targets in the default toolchain. The
6308 phony rules can collide with each other and with the names of generated files 5872 phony rules can collide with each other and with the names of generated files
6309 so are generated with the following priority: 5873 so are generated with the following priority:
6310 5874
6311 1. Actual files generated by the build always take precedence. 5875 1. Actual files generated by the build always take precedence.
(...skipping 17 matching lines...) Expand all
6329 5893
6330 7. Labels with an implicit name part (when the short names match the 5894 7. Labels with an implicit name part (when the short names match the
6331 directory). So you can use "ninja foo/bar" to compile "//foo/bar:bar". 5895 directory). So you can use "ninja foo/bar" to compile "//foo/bar:bar".
6332 5896
6333 These "phony" rules are provided only for running Ninja since this matches 5897 These "phony" rules are provided only for running Ninja since this matches
6334 people's historical expectations for building. For consistency with the rest 5898 people's historical expectations for building. For consistency with the rest
6335 of the program, GN introspection commands accept explicit labels. 5899 of the program, GN introspection commands accept explicit labels.
6336 5900
6337 To explicitly compile a target in a non-default toolchain, you must give 5901 To explicitly compile a target in a non-default toolchain, you must give
6338 Ninja the exact name of the output file relative to the build directory. 5902 Ninja the exact name of the output file relative to the build directory.
6339
6340
6341 ``` 5903 ```
6342 ### <a name="nogncheck"></a>**nogncheck**: Skip an include line from checking. 5904 ### <a name="nogncheck"></a>**nogncheck**: Skip an include line from checking.
6343 5905
6344 ``` 5906 ```
6345 GN's header checker helps validate that the includes match the build 5907 GN's header checker helps validate that the includes match the build
6346 dependency graph. Sometimes an include might be conditional or otherwise 5908 dependency graph. Sometimes an include might be conditional or otherwise
6347 problematic, but you want to specifically allow it. In this case, it can be 5909 problematic, but you want to specifically allow it. In this case, it can be
6348 whitelisted. 5910 whitelisted.
6349 5911
6350 Include lines containing the substring "nogncheck" will be excluded from 5912 Include lines containing the substring "nogncheck" will be excluded from
6351 header checking. The most common case is a conditional include: 5913 header checking. The most common case is a conditional include:
6352 5914
6353 #if defined(ENABLE_DOOM_MELON) 5915 #if defined(ENABLE_DOOM_MELON)
6354 #include "tools/doom_melon/doom_melon.h" // nogncheck 5916 #include "tools/doom_melon/doom_melon.h" // nogncheck
6355 #endif 5917 #endif
6356 5918
6357 If the build file has a conditional dependency on the corresponding target 5919 If the build file has a conditional dependency on the corresponding target
6358 that matches the conditional include, everything will always link correctly: 5920 that matches the conditional include, everything will always link correctly:
6359 5921
6360 source_set("mytarget") { 5922 source_set("mytarget") {
6361 ... 5923 ...
6362 if (enable_doom_melon) { 5924 if (enable_doom_melon) {
6363 defines = [ "ENABLE_DOOM_MELON" ] 5925 defines = [ "ENABLE_DOOM_MELON" ]
6364 deps += [ "//tools/doom_melon" ] 5926 deps += [ "//tools/doom_melon" ]
6365 } 5927 }
6366 5928
6367 But GN's header checker does not understand preprocessor directives, won't 5929 But GN's header checker does not understand preprocessor directives, won't
6368 know it matches the build dependencies, and will flag this include as 5930 know it matches the build dependencies, and will flag this include as
6369 incorrect when the condition is false. 5931 incorrect when the condition is false.
6370
6371 ``` 5932 ```
6372 5933
6373 #### **More information** 5934 #### **More information**
6374 5935
6375 ``` 5936 ```
6376 The topic "gn help check" has general information on how checking works and 5937 The topic "gn help check" has general information on how checking works and
6377 advice on fixing problems. Targets can also opt-out of checking, see 5938 advice on fixing problems. Targets can also opt-out of checking, see
6378 "gn help check_includes". 5939 "gn help check_includes".
6379
6380
6381 ``` 5940 ```
6382 ### <a name="runtime_deps"></a>**Runtime dependencies** 5941 ### <a name="runtime_deps"></a>**Runtime dependencies**
6383 5942
6384 ``` 5943 ```
6385 Runtime dependencies of a target are exposed via the "runtime_deps" category 5944 Runtime dependencies of a target are exposed via the "runtime_deps" category
6386 of "gn desc" (see "gn help desc") or they can be written at build generation 5945 of "gn desc" (see "gn help desc") or they can be written at build generation
6387 time via write_runtime_deps(), or --runtime-deps-list-file (see "gn help 5946 time via write_runtime_deps(), or --runtime-deps-list-file (see "gn help
6388 --runtime-deps-list-file"). 5947 --runtime-deps-list-file").
6389 5948
6390 To a first approximation, the runtime dependencies of a target are the set of 5949 To a first approximation, the runtime dependencies of a target are the set of
6391 "data" files, data directories, and the shared libraries from all transitive 5950 "data" files, data directories, and the shared libraries from all transitive
6392 dependencies. Executables, shared libraries, and loadable modules are 5951 dependencies. Executables, shared libraries, and loadable modules are
6393 considered runtime dependencies of themselves. 5952 considered runtime dependencies of themselves.
6394
6395 ``` 5953 ```
6396 5954
6397 #### **Executables** 5955 #### **Executables**
6398 5956
6399 ``` 5957 ```
6400 Executable targets and those executable targets' transitive dependencies are 5958 Executable targets and those executable targets' transitive dependencies are
6401 not considered unless that executable is listed in "data_deps". Otherwise, GN 5959 not considered unless that executable is listed in "data_deps". Otherwise, GN
6402 assumes that the executable (and everything it requires) is a build-time 5960 assumes that the executable (and everything it requires) is a build-time
6403 dependency only. 5961 dependency only.
6404
6405 ``` 5962 ```
6406 5963
6407 #### **Actions and copies** 5964 #### **Actions and copies**
6408 5965
6409 ``` 5966 ```
6410 Action and copy targets that are listed as "data_deps" will have all of their 5967 Action and copy targets that are listed as "data_deps" will have all of their
6411 outputs and data files considered as runtime dependencies. Action and copy 5968 outputs and data files considered as runtime dependencies. Action and copy
6412 targets that are "deps" or "public_deps" will have only their data files 5969 targets that are "deps" or "public_deps" will have only their data files
6413 considered as runtime dependencies. These targets can list an output file in 5970 considered as runtime dependencies. These targets can list an output file in
6414 both the "outputs" and "data" lists to force an output file as a runtime 5971 both the "outputs" and "data" lists to force an output file as a runtime
(...skipping 15 matching lines...) Expand all
6430 5987
6431 - List the outputs of the action in it's data section (if the results of 5988 - List the outputs of the action in it's data section (if the results of
6432 that action are always runtime files). 5989 that action are always runtime files).
6433 - Have B list the action in data_deps (if the outputs of the actions are 5990 - Have B list the action in data_deps (if the outputs of the actions are
6434 always runtime files). 5991 always runtime files).
6435 - Have B list the action in both deps and data deps (if the outputs might be 5992 - Have B list the action in both deps and data deps (if the outputs might be
6436 used in both contexts and you don't care about unnecessary entries in the 5993 used in both contexts and you don't care about unnecessary entries in the
6437 list of files required at runtime). 5994 list of files required at runtime).
6438 - Split B into run-time and build-time versions with the appropriate "deps" 5995 - Split B into run-time and build-time versions with the appropriate "deps"
6439 for each. 5996 for each.
6440
6441 ``` 5997 ```
6442 5998
6443 #### **Static libraries and source sets** 5999 #### **Static libraries and source sets**
6444 6000
6445 ``` 6001 ```
6446 The results of static_library or source_set targets are not considered 6002 The results of static_library or source_set targets are not considered
6447 runtime dependencies since these are assumed to be intermediate targets only. 6003 runtime dependencies since these are assumed to be intermediate targets only.
6448 If you need to list a static library as a runtime dependency, you can 6004 If you need to list a static library as a runtime dependency, you can
6449 manually compute the .a/.lib file name for the current platform and list it 6005 manually compute the .a/.lib file name for the current platform and list it
6450 in the "data" list of a target (possibly on the static library target 6006 in the "data" list of a target (possibly on the static library target
6451 itself). 6007 itself).
6452
6453 ``` 6008 ```
6454 6009
6455 #### **Multiple outputs** 6010 #### **Multiple outputs**
6456 6011
6457 ``` 6012 ```
6458 Linker tools can specify which of their outputs should be considered when 6013 Linker tools can specify which of their outputs should be considered when
6459 computing the runtime deps by setting runtime_outputs. If this is unset on 6014 computing the runtime deps by setting runtime_outputs. If this is unset on
6460 the tool, the default will be the first output only. 6015 the tool, the default will be the first output only.
6461
6462
6463 ``` 6016 ```
6464 ### <a name="source_expansion"></a>**How Source Expansion Works** 6017 ### <a name="source_expansion"></a>**How Source Expansion Works**
6465 6018
6466 ``` 6019 ```
6467 Source expansion is used for the action_foreach and copy target types to map 6020 Source expansion is used for the action_foreach and copy target types to map
6468 source file names to output file names or arguments. 6021 source file names to output file names or arguments.
6469 6022
6470 To perform source expansion in the outputs, GN maps every entry in the 6023 To perform source expansion in the outputs, GN maps every entry in the
6471 sources to every entry in the outputs list, producing the cross product of 6024 sources to every entry in the outputs list, producing the cross product of
6472 all combinations, expanding placeholders (see below). 6025 all combinations, expanding placeholders (see below).
6473 6026
6474 Source expansion in the args works similarly, but performing the placeholder 6027 Source expansion in the args works similarly, but performing the placeholder
6475 substitution produces a different set of arguments for each invocation of the 6028 substitution produces a different set of arguments for each invocation of the
6476 script. 6029 script.
6477 6030
6478 If no placeholders are found, the outputs or args list will be treated as a 6031 If no placeholders are found, the outputs or args list will be treated as a
6479 static list of literal file names that do not depend on the sources. 6032 static list of literal file names that do not depend on the sources.
6480 6033
6481 See "gn help copy" and "gn help action_foreach" for more on how this is 6034 See "gn help copy" and "gn help action_foreach" for more on how this is
6482 applied. 6035 applied.
6483
6484 ``` 6036 ```
6485 6037
6486 #### **Placeholders** 6038 #### **Placeholders**
6487 6039
6488 ``` 6040 ```
6489 This section discusses only placeholders for actions. There are other 6041 This section discusses only placeholders for actions. There are other
6490 placeholders used in the definition of tools. See "gn help tool" for those. 6042 placeholders used in the definition of tools. See "gn help tool" for those.
6491 6043
6492 {{source}} 6044 {{source}}
6493 The name of the source file including directory (*). This will generally 6045 The name of the source file including directory (*). This will generally
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
6528 out directory if the source file is in a different directory than the 6080 out directory if the source file is in a different directory than the
6529 build.gn file. 6081 build.gn file.
6530 "//foo/bar/baz.txt" => "obj/foo/bar" 6082 "//foo/bar/baz.txt" => "obj/foo/bar"
6531 6083
6532 {{source_target_relative}} 6084 {{source_target_relative}}
6533 The path to the source file relative to the target's directory. This will 6085 The path to the source file relative to the target's directory. This will
6534 generally be used for replicating the source directory layout in the 6086 generally be used for replicating the source directory layout in the
6535 output directory. This can only be used in actions and it is an error to 6087 output directory. This can only be used in actions and it is an error to
6536 use in process_file_template where there is no "target". 6088 use in process_file_template where there is no "target".
6537 "//foo/bar/baz.txt" => "baz.txt" 6089 "//foo/bar/baz.txt" => "baz.txt"
6538
6539 ``` 6090 ```
6540 6091
6541 #### **(*) Note on directories** 6092 #### **(*) Note on directories**
6542 6093
6543 ``` 6094 ```
6544 Paths containing directories (except the source_root_relative_dir) will be 6095 Paths containing directories (except the source_root_relative_dir) will be
6545 different depending on what context the expansion is evaluated in. Generally 6096 different depending on what context the expansion is evaluated in. Generally
6546 it should "just work" but it means you can't concatenate strings containing 6097 it should "just work" but it means you can't concatenate strings containing
6547 these values with reasonable results. 6098 these values with reasonable results.
6548 6099
6549 Details: source expansions can be used in the "outputs" variable, the "args" 6100 Details: source expansions can be used in the "outputs" variable, the "args"
6550 variable, and in calls to "process_file_template". The "args" are passed to a 6101 variable, and in calls to "process_file_template". The "args" are passed to a
6551 script which is run from the build directory, so these directories will 6102 script which is run from the build directory, so these directories will
6552 relative to the build directory for the script to find. In the other cases, 6103 relative to the build directory for the script to find. In the other cases,
6553 the directories will be source- absolute (begin with a "//") because the 6104 the directories will be source- absolute (begin with a "//") because the
6554 results of those expansions will be handled by GN internally. 6105 results of those expansions will be handled by GN internally.
6555
6556 ``` 6106 ```
6557 6107
6558 #### **Examples** 6108 #### **Examples**
6559 6109
6560 ``` 6110 ```
6561 Non-varying outputs: 6111 Non-varying outputs:
6562 action("hardcoded_outputs") { 6112 action("hardcoded_outputs") {
6563 sources = [ "input1.idl", "input2.idl" ] 6113 sources = [ "input1.idl", "input2.idl" ]
6564 outputs = [ "$target_out_dir/output1.dat", 6114 outputs = [ "$target_out_dir/output1.dat",
6565 "$target_out_dir/output2.dat" ] 6115 "$target_out_dir/output2.dat" ]
6566 } 6116 }
6567 The outputs in this case will be the two literal files given. 6117 The outputs in this case will be the two literal files given.
6568 6118
6569 Varying outputs: 6119 Varying outputs:
6570 action_foreach("varying_outputs") { 6120 action_foreach("varying_outputs") {
6571 sources = [ "input1.idl", "input2.idl" ] 6121 sources = [ "input1.idl", "input2.idl" ]
6572 outputs = [ "{{source_gen_dir}}/{{source_name_part}}.h", 6122 outputs = [ "{{source_gen_dir}}/{{source_name_part}}.h",
6573 "{{source_gen_dir}}/{{source_name_part}}.cc" ] 6123 "{{source_gen_dir}}/{{source_name_part}}.cc" ]
6574 } 6124 }
6575 Performing source expansion will result in the following output names: 6125 Performing source expansion will result in the following output names:
6576 //out/Debug/obj/mydirectory/input1.h 6126 //out/Debug/obj/mydirectory/input1.h
6577 //out/Debug/obj/mydirectory/input1.cc 6127 //out/Debug/obj/mydirectory/input1.cc
6578 //out/Debug/obj/mydirectory/input2.h 6128 //out/Debug/obj/mydirectory/input2.h
6579 //out/Debug/obj/mydirectory/input2.cc 6129 //out/Debug/obj/mydirectory/input2.cc
6580
6581
6582 ``` 6130 ```
6583 ## <a name="switches"></a>Command Line Switches 6131 ## <a name="switches"></a>Command Line Switches
6584 6132
6585 **Available global switches 6133 **Available global switches
6586 ** Do "gn help --the_switch_you_want_help_on" for more. Individual 6134 ** Do "gn help --the_switch_you_want_help_on" for more. Individual
6587 commands may take command-specific switches not listed here. See the 6135 commands may take command-specific switches not listed here. See the
6588 help on your specific command for more. 6136 help on your specific command for more.
6589 6137
6590 ``` 6138 ```
6591
6592 * [--args: Specifies build arguments overrides.](#--args) 6139 * [--args: Specifies build arguments overrides.](#--args)
6593 * [--color: Force colored output.](#--color) 6140 * [--color: Force colored output.](#--color)
6594 * [--dotfile: Override the name of the ".gn" file.](#--dotfile) 6141 * [--dotfile: Override the name of the ".gn" file.](#--dotfile)
6595 * [--fail-on-unused-args: Treat unused build args as fatal errors.](#--fai l-on-unused-args) 6142 * [--fail-on-unused-args: Treat unused build args as fatal errors.](#--fai l-on-unused-args)
6596 * [--markdown: Write help output in the Markdown format.](#--markdown) 6143 * [--markdown: Write help output in the Markdown format.](#--markdown)
6597 * [--nocolor: Force non-colored output.](#--nocolor) 6144 * [--nocolor: Force non-colored output.](#--nocolor)
6598 * [-q: Quiet mode. Don't print output on success.](#-q) 6145 * [-q: Quiet mode. Don't print output on success.](#-q)
6599 * [--root: Explicitly specify source root.](#--root) 6146 * [--root: Explicitly specify source root.](#--root)
6600 * [--runtime-deps-list-file: Save runtime dependencies for targets in file .](#--runtime-deps-list-file) 6147 * [--runtime-deps-list-file: Save runtime dependencies for targets in file .](#--runtime-deps-list-file)
6601 * [--script-executable: Set the executable used to execute scripts.](#--sc ript-executable) 6148 * [--script-executable: Set the executable used to execute scripts.](#--sc ript-executable)
6602 * [--threads: Specify number of worker threads.](#--threads) 6149 * [--threads: Specify number of worker threads.](#--threads)
6603 * [--time: Outputs a summary of how long everything took.](#--time) 6150 * [--time: Outputs a summary of how long everything took.](#--time)
6604 * [--tracelog: Writes a Chrome-compatible trace log to the given file.](#- -tracelog) 6151 * [--tracelog: Writes a Chrome-compatible trace log to the given file.](#- -tracelog)
6605 * [-v: Verbose logging.](#-v) 6152 * [-v: Verbose logging.](#-v)
6606 * [--version: Prints the GN version number and exits.](#--version) 6153 * [--version: Prints the GN version number and exits.](#--version)
6607
6608 ``` 6154 ```
6609 6155
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698