OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/variables.h" | 5 #include "tools/gn/variables.h" |
6 | 6 |
7 namespace variables { | 7 namespace variables { |
8 | 8 |
9 // Built-in variables ---------------------------------------------------------- | 9 // Built-in variables ---------------------------------------------------------- |
10 | 10 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 const char kCurrentToolchain[] = "current_toolchain"; | 158 const char kCurrentToolchain[] = "current_toolchain"; |
159 const char kCurrentToolchain_HelpShort[] = | 159 const char kCurrentToolchain_HelpShort[] = |
160 "current_toolchain: [string] Label of the current toolchain."; | 160 "current_toolchain: [string] Label of the current toolchain."; |
161 const char kCurrentToolchain_Help[] = | 161 const char kCurrentToolchain_Help[] = |
162 "current_toolchain: Label of the current toolchain.\n" | 162 "current_toolchain: Label of the current toolchain.\n" |
163 "\n" | 163 "\n" |
164 " A fully-qualified label representing the current toolchain. You can\n" | 164 " A fully-qualified label representing the current toolchain. You can\n" |
165 " use this to make toolchain-related decisions in the build. See also\n" | 165 " use this to make toolchain-related decisions in the build. See also\n" |
166 " \"default_toolchain\".\n" | 166 " \"default_toolchain\".\n" |
167 "\n" | 167 "\n" |
168 "Example:\n" | 168 "Example\n" |
169 "\n" | 169 "\n" |
170 " if (current_toolchain == \"//build:64_bit_toolchain\") {\n" | 170 " if (current_toolchain == \"//build:64_bit_toolchain\") {\n" |
171 " executable(\"output_thats_64_bit_only\") {\n" | 171 " executable(\"output_thats_64_bit_only\") {\n" |
172 " ...\n"; | 172 " ...\n"; |
173 | 173 |
174 const char kDefaultToolchain[] = "default_toolchain"; | 174 const char kDefaultToolchain[] = "default_toolchain"; |
175 const char kDefaultToolchain_HelpShort[] = | 175 const char kDefaultToolchain_HelpShort[] = |
176 "default_toolchain: [string] Label of the default toolchain."; | 176 "default_toolchain: [string] Label of the default toolchain."; |
177 const char kDefaultToolchain_Help[] = | 177 const char kDefaultToolchain_Help[] = |
178 "default_toolchain: [string] Label of the default toolchain.\n" | 178 "default_toolchain: [string] Label of the default toolchain.\n" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 " \"//out/Debug/arm\" for the \"arm\" toolchain.\n" | 235 " \"//out/Debug/arm\" for the \"arm\" toolchain.\n" |
236 "\n" | 236 "\n" |
237 " This is primarily useful for setting up script calls. If you are\n" | 237 " This is primarily useful for setting up script calls. If you are\n" |
238 " passing this to a script, you will want to pass it through\n" | 238 " passing this to a script, you will want to pass it through\n" |
239 " rebase_path() (see \"gn help rebase_path\") to convert it\n" | 239 " rebase_path() (see \"gn help rebase_path\") to convert it\n" |
240 " to be relative to the build directory.\n" | 240 " to be relative to the build directory.\n" |
241 "\n" | 241 "\n" |
242 " See also \"target_out_dir\" which is usually a better location for\n" | 242 " See also \"target_out_dir\" which is usually a better location for\n" |
243 " output files. It will be inside the root output dir.\n" | 243 " output files. It will be inside the root output dir.\n" |
244 "\n" | 244 "\n" |
245 "Example:\n" | 245 "Example\n" |
246 "\n" | 246 "\n" |
247 " action(\"myscript\") {\n" | 247 " action(\"myscript\") {\n" |
248 " # Pass the output dir to the script.\n" | 248 " # Pass the output dir to the script.\n" |
249 " args = [ \"-o\", rebase_path(root_out_dir, root_build_dir) ]\n" | 249 " args = [ \"-o\", rebase_path(root_out_dir, root_build_dir) ]\n" |
250 " }\n"; | 250 " }\n"; |
251 | 251 |
252 const char kTargetGenDir[] = "target_gen_dir"; | 252 const char kTargetGenDir[] = "target_gen_dir"; |
253 const char kTargetGenDir_HelpShort[] = | 253 const char kTargetGenDir_HelpShort[] = |
254 "target_gen_dir: [string] Directory for a target's generated files."; | 254 "target_gen_dir: [string] Directory for a target's generated files."; |
255 const char kTargetGenDir_Help[] = | 255 const char kTargetGenDir_Help[] = |
256 "target_gen_dir: Directory for a target's generated files.\n" | 256 "target_gen_dir: Directory for a target's generated files.\n" |
257 "\n" | 257 "\n" |
258 " Absolute path to the target's generated file directory. This will be\n" | 258 " Absolute path to the target's generated file directory. This will be\n" |
259 " the \"root_gen_dir\" followed by the relative path to the current\n" | 259 " the \"root_gen_dir\" followed by the relative path to the current\n" |
260 " build file. If your file is in \"//tools/doom_melon\" then\n" | 260 " build file. If your file is in \"//tools/doom_melon\" then\n" |
261 " target_gen_dir would be \"//out/Debug/gen/tools/doom_melon\". It will\n" | 261 " target_gen_dir would be \"//out/Debug/gen/tools/doom_melon\". It will\n" |
262 " not have a trailing slash.\n" | 262 " not have a trailing slash.\n" |
263 "\n" | 263 "\n" |
264 " This is primarily useful for setting up include paths for generated\n" | 264 " This is primarily useful for setting up include paths for generated\n" |
265 " files. If you are passing this to a script, you will want to pass it\n" | 265 " files. If you are passing this to a script, you will want to pass it\n" |
266 " through rebase_path() (see \"gn help rebase_path\") to convert it\n" | 266 " through rebase_path() (see \"gn help rebase_path\") to convert it\n" |
267 " to be relative to the build directory.\n" | 267 " to be relative to the build directory.\n" |
268 "\n" | 268 "\n" |
269 " See also \"gn help root_gen_dir\".\n" | 269 " See also \"gn help root_gen_dir\".\n" |
270 "\n" | 270 "\n" |
271 "Example:\n" | 271 "Example\n" |
272 "\n" | 272 "\n" |
273 " action(\"myscript\") {\n" | 273 " action(\"myscript\") {\n" |
274 " # Pass the generated output dir to the script.\n" | 274 " # Pass the generated output dir to the script.\n" |
275 " args = [ \"-o\", rebase_path(target_gen_dir, root_build_dir) ]" | 275 " args = [ \"-o\", rebase_path(target_gen_dir, root_build_dir) ]" |
276 "\n" | 276 "\n" |
277 " }\n"; | 277 " }\n"; |
278 | 278 |
279 const char kTargetOutDir[] = "target_out_dir"; | 279 const char kTargetOutDir[] = "target_out_dir"; |
280 const char kTargetOutDir_HelpShort[] = | 280 const char kTargetOutDir_HelpShort[] = |
281 "target_out_dir: [string] Directory for target output files."; | 281 "target_out_dir: [string] Directory for target output files."; |
282 const char kTargetOutDir_Help[] = | 282 const char kTargetOutDir_Help[] = |
283 "target_out_dir: [string] Directory for target output files.\n" | 283 "target_out_dir: [string] Directory for target output files.\n" |
284 "\n" | 284 "\n" |
285 " Absolute path to the target's generated file directory. If your\n" | 285 " Absolute path to the target's generated file directory. If your\n" |
286 " current target is in \"//tools/doom_melon\" then this value might be\n" | 286 " current target is in \"//tools/doom_melon\" then this value might be\n" |
287 " \"//out/Debug/obj/tools/doom_melon\". It will not have a trailing\n" | 287 " \"//out/Debug/obj/tools/doom_melon\". It will not have a trailing\n" |
288 " slash.\n" | 288 " slash.\n" |
289 "\n" | 289 "\n" |
290 " This is primarily useful for setting up arguments for calling\n" | 290 " This is primarily useful for setting up arguments for calling\n" |
291 " scripts. If you are passing this to a script, you will want to pass it\n" | 291 " scripts. If you are passing this to a script, you will want to pass it\n" |
292 " through rebase_path() (see \"gn help rebase_path\") to convert it\n" | 292 " through rebase_path() (see \"gn help rebase_path\") to convert it\n" |
293 " to be relative to the build directory.\n" | 293 " to be relative to the build directory.\n" |
294 "\n" | 294 "\n" |
295 " See also \"gn help root_out_dir\".\n" | 295 " See also \"gn help root_out_dir\".\n" |
296 "\n" | 296 "\n" |
297 "Example:\n" | 297 "Example\n" |
298 "\n" | 298 "\n" |
299 " action(\"myscript\") {\n" | 299 " action(\"myscript\") {\n" |
300 " # Pass the output dir to the script.\n" | 300 " # Pass the output dir to the script.\n" |
301 " args = [ \"-o\", rebase_path(target_out_dir, root_build_dir) ]" | 301 " args = [ \"-o\", rebase_path(target_out_dir, root_build_dir) ]" |
302 "\n" | 302 "\n" |
303 " }\n"; | 303 " }\n"; |
304 | 304 |
305 // Target variables ------------------------------------------------------------ | 305 // Target variables ------------------------------------------------------------ |
306 | 306 |
307 #define COMMON_ORDERING_HELP \ | 307 #define COMMON_ORDERING_HELP \ |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 "\n" | 651 "\n" |
652 " Specifies dependencies of a target that are not actually linked into\n" | 652 " Specifies dependencies of a target that are not actually linked into\n" |
653 " the current target. Such dependencies will be built and will be\n" | 653 " the current target. Such dependencies will be built and will be\n" |
654 " available at runtime.\n" | 654 " available at runtime.\n" |
655 "\n" | 655 "\n" |
656 " This is normally used for things like plugins or helper programs that\n" | 656 " This is normally used for things like plugins or helper programs that\n" |
657 " a target needs at runtime.\n" | 657 " a target needs at runtime.\n" |
658 "\n" | 658 "\n" |
659 " See also \"gn help deps\" and \"gn help data\".\n" | 659 " See also \"gn help deps\" and \"gn help data\".\n" |
660 "\n" | 660 "\n" |
661 "Example:\n" | 661 "Example\n" |
| 662 "\n" |
662 " executable(\"foo\") {\n" | 663 " executable(\"foo\") {\n" |
663 " deps = [ \"//base\" ]\n" | 664 " deps = [ \"//base\" ]\n" |
664 " data_deps = [ \"//plugins:my_runtime_plugin\" ]\n" | 665 " data_deps = [ \"//plugins:my_runtime_plugin\" ]\n" |
665 " }\n"; | 666 " }\n"; |
666 | 667 |
667 const char kDefines[] = "defines"; | 668 const char kDefines[] = "defines"; |
668 const char kDefines_HelpShort[] = | 669 const char kDefines_HelpShort[] = |
669 "defines: [string list] C preprocessor defines."; | 670 "defines: [string list] C preprocessor defines."; |
670 const char kDefines_Help[] = | 671 const char kDefines_Help[] = |
671 "defines: C preprocessor defines.\n" | 672 "defines: C preprocessor defines.\n" |
672 "\n" | 673 "\n" |
673 " A list of strings\n" | 674 " A list of strings\n" |
674 "\n" | 675 "\n" |
675 " These strings will be passed to the C/C++ compiler as #defines. The\n" | 676 " These strings will be passed to the C/C++ compiler as #defines. The\n" |
676 " strings may or may not include an \"=\" to assign a value.\n" | 677 " strings may or may not include an \"=\" to assign a value.\n" |
677 COMMON_ORDERING_HELP | 678 COMMON_ORDERING_HELP |
678 "\n" | 679 "\n" |
679 "Example:\n" | 680 "Example\n" |
| 681 "\n" |
680 " defines = [ \"AWESOME_FEATURE\", \"LOG_LEVEL=3\" ]\n"; | 682 " defines = [ \"AWESOME_FEATURE\", \"LOG_LEVEL=3\" ]\n"; |
681 | 683 |
682 const char kDepfile[] = "depfile"; | 684 const char kDepfile[] = "depfile"; |
683 const char kDepfile_HelpShort[] = | 685 const char kDepfile_HelpShort[] = |
684 "depfile: [string] File name for input dependencies for actions."; | 686 "depfile: [string] File name for input dependencies for actions."; |
685 const char kDepfile_Help[] = | 687 const char kDepfile_Help[] = |
686 "depfile: [string] File name for input dependencies for actions.\n" | 688 "depfile: [string] File name for input dependencies for actions.\n" |
687 "\n" | 689 "\n" |
688 " If nonempty, this string specifies that the current action or\n" | 690 " If nonempty, this string specifies that the current action or\n" |
689 " action_foreach target will generate the given \".d\" file containing\n" | 691 " action_foreach target will generate the given \".d\" file containing\n" |
690 " the dependencies of the input. Empty or unset means that the script\n" | 692 " the dependencies of the input. Empty or unset means that the script\n" |
691 " doesn't generate the files.\n" | 693 " doesn't generate the files.\n" |
692 "\n" | 694 "\n" |
693 " The .d file should go in the target output directory. If you have more\n" | 695 " The .d file should go in the target output directory. If you have more\n" |
694 " than one source file that the script is being run over, you can use\n" | 696 " than one source file that the script is being run over, you can use\n" |
695 " the output file expansions described in \"gn help action_foreach\" to\n" | 697 " the output file expansions described in \"gn help action_foreach\" to\n" |
696 " name the .d file according to the input." | 698 " name the .d file according to the input." |
697 "\n" | 699 "\n" |
698 " The format is that of a Makefile, and all of the paths should be\n" | 700 " The format is that of a Makefile, and all of the paths should be\n" |
699 " relative to the root build directory.\n" | 701 " relative to the root build directory.\n" |
700 "\n" | 702 "\n" |
701 "Example:\n" | 703 "Example\n" |
| 704 "\n" |
702 " action_foreach(\"myscript_target\") {\n" | 705 " action_foreach(\"myscript_target\") {\n" |
703 " script = \"myscript.py\"\n" | 706 " script = \"myscript.py\"\n" |
704 " sources = [ ... ]\n" | 707 " sources = [ ... ]\n" |
705 "\n" | 708 "\n" |
706 " # Locate the depfile in the output directory named like the\n" | 709 " # Locate the depfile in the output directory named like the\n" |
707 " # inputs but with a \".d\" appended.\n" | 710 " # inputs but with a \".d\" appended.\n" |
708 " depfile = \"$relative_target_output_dir/{{source_name}}.d\"\n" | 711 " depfile = \"$relative_target_output_dir/{{source_name}}.d\"\n" |
709 "\n" | 712 "\n" |
710 " # Say our script uses \"-o <d file>\" to indicate the depfile.\n" | 713 " # Say our script uses \"-o <d file>\" to indicate the depfile.\n" |
711 " args = [ \"{{source}}\", \"-o\", depfile ]\n" | 714 " args = [ \"{{source}}\", \"-o\", depfile ]\n" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 "include_dirs: [directory list] Additional include directories."; | 784 "include_dirs: [directory list] Additional include directories."; |
782 const char kIncludeDirs_Help[] = | 785 const char kIncludeDirs_Help[] = |
783 "include_dirs: Additional include directories.\n" | 786 "include_dirs: Additional include directories.\n" |
784 "\n" | 787 "\n" |
785 " A list of source directories.\n" | 788 " A list of source directories.\n" |
786 "\n" | 789 "\n" |
787 " The directories in this list will be added to the include path for\n" | 790 " The directories in this list will be added to the include path for\n" |
788 " the files in the affected target.\n" | 791 " the files in the affected target.\n" |
789 COMMON_ORDERING_HELP | 792 COMMON_ORDERING_HELP |
790 "\n" | 793 "\n" |
791 "Example:\n" | 794 "Example\n" |
| 795 "\n" |
792 " include_dirs = [ \"src/include\", \"//third_party/foo\" ]\n"; | 796 " include_dirs = [ \"src/include\", \"//third_party/foo\" ]\n"; |
793 | 797 |
794 const char kInputs[] = "inputs"; | 798 const char kInputs[] = "inputs"; |
795 const char kInputs_HelpShort[] = | 799 const char kInputs_HelpShort[] = |
796 "inputs: [file list] Additional compile-time dependencies."; | 800 "inputs: [file list] Additional compile-time dependencies."; |
797 const char kInputs_Help[] = | 801 const char kInputs_Help[] = |
798 "inputs: Additional compile-time dependencies.\n" | 802 "inputs: Additional compile-time dependencies.\n" |
799 "\n" | 803 "\n" |
800 " Inputs are compile-time dependencies of the current target. This means\n" | 804 " Inputs are compile-time dependencies of the current target. This means\n" |
801 " that all inputs must be available before compiling any of the sources\n" | 805 " that all inputs must be available before compiling any of the sources\n" |
802 " or executing any actions.\n" | 806 " or executing any actions.\n" |
803 "\n" | 807 "\n" |
804 " Inputs are typically only used for action and action_foreach targets.\n" | 808 " Inputs are typically only used for action and action_foreach targets.\n" |
805 "\n" | 809 "\n" |
806 "Inputs for actions\n" | 810 "Inputs for actions\n" |
807 "\n" | 811 "\n" |
808 " For action and action_foreach targets, inputs should be the inputs to\n" | 812 " For action and action_foreach targets, inputs should be the inputs to\n" |
809 " script that don't vary. These should be all .py files that the script\n" | 813 " script that don't vary. These should be all .py files that the script\n" |
810 " uses via imports (the main script itself will be an implcit dependency\n" | 814 " uses via imports (the main script itself will be an implcit dependency\n" |
811 " of the action so need not be listed).\n" | 815 " of the action so need not be listed).\n" |
812 "\n" | 816 "\n" |
813 " For action targets, inputs should be the entire set of inputs the\n" | 817 " For action targets, inputs and sources are treated the same, but from\n" |
814 " script needs. For action_foreach targets, inputs should be the set of\n" | 818 " a style perspective, it's recommended to follow the same rule as\n" |
815 " dependencies that don't change. These will be applied to each script\n" | 819 " action_foreach and put helper files in the inputs, and the data used\n" |
816 " invocation over the sources.\n" | 820 " by the script (if any) in sources.\n" |
817 "\n" | 821 "\n" |
818 " Note that another way to declare input dependencies from an action\n" | 822 " Note that another way to declare input dependencies from an action\n" |
819 " is to have the action write a depfile (see \"gn help depfile\"). This\n" | 823 " is to have the action write a depfile (see \"gn help depfile\"). This\n" |
820 " allows the script to dynamically write input dependencies, that might\n" | 824 " allows the script to dynamically write input dependencies, that might\n" |
821 " not be known until actually executing the script. This is more\n" | 825 " not be known until actually executing the script. This is more\n" |
822 " efficient than doing processing while running GN to determine the\n" | 826 " efficient than doing processing while running GN to determine the\n" |
823 " inputs, and is easier to keep in-sync than hardcoding the list.\n" | 827 " inputs, and is easier to keep in-sync than hardcoding the list.\n" |
824 "\n" | 828 "\n" |
| 829 "Script input gotchas\n" |
| 830 "\n" |
| 831 " It may be tempting to write a script that enumerates all files in a\n" |
| 832 " directory as inputs. Don't do this! Even if you specify all the files\n" |
| 833 " in the inputs or sources in the GN target (or worse, enumerate the\n" |
| 834 " files in an exec_script call when running GN, which will be slow), the\n" |
| 835 " dependencies will be broken.\n" |
| 836 "\n" |
| 837 " The problem happens if a file is ever removed because the inputs are\n" |
| 838 " not listed on the command line to the script. Because the script\n" |
| 839 " hasn't changed and all inputs are up-to-date, the script will not\n" |
| 840 " re-run and you will get a stale build. Instead, either list all\n" |
| 841 " inputs on the command line to the script, or if there are many, create\n" |
| 842 " a separate list file that the script reads. As long as this file is\n" |
| 843 " listed in the inputs, the build will detect when it has changed in any\n" |
| 844 " way and the action will re-run.\n" |
| 845 "\n" |
825 "Inputs for binary targets\n" | 846 "Inputs for binary targets\n" |
826 "\n" | 847 "\n" |
827 " Any input dependencies will be resolved before compiling any sources.\n" | 848 " Any input dependencies will be resolved before compiling any sources.\n" |
828 " Normally, all actions that a target depends on will be run before any\n" | 849 " Normally, all actions that a target depends on will be run before any\n" |
829 " files in a target are compiled. So if you depend on generated headers,\n" | 850 " files in a target are compiled. So if you depend on generated headers,\n" |
830 " you do not typically need to list them in the inputs section.\n" | 851 " you do not typically need to list them in the inputs section.\n" |
831 "\n" | 852 "\n" |
| 853 " Inputs for binary targets will be treated as order-only dependencies,\n" |
| 854 " meaning that they will be forced up-to-date before compiling or\n" |
| 855 " any files in the target, but changes in the inputs will not\n" |
| 856 " necessarily force the target to compile. This is because it is\n" |
| 857 " expected that the compiler will report the precise list of input\n" |
| 858 " dependencies required to recompile each file once the initial build\n" |
| 859 " is done.\n" |
| 860 "\n" |
832 "Example\n" | 861 "Example\n" |
833 "\n" | 862 "\n" |
834 " action(\"myscript\") {\n" | 863 " action(\"myscript\") {\n" |
835 " script = \"domything.py\"\n" | 864 " script = \"domything.py\"\n" |
836 " inputs = [ \"input.data\" ]\n" | 865 " inputs = [ \"input.data\" ]\n" |
837 " }\n"; | 866 " }\n"; |
838 | 867 |
839 const char kLdflags[] = "ldflags"; | 868 const char kLdflags[] = "ldflags"; |
840 const char kLdflags_HelpShort[] = | 869 const char kLdflags_HelpShort[] = |
841 "ldflags: [string list] Flags passed to the linker."; | 870 "ldflags: [string list] Flags passed to the linker."; |
(...skipping 27 matching lines...) Expand all Loading... |
869 "lib_dirs: Additional library directories.\n" | 898 "lib_dirs: Additional library directories.\n" |
870 "\n" | 899 "\n" |
871 " A list of directories.\n" | 900 " A list of directories.\n" |
872 "\n" | 901 "\n" |
873 " Specifies additional directories passed to the linker for searching\n" | 902 " Specifies additional directories passed to the linker for searching\n" |
874 " for the required libraries. If an item is not an absolute path, it\n" | 903 " for the required libraries. If an item is not an absolute path, it\n" |
875 " will be treated as being relative to the current build file.\n" | 904 " will be treated as being relative to the current build file.\n" |
876 COMMON_LIB_INHERITANCE_HELP | 905 COMMON_LIB_INHERITANCE_HELP |
877 COMMON_ORDERING_HELP | 906 COMMON_ORDERING_HELP |
878 "\n" | 907 "\n" |
879 "Example:\n" | 908 "Example\n" |
| 909 "\n" |
880 " lib_dirs = [ \"/usr/lib/foo\", \"lib/doom_melon\" ]\n"; | 910 " lib_dirs = [ \"/usr/lib/foo\", \"lib/doom_melon\" ]\n"; |
881 | 911 |
882 const char kLibs[] = "libs"; | 912 const char kLibs[] = "libs"; |
883 const char kLibs_HelpShort[] = | 913 const char kLibs_HelpShort[] = |
884 "libs: [string list] Additional libraries to link."; | 914 "libs: [string list] Additional libraries to link."; |
885 const char kLibs_Help[] = | 915 const char kLibs_Help[] = |
886 "libs: Additional libraries to link.\n" | 916 "libs: Additional libraries to link.\n" |
887 "\n" | 917 "\n" |
888 " A list of strings.\n" | 918 " A list of strings.\n" |
889 "\n" | 919 "\n" |
890 " These files will be passed to the linker, which will generally search\n" | 920 " These files will be passed to the linker, which will generally search\n" |
891 " the library include path. Unlike a normal list of files, they will be\n" | 921 " the library include path. Unlike a normal list of files, they will be\n" |
892 " passed to the linker unmodified rather than being treated as file\n" | 922 " passed to the linker unmodified rather than being treated as file\n" |
893 " names relative to the current build file. Generally you would set\n" | 923 " names relative to the current build file. Generally you would set\n" |
894 " the \"lib_dirs\" so your library is found. If you need to specify\n" | 924 " the \"lib_dirs\" so your library is found. If you need to specify\n" |
895 " a path, you can use \"rebase_path\" to convert a path to be relative\n" | 925 " a path, you can use \"rebase_path\" to convert a path to be relative\n" |
896 " to the build directory.\n" | 926 " to the build directory.\n" |
897 "\n" | 927 "\n" |
898 " When constructing the linker command, the \"lib_prefix\" attribute of\n" | 928 " When constructing the linker command, the \"lib_prefix\" attribute of\n" |
899 " the linker tool in the current toolchain will be prepended to each\n" | 929 " the linker tool in the current toolchain will be prepended to each\n" |
900 " library. So your BUILD file should not specify the switch prefix\n" | 930 " library. So your BUILD file should not specify the switch prefix\n" |
901 " (like \"-l\"). On Mac, libraries ending in \".framework\" will be\n" | 931 " (like \"-l\"). On Mac, libraries ending in \".framework\" will be\n" |
902 " special-cased: the switch \"-framework\" will be prepended instead of\n" | 932 " special-cased: the switch \"-framework\" will be prepended instead of\n" |
903 " the lib_prefix, and the \".framework\" suffix will be trimmed.\n" | 933 " the lib_prefix, and the \".framework\" suffix will be trimmed.\n" |
904 COMMON_LIB_INHERITANCE_HELP | 934 COMMON_LIB_INHERITANCE_HELP |
905 COMMON_ORDERING_HELP | 935 COMMON_ORDERING_HELP |
906 "\n" | 936 "\n" |
907 "Examples:\n" | 937 "Examples\n" |
| 938 "\n" |
908 " On Windows:\n" | 939 " On Windows:\n" |
909 " libs = [ \"ctl3d.lib\" ]\n" | 940 " libs = [ \"ctl3d.lib\" ]\n" |
910 " On Linux:\n" | 941 " On Linux:\n" |
911 " libs = [ \"ld\" ]\n"; | 942 " libs = [ \"ld\" ]\n"; |
912 | 943 |
913 const char kOutputExtension[] = "output_extension"; | 944 const char kOutputExtension[] = "output_extension"; |
914 const char kOutputExtension_HelpShort[] = | 945 const char kOutputExtension_HelpShort[] = |
915 "output_extension: [string] Value to use for the output's file extension."; | 946 "output_extension: [string] Value to use for the output's file extension."; |
916 const char kOutputExtension_Help[] = | 947 const char kOutputExtension_Help[] = |
917 "output_extension: Value to use for the output's file extension.\n" | 948 "output_extension: Value to use for the output's file extension.\n" |
918 "\n" | 949 "\n" |
919 " Normally the file extension for a target is based on the target\n" | 950 " Normally the file extension for a target is based on the target\n" |
920 " type and the operating system, but in rare cases you will need to\n" | 951 " type and the operating system, but in rare cases you will need to\n" |
921 " override the name (for example to use \"libfreetype.so.6\" instead\n" | 952 " override the name (for example to use \"libfreetype.so.6\" instead\n" |
922 " of libfreetype.so on Linux)."; | 953 " of libfreetype.so on Linux).\n" |
| 954 "\n" |
| 955 " This value should not include a leading dot. If undefined or empty,\n" |
| 956 " the default_output_extension specified on the tool will be used.\n" |
| 957 " The output_extension will be used in the \"{{output_extension}}\"\n" |
| 958 " expansion which the linker tool will generally use to specify the\n" |
| 959 " output file name. See \"gn help tool\".\n" |
| 960 "\n" |
| 961 "Example\n" |
| 962 "\n" |
| 963 " shared_library(\"freetype\") {\n" |
| 964 " if (is_linux) {\n" |
| 965 " # Call the output \"libfreetype.so.6\"\n" |
| 966 " output_extension = \"so.6\"\n" |
| 967 " }\n" |
| 968 " ...\n" |
| 969 " }\n" |
| 970 "\n" |
| 971 " # On Windows, generate a \"mysettings.cpl\" control panel applet.\n" |
| 972 " # Control panel applets are actually special shared libraries.\n" |
| 973 " if (is_win) {\n" |
| 974 " shared_library(\"mysettings\") {\n" |
| 975 " output_extension = \"cpl\"\n" |
| 976 " ...\n" |
| 977 " }\n" |
| 978 " }\n"; |
923 | 979 |
924 const char kOutputName[] = "output_name"; | 980 const char kOutputName[] = "output_name"; |
925 const char kOutputName_HelpShort[] = | 981 const char kOutputName_HelpShort[] = |
926 "output_name: [string] Name for the output file other than the default."; | 982 "output_name: [string] Name for the output file other than the default."; |
927 const char kOutputName_Help[] = | 983 const char kOutputName_Help[] = |
928 "output_name: Define a name for the output file other than the default.\n" | 984 "output_name: Define a name for the output file other than the default.\n" |
929 "\n" | 985 "\n" |
930 " Normally the output name of a target will be based on the target name,\n" | 986 " Normally the output name of a target will be based on the target name,\n" |
931 " so the target \"//foo/bar:bar_unittests\" will generate an output\n" | 987 " so the target \"//foo/bar:bar_unittests\" will generate an output\n" |
932 " file such as \"bar_unittests.exe\" (using Windows as an example).\n" | 988 " file such as \"bar_unittests.exe\" (using Windows as an example).\n" |
933 "\n" | 989 "\n" |
934 " Sometimes you will want an alternate name to avoid collisions or\n" | 990 " Sometimes you will want an alternate name to avoid collisions or\n" |
935 " if the internal name isn't appropriate for public distribution.\n" | 991 " if the internal name isn't appropriate for public distribution.\n" |
936 "\n" | 992 "\n" |
937 " The output name should have no extension or prefixes, these will be\n" | 993 " The output name should have no extension or prefixes, these will be\n" |
938 " added using the default system rules. For example, on Linux an output\n" | 994 " added using the default system rules. For example, on Linux an output\n" |
939 " name of \"foo\" will produce a shared library \"libfoo.so\".\n" | 995 " name of \"foo\" will produce a shared library \"libfoo.so\". There\n" |
| 996 " is no way to override the output prefix of a linker tool on a per-\n" |
| 997 " target basis. If you need more flexibility, create a copy target\n" |
| 998 " to produce the file you want.\n" |
940 "\n" | 999 "\n" |
941 " This variable is valid for all binary output target types.\n" | 1000 " This variable is valid for all binary output target types.\n" |
942 "\n" | 1001 "\n" |
943 "Example:\n" | 1002 "Example\n" |
| 1003 "\n" |
944 " static_library(\"doom_melon\") {\n" | 1004 " static_library(\"doom_melon\") {\n" |
945 " output_name = \"fluffy_bunny\"\n" | 1005 " output_name = \"fluffy_bunny\"\n" |
946 " }\n"; | 1006 " }\n"; |
947 | 1007 |
948 const char kOutputs[] = "outputs"; | 1008 const char kOutputs[] = "outputs"; |
949 const char kOutputs_HelpShort[] = | 1009 const char kOutputs_HelpShort[] = |
950 "outputs: [file list] Output files for actions and copy targets."; | 1010 "outputs: [file list] Output files for actions and copy targets."; |
951 const char kOutputs_Help[] = | 1011 const char kOutputs_Help[] = |
952 "outputs: Output files for actions and copy targets.\n" | 1012 "outputs: Output files for actions and copy targets.\n" |
953 "\n" | 1013 "\n" |
954 " Outputs is valid for \"copy\", \"action\", and \"action_foreach\"\n" | 1014 " Outputs is valid for \"copy\", \"action\", and \"action_foreach\"\n" |
955 " target types and indicates the resulting files. The values may contain\n" | 1015 " target types and indicates the resulting files. Outputs must always\n" |
956 " source expansions to generate the output names from the sources (see\n" | 1016 " refer to files in the build directory.\n" |
957 " \"gn help source_expansion\").\n" | |
958 "\n" | 1017 "\n" |
959 " For copy targets, the outputs is the destination for the copied\n" | 1018 " copy\n" |
960 " file(s). For actions, the outputs should be the list of files\n" | 1019 " Copy targets should have exactly one entry in the outputs list. If\n" |
961 " generated by the script.\n"; | 1020 " there is exactly one source, this can be a literal file name or a\n" |
| 1021 " source expansion. If there is more than one source, this must\n" |
| 1022 " contain a source expansion to map a single input name to a single\n" |
| 1023 " output name. See \"gn help copy\".\n" |
| 1024 "\n" |
| 1025 " action_foreach\n" |
| 1026 " Action_foreach targets must always use source expansions to map\n" |
| 1027 " input files to output files. There can be more than one output,\n" |
| 1028 " which means that each invocation of the script will produce a set of\n" |
| 1029 " files (presumably based on the name of the input file). See\n" |
| 1030 " \"gn help action_foreach\".\n" |
| 1031 "\n" |
| 1032 " action\n" |
| 1033 " Action targets (excluding action_foreach) must list literal output\n" |
| 1034 " file(s) with no source expansions. See \"gn help action\".\n"; |
962 | 1035 |
963 const char kPrecompiledHeader[] = "precompiled_header"; | 1036 const char kPrecompiledHeader[] = "precompiled_header"; |
964 const char kPrecompiledHeader_HelpShort[] = | 1037 const char kPrecompiledHeader_HelpShort[] = |
965 "precompiled_header: [string] Header file to precompile."; | 1038 "precompiled_header: [string] Header file to precompile."; |
966 const char kPrecompiledHeader_Help[] = | 1039 const char kPrecompiledHeader_Help[] = |
967 "precompiled_header: [string] Header file to precompile.\n" | 1040 "precompiled_header: [string] Header file to precompile.\n" |
968 "\n" | 1041 "\n" |
969 " Precompiled headers will be used when a target specifies this\n" | 1042 " Precompiled headers will be used when a target specifies this\n" |
970 " value, or a config applying to this target specifies this value.\n" | 1043 " value, or a config applying to this target specifies this value.\n" |
971 " In addition, the tool corresponding to the source files must also\n" | 1044 " In addition, the tool corresponding to the source files must also\n" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 "\n" | 1124 "\n" |
1052 " Public files are inherited through the dependency tree. So if there is\n" | 1125 " Public files are inherited through the dependency tree. So if there is\n" |
1053 " a dependency A -> B -> C, then A can include C's public headers.\n" | 1126 " a dependency A -> B -> C, then A can include C's public headers.\n" |
1054 " However, the same is NOT true of visibility, so unless A is in C's\n" | 1127 " However, the same is NOT true of visibility, so unless A is in C's\n" |
1055 " visibility list, the include will be rejected.\n" | 1128 " visibility list, the include will be rejected.\n" |
1056 "\n" | 1129 "\n" |
1057 " GN only knows about files declared in the \"sources\" and \"public\"\n" | 1130 " GN only knows about files declared in the \"sources\" and \"public\"\n" |
1058 " sections of targets. If a file is included that is not known to the\n" | 1131 " sections of targets. If a file is included that is not known to the\n" |
1059 " build, it will be allowed.\n" | 1132 " build, it will be allowed.\n" |
1060 "\n" | 1133 "\n" |
1061 "Examples:\n" | 1134 "Examples\n" |
| 1135 "\n" |
1062 " These exact files are public:\n" | 1136 " These exact files are public:\n" |
1063 " public = [ \"foo.h\", \"bar.h\" ]\n" | 1137 " public = [ \"foo.h\", \"bar.h\" ]\n" |
1064 "\n" | 1138 "\n" |
1065 " No files are public (no targets may include headers from this one):\n" | 1139 " No files are public (no targets may include headers from this one):\n" |
1066 " public = []\n"; | 1140 " public = []\n"; |
1067 | 1141 |
1068 const char kPublicConfigs[] = "public_configs"; | 1142 const char kPublicConfigs[] = "public_configs"; |
1069 const char kPublicConfigs_HelpShort[] = | 1143 const char kPublicConfigs_HelpShort[] = |
1070 "public_configs: [label list] Configs applied to dependents."; | 1144 "public_configs: [label list] Configs applied to dependents."; |
1071 const char kPublicConfigs_Help[] = | 1145 const char kPublicConfigs_Help[] = |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1147 " An absolute or buildfile-relative file name of a Python script to run\n" | 1221 " An absolute or buildfile-relative file name of a Python script to run\n" |
1148 " for a action and action_foreach targets (see \"gn help action\" and\n" | 1222 " for a action and action_foreach targets (see \"gn help action\" and\n" |
1149 " \"gn help action_foreach\").\n"; | 1223 " \"gn help action_foreach\").\n"; |
1150 | 1224 |
1151 const char kSources[] = "sources"; | 1225 const char kSources[] = "sources"; |
1152 const char kSources_HelpShort[] = | 1226 const char kSources_HelpShort[] = |
1153 "sources: [file list] Source files for a target."; | 1227 "sources: [file list] Source files for a target."; |
1154 const char kSources_Help[] = | 1228 const char kSources_Help[] = |
1155 "sources: Source files for a target\n" | 1229 "sources: Source files for a target\n" |
1156 "\n" | 1230 "\n" |
1157 " A list of files relative to the current buildfile.\n"; | 1231 " A list of files. Non-absolute paths will be resolved relative to the\n" |
| 1232 " current build file.\n" |
| 1233 "\n" |
| 1234 "Sources for binary targets\n" |
| 1235 "\n" |
| 1236 " For binary targets (source sets, executables, and libraries), the\n" |
| 1237 " known file types will be compiled with the associated tools. Unknown\n" |
| 1238 " file types and headers will be skipped. However, you should still\n" |
| 1239 " list all C/C+ header files so GN knows about the existance of those\n" |
| 1240 " files for the purposes of include checking.\n" |
| 1241 "\n" |
| 1242 " As a special case, a file ending in \".def\" will be treated as a\n" |
| 1243 " Windows module definition file. It will be appended to the link\n" |
| 1244 " line with a preceeding \"/DEF:\" string. There must be at most one\n" |
| 1245 " .def file in a target and they do not cross dependency boundaries\n" |
| 1246 " (so specifying a .def file in a static library or source set will have\n" |
| 1247 " no effect on the executable or shared library they're linked into).\n" |
| 1248 "\n" |
| 1249 "Sources for non-binary targets\n" |
| 1250 "\n" |
| 1251 " action_foreach\n" |
| 1252 " The sources are the set of files that the script will be executed\n" |
| 1253 " over. The script will run once per file.\n" |
| 1254 "\n" |
| 1255 " action\n" |
| 1256 " The sources will be treated the same as inputs. See " |
| 1257 "\"gn help inputs\"\n" |
| 1258 " for more information and usage advice.\n" |
| 1259 "\n" |
| 1260 " copy\n" |
| 1261 " The source are the source files to copy.\n"; |
1158 | 1262 |
1159 const char kTestonly[] = "testonly"; | 1263 const char kTestonly[] = "testonly"; |
1160 const char kTestonly_HelpShort[] = | 1264 const char kTestonly_HelpShort[] = |
1161 "testonly: [boolean] Declares a target must only be used for testing."; | 1265 "testonly: [boolean] Declares a target must only be used for testing."; |
1162 const char kTestonly_Help[] = | 1266 const char kTestonly_Help[] = |
1163 "testonly: Declares a target must only be used for testing.\n" | 1267 "testonly: Declares a target must only be used for testing.\n" |
1164 "\n" | 1268 "\n" |
1165 " Boolean. Defaults to false.\n" | 1269 " Boolean. Defaults to false.\n" |
1166 "\n" | 1270 "\n" |
1167 " When a target is marked \"testonly = true\", it must only be depended\n" | 1271 " When a target is marked \"testonly = true\", it must only be depended\n" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1307 INSERT_VARIABLE(Sources) | 1411 INSERT_VARIABLE(Sources) |
1308 INSERT_VARIABLE(Testonly) | 1412 INSERT_VARIABLE(Testonly) |
1309 INSERT_VARIABLE(Visibility) | 1413 INSERT_VARIABLE(Visibility) |
1310 } | 1414 } |
1311 return info_map; | 1415 return info_map; |
1312 } | 1416 } |
1313 | 1417 |
1314 #undef INSERT_VARIABLE | 1418 #undef INSERT_VARIABLE |
1315 | 1419 |
1316 } // namespace variables | 1420 } // namespace variables |
OLD | NEW |