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

Unified Diff: tools/gn/variables.cc

Issue 1367923006: Enhance GN documentation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/docs/reference.md ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/variables.cc
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
index 0b7ac7a1e5bef7c8f411441c7c1cd5d45e0efa72..6f9c8486fe323f3a87a143519e1647dd371b9ab9 100644
--- a/tools/gn/variables.cc
+++ b/tools/gn/variables.cc
@@ -165,7 +165,7 @@ const char kCurrentToolchain_Help[] =
" use this to make toolchain-related decisions in the build. See also\n"
" \"default_toolchain\".\n"
"\n"
- "Example:\n"
+ "Example\n"
"\n"
" if (current_toolchain == \"//build:64_bit_toolchain\") {\n"
" executable(\"output_thats_64_bit_only\") {\n"
@@ -242,7 +242,7 @@ const char kRootOutDir_Help[] =
" See also \"target_out_dir\" which is usually a better location for\n"
" output files. It will be inside the root output dir.\n"
"\n"
- "Example:\n"
+ "Example\n"
"\n"
" action(\"myscript\") {\n"
" # Pass the output dir to the script.\n"
@@ -268,7 +268,7 @@ const char kTargetGenDir_Help[] =
"\n"
" See also \"gn help root_gen_dir\".\n"
"\n"
- "Example:\n"
+ "Example\n"
"\n"
" action(\"myscript\") {\n"
" # Pass the generated output dir to the script.\n"
@@ -294,7 +294,7 @@ const char kTargetOutDir_Help[] =
"\n"
" See also \"gn help root_out_dir\".\n"
"\n"
- "Example:\n"
+ "Example\n"
"\n"
" action(\"myscript\") {\n"
" # Pass the output dir to the script.\n"
@@ -658,7 +658,8 @@ const char kDataDeps_Help[] =
"\n"
" See also \"gn help deps\" and \"gn help data\".\n"
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" executable(\"foo\") {\n"
" deps = [ \"//base\" ]\n"
" data_deps = [ \"//plugins:my_runtime_plugin\" ]\n"
@@ -676,7 +677,8 @@ const char kDefines_Help[] =
" strings may or may not include an \"=\" to assign a value.\n"
COMMON_ORDERING_HELP
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" defines = [ \"AWESOME_FEATURE\", \"LOG_LEVEL=3\" ]\n";
const char kDepfile[] = "depfile";
@@ -698,7 +700,8 @@ const char kDepfile_Help[] =
" The format is that of a Makefile, and all of the paths should be\n"
" relative to the root build directory.\n"
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" action_foreach(\"myscript_target\") {\n"
" script = \"myscript.py\"\n"
" sources = [ ... ]\n"
@@ -788,7 +791,8 @@ const char kIncludeDirs_Help[] =
" the files in the affected target.\n"
COMMON_ORDERING_HELP
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" include_dirs = [ \"src/include\", \"//third_party/foo\" ]\n";
const char kInputs[] = "inputs";
@@ -810,10 +814,10 @@ const char kInputs_Help[] =
" uses via imports (the main script itself will be an implcit dependency\n"
" of the action so need not be listed).\n"
"\n"
- " For action targets, inputs should be the entire set of inputs the\n"
- " script needs. For action_foreach targets, inputs should be the set of\n"
- " dependencies that don't change. These will be applied to each script\n"
- " invocation over the sources.\n"
+ " For action targets, inputs and sources are treated the same, but from\n"
+ " a style perspective, it's recommended to follow the same rule as\n"
+ " action_foreach and put helper files in the inputs, and the data used\n"
+ " by the script (if any) in sources.\n"
"\n"
" Note that another way to declare input dependencies from an action\n"
" is to have the action write a depfile (see \"gn help depfile\"). This\n"
@@ -822,6 +826,23 @@ const char kInputs_Help[] =
" efficient than doing processing while running GN to determine the\n"
" inputs, and is easier to keep in-sync than hardcoding the list.\n"
"\n"
+ "Script input gotchas\n"
+ "\n"
+ " It may be tempting to write a script that enumerates all files in a\n"
+ " directory as inputs. Don't do this! Even if you specify all the files\n"
+ " in the inputs or sources in the GN target (or worse, enumerate the\n"
+ " files in an exec_script call when running GN, which will be slow), the\n"
+ " dependencies will be broken.\n"
+ "\n"
+ " The problem happens if a file is ever removed because the inputs are\n"
+ " not listed on the command line to the script. Because the script\n"
+ " hasn't changed and all inputs are up-to-date, the script will not\n"
+ " re-run and you will get a stale build. Instead, either list all\n"
+ " inputs on the command line to the script, or if there are many, create\n"
+ " a separate list file that the script reads. As long as this file is\n"
+ " listed in the inputs, the build will detect when it has changed in any\n"
+ " way and the action will re-run.\n"
+ "\n"
"Inputs for binary targets\n"
"\n"
" Any input dependencies will be resolved before compiling any sources.\n"
@@ -829,6 +850,14 @@ const char kInputs_Help[] =
" files in a target are compiled. So if you depend on generated headers,\n"
" you do not typically need to list them in the inputs section.\n"
"\n"
+ " Inputs for binary targets will be treated as order-only dependencies,\n"
+ " meaning that they will be forced up-to-date before compiling or\n"
+ " any files in the target, but changes in the inputs will not\n"
+ " necessarily force the target to compile. This is because it is\n"
+ " expected that the compiler will report the precise list of input\n"
+ " dependencies required to recompile each file once the initial build\n"
+ " is done.\n"
+ "\n"
"Example\n"
"\n"
" action(\"myscript\") {\n"
@@ -876,7 +905,8 @@ const char kLibDirs_Help[] =
COMMON_LIB_INHERITANCE_HELP
COMMON_ORDERING_HELP
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" lib_dirs = [ \"/usr/lib/foo\", \"lib/doom_melon\" ]\n";
const char kLibs[] = "libs";
@@ -904,7 +934,8 @@ const char kLibs_Help[] =
COMMON_LIB_INHERITANCE_HELP
COMMON_ORDERING_HELP
"\n"
- "Examples:\n"
+ "Examples\n"
+ "\n"
" On Windows:\n"
" libs = [ \"ctl3d.lib\" ]\n"
" On Linux:\n"
@@ -919,7 +950,32 @@ const char kOutputExtension_Help[] =
" Normally the file extension for a target is based on the target\n"
" type and the operating system, but in rare cases you will need to\n"
" override the name (for example to use \"libfreetype.so.6\" instead\n"
- " of libfreetype.so on Linux).";
+ " of libfreetype.so on Linux).\n"
+ "\n"
+ " This value should not include a leading dot. If undefined or empty,\n"
+ " the default_output_extension specified on the tool will be used.\n"
+ " The output_extension will be used in the \"{{output_extension}}\"\n"
+ " expansion which the linker tool will generally use to specify the\n"
+ " output file name. See \"gn help tool\".\n"
+ "\n"
+ "Example\n"
+ "\n"
+ " shared_library(\"freetype\") {\n"
+ " if (is_linux) {\n"
+ " # Call the output \"libfreetype.so.6\"\n"
+ " output_extension = \"so.6\"\n"
+ " }\n"
+ " ...\n"
+ " }\n"
+ "\n"
+ " # On Windows, generate a \"mysettings.cpl\" control panel applet.\n"
+ " # Control panel applets are actually special shared libraries.\n"
+ " if (is_win) {\n"
+ " shared_library(\"mysettings\") {\n"
+ " output_extension = \"cpl\"\n"
+ " ...\n"
+ " }\n"
+ " }\n";
const char kOutputName[] = "output_name";
const char kOutputName_HelpShort[] =
@@ -936,11 +992,15 @@ const char kOutputName_Help[] =
"\n"
" The output name should have no extension or prefixes, these will be\n"
" added using the default system rules. For example, on Linux an output\n"
- " name of \"foo\" will produce a shared library \"libfoo.so\".\n"
+ " name of \"foo\" will produce a shared library \"libfoo.so\". There\n"
+ " is no way to override the output prefix of a linker tool on a per-\n"
+ " target basis. If you need more flexibility, create a copy target\n"
+ " to produce the file you want.\n"
"\n"
" This variable is valid for all binary output target types.\n"
"\n"
- "Example:\n"
+ "Example\n"
+ "\n"
" static_library(\"doom_melon\") {\n"
" output_name = \"fluffy_bunny\"\n"
" }\n";
@@ -952,13 +1012,26 @@ const char kOutputs_Help[] =
"outputs: Output files for actions and copy targets.\n"
"\n"
" Outputs is valid for \"copy\", \"action\", and \"action_foreach\"\n"
- " target types and indicates the resulting files. The values may contain\n"
- " source expansions to generate the output names from the sources (see\n"
- " \"gn help source_expansion\").\n"
- "\n"
- " For copy targets, the outputs is the destination for the copied\n"
- " file(s). For actions, the outputs should be the list of files\n"
- " generated by the script.\n";
+ " target types and indicates the resulting files. Outputs must always\n"
+ " refer to files in the build directory.\n"
+ "\n"
+ " copy\n"
+ " Copy targets should have exactly one entry in the outputs list. If\n"
+ " there is exactly one source, this can be a literal file name or a\n"
+ " source expansion. If there is more than one source, this must\n"
+ " contain a source expansion to map a single input name to a single\n"
+ " output name. See \"gn help copy\".\n"
+ "\n"
+ " action_foreach\n"
+ " Action_foreach targets must always use source expansions to map\n"
+ " input files to output files. There can be more than one output,\n"
+ " which means that each invocation of the script will produce a set of\n"
+ " files (presumably based on the name of the input file). See\n"
+ " \"gn help action_foreach\".\n"
+ "\n"
+ " action\n"
+ " Action targets (excluding action_foreach) must list literal output\n"
+ " file(s) with no source expansions. See \"gn help action\".\n";
const char kPrecompiledHeader[] = "precompiled_header";
const char kPrecompiledHeader_HelpShort[] =
@@ -1058,7 +1131,8 @@ const char kPublic_Help[] =
" sections of targets. If a file is included that is not known to the\n"
" build, it will be allowed.\n"
"\n"
- "Examples:\n"
+ "Examples\n"
+ "\n"
" These exact files are public:\n"
" public = [ \"foo.h\", \"bar.h\" ]\n"
"\n"
@@ -1154,7 +1228,37 @@ const char kSources_HelpShort[] =
const char kSources_Help[] =
"sources: Source files for a target\n"
"\n"
- " A list of files relative to the current buildfile.\n";
+ " A list of files. Non-absolute paths will be resolved relative to the\n"
+ " current build file.\n"
+ "\n"
+ "Sources for binary targets\n"
+ "\n"
+ " For binary targets (source sets, executables, and libraries), the\n"
+ " known file types will be compiled with the associated tools. Unknown\n"
+ " file types and headers will be skipped. However, you should still\n"
+ " list all C/C+ header files so GN knows about the existance of those\n"
+ " files for the purposes of include checking.\n"
+ "\n"
+ " As a special case, a file ending in \".def\" will be treated as a\n"
+ " Windows module definition file. It will be appended to the link\n"
+ " line with a preceeding \"/DEF:\" string. There must be at most one\n"
+ " .def file in a target and they do not cross dependency boundaries\n"
+ " (so specifying a .def file in a static library or source set will have\n"
+ " no effect on the executable or shared library they're linked into).\n"
+ "\n"
+ "Sources for non-binary targets\n"
+ "\n"
+ " action_foreach\n"
+ " The sources are the set of files that the script will be executed\n"
+ " over. The script will run once per file.\n"
+ "\n"
+ " action\n"
+ " The sources will be treated the same as inputs. See "
+ "\"gn help inputs\"\n"
+ " for more information and usage advice.\n"
+ "\n"
+ " copy\n"
+ " The source are the source files to copy.\n";
const char kTestonly[] = "testonly";
const char kTestonly_HelpShort[] =
« no previous file with comments | « tools/gn/docs/reference.md ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698