| // Copyright 2014 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "tools/gn/switches.h" | 
 |  | 
 | namespace switches { | 
 |  | 
 | const char kArgs[] = "args"; | 
 | const char kArgs_HelpShort[] = | 
 |     "--args: Specifies build arguments overrides."; | 
 | const char kArgs_Help[] = | 
 |     R"(--args: Specifies build arguments overrides. | 
 |  | 
 |   See "gn help buildargs" for an overview of how build arguments work. | 
 |  | 
 |   Most operations take a build directory. The build arguments are taken from | 
 |   the previous build done in that directory. If a command specifies --args, it | 
 |   will override the previous arguments stored in the build directory, and use | 
 |   the specified ones. | 
 |  | 
 |   The args specified will be saved to the build directory for subsequent | 
 |   commands. Specifying --args="" will clear all build arguments. | 
 |  | 
 | Formatting | 
 |  | 
 |   The value of the switch is interpreted in GN syntax. For typical usage of | 
 |   string arguments, you will need to be careful about escaping of quotes. | 
 |  | 
 | Examples | 
 |  | 
 |   gn gen out/Default --args="foo=\"bar\"" | 
 |  | 
 |   gn gen out/Default --args='foo="bar" enable=true blah=7' | 
 |  | 
 |   gn check out/Default --args="" | 
 |     Clears existing build args from the directory. | 
 |  | 
 |   gn desc out/Default --args="some_list=[1, false, \"foo\"]" | 
 | )"; | 
 |  | 
 | #define COLOR_HELP_LONG \ | 
 |     "--[no]color: Forces colored output on or off.\n"\ | 
 |     "\n"\ | 
 |     "  Normally GN will try to detect whether it is outputting to a terminal\n"\ | 
 |     "  and will enable or disable color accordingly. Use of these switches\n"\ | 
 |     "  will override the default.\n"\ | 
 |     "\n"\ | 
 |     "Examples\n"\ | 
 |     "\n"\ | 
 |     "  gn gen out/Default --color\n"\ | 
 |     "\n"\ | 
 |     "  gn gen out/Default --nocolor\n" | 
 | const char kColor[] = "color"; | 
 | const char kColor_HelpShort[] = | 
 |     "--color: Force colored output."; | 
 | const char kColor_Help[] = COLOR_HELP_LONG; | 
 |  | 
 | const char kDotfile[] = "dotfile"; | 
 | const char kDotfile_HelpShort[] = | 
 |     "--dotfile: Override the name of the \".gn\" file."; | 
 | const char kDotfile_Help[] = | 
 |     R"(--dotfile: Override the name of the ".gn" file. | 
 |  | 
 |   Normally GN loads the ".gn"file  from the source root for some basic | 
 |   configuration (see "gn help dotfile"). This flag allows you to | 
 |   use a different file. | 
 |  | 
 |   Note that this interacts with "--root" in a possibly incorrect way. | 
 |   It would be nice to test the edge cases and document or fix. | 
 | )"; | 
 |  | 
 | const char kFailOnUnusedArgs[] = "fail-on-unused-args"; | 
 | const char kFailOnUnusedArgs_HelpShort[] = | 
 |     "--fail-on-unused-args: Treat unused build args as fatal errors."; | 
 | const char kFailOnUnusedArgs_Help[] = | 
 |     R"(--fail-on-unused-args: Treat unused build args as fatal errors. | 
 |  | 
 |   If you set a value in a build's "gn args" and never use it in the build (in | 
 |   a declare_args() block), GN will normally print an error but not fail the | 
 |   build. | 
 |  | 
 |   In many cases engineers would use build args to enable or disable features | 
 |   that would sometimes get removed. It would by annoying to block work for | 
 |   typically benign problems. In Chrome in particular, flags might be configured | 
 |   for build bots in a separate infrastructure repository, or a declare_args | 
 |   block might be changed in a third party repository. Treating these errors as | 
 |   blocking forced complex multi- way patches to land what would otherwise be | 
 |   simple changes. | 
 |  | 
 |   In some cases, such concerns are not as important, and a mismatch in build | 
 |   flags between the invoker of the build and the build files represents a | 
 |   critical mismatch that should be immediately fixed. Such users can set this | 
 |   flag to force GN to fail in that case. | 
 | )"; | 
 |  | 
 | const char kMarkdown[] = "markdown"; | 
 | const char kMarkdown_HelpShort[] = | 
 |     "--markdown: Write help output in the Markdown format."; | 
 | const char kMarkdown_Help[] = | 
 |     "--markdown: Write help output in the Markdown format.\n"; | 
 |  | 
 | const char kNoColor[] = "nocolor"; | 
 | const char kNoColor_HelpShort[] = | 
 |     "--nocolor: Force non-colored output."; | 
 | const char kNoColor_Help[] = COLOR_HELP_LONG; | 
 |  | 
 | const char kScriptExecutable[] = "script-executable"; | 
 | const char kScriptExecutable_HelpShort[] = | 
 |     "--script-executable: Set the executable used to execute scripts."; | 
 | const char kScriptExecutable_Help[] = | 
 |     R"(--script-executable: Set the executable used to execute scripts. | 
 |  | 
 |   By default GN searches the PATH for Python to execute scripts in action | 
 |   targets and exec_script calls. This flag allows the specification of a | 
 |   specific Python executable or potentially a different language | 
 |   interpreter. | 
 | )"; | 
 |  | 
 | const char kQuiet[] = "q"; | 
 | const char kQuiet_HelpShort[] = | 
 |     "-q: Quiet mode. Don't print output on success."; | 
 | const char kQuiet_Help[] = | 
 |     R"(-q: Quiet mode. Don't print output on success. | 
 |  | 
 |   This is useful when running as a part of another script. | 
 | )"; | 
 |  | 
 | const char kRoot[] = "root"; | 
 | const char kRoot_HelpShort[] = | 
 |     "--root: Explicitly specify source root."; | 
 | const char kRoot_Help[] = | 
 |     R"(--root: Explicitly specify source root. | 
 |  | 
 |   Normally GN will look up in the directory tree from the current directory to | 
 |   find a ".gn" file. The source root directory specifies the meaning of "//" | 
 |   beginning with paths, and the BUILD.gn file in that directory will be the | 
 |   first thing loaded. | 
 |  | 
 |   Specifying --root allows GN to do builds in a specific directory regardless | 
 |   of the current directory. | 
 |  | 
 | Examples | 
 |  | 
 |   gn gen //out/Default --root=/home/baracko/src | 
 |  | 
 |   gn desc //out/Default --root="C:\Users\BObama\My Documents\foo" | 
 | )"; | 
 |  | 
 | const char kRuntimeDepsListFile[] = "runtime-deps-list-file"; | 
 | const char kRuntimeDepsListFile_HelpShort[] = | 
 |     "--runtime-deps-list-file: Save runtime dependencies for targets in file."; | 
 | const char kRuntimeDepsListFile_Help[] = | 
 |     R"(--runtime-deps-list-file: Save runtime dependencies for targets in file. | 
 |  | 
 |   --runtime-deps-list-file=<filename> | 
 |  | 
 |   Where <filename> is a text file consisting of the labels, one per line, of | 
 |   the targets for which runtime dependencies are desired. | 
 |  | 
 |   See "gn help runtime_deps" for a description of how runtime dependencies are | 
 |   computed. | 
 |  | 
 | Runtime deps output file | 
 |  | 
 |   For each target requested, GN will write a separate runtime dependency file. | 
 |   The runtime dependency file will be in the output directory alongside the | 
 |   output file of the target, with a ".runtime_deps" extension. For example, if | 
 |   the target "//foo:bar" is listed in the input file, and that target produces | 
 |   an output file "bar.so", GN will create a file "bar.so.runtime_deps" in the | 
 |   build directory. | 
 |  | 
 |   If a source set, action, copy, or group is listed, the runtime deps file will | 
 |   correspond to the .stamp file corresponding to that target. This is probably | 
 |   not useful; the use-case for this feature is generally executable targets. | 
 |  | 
 |   The runtime dependency file will list one file per line, with no escaping. | 
 |   The files will be relative to the root_build_dir. The first line of the file | 
 |   will be the main output file of the target itself (in the above example, | 
 |   "bar.so"). | 
 | )"; | 
 |  | 
 | const char kThreads[] = "threads"; | 
 | const char kThreads_HelpShort[] = | 
 |     "--threads: Specify number of worker threads."; | 
 | const char kThreads_Help[] = | 
 |     R"(--threads: Specify number of worker threads. | 
 |  | 
 |   GN runs many threads to load and run build files. This can make debugging | 
 |   challenging. Or you may want to experiment with different values to see how | 
 |   it affects performance. | 
 |  | 
 |   The parameter is the number of worker threads. This does not count the main | 
 |   thread (so there are always at least two). | 
 |  | 
 | Examples | 
 |  | 
 |   gen gen out/Default --threads=1 | 
 | )"; | 
 |  | 
 | const char kTime[] = "time"; | 
 | const char kTime_HelpShort[] = | 
 |     "--time: Outputs a summary of how long everything took."; | 
 | const char kTime_Help[] = | 
 |     R"(--time: Outputs a summary of how long everything took. | 
 |  | 
 |   Hopefully self-explanatory. | 
 |  | 
 | Examples | 
 |  | 
 |   gn gen out/Default --time | 
 | )"; | 
 |  | 
 | const char kTracelog[] = "tracelog"; | 
 | const char kTracelog_HelpShort[] = | 
 |     "--tracelog: Writes a Chrome-compatible trace log to the given file."; | 
 | const char kTracelog_Help[] = | 
 |     R"(--tracelog: Writes a Chrome-compatible trace log to the given file. | 
 |  | 
 |   The trace log will show file loads, executions, scripts, and writes. This | 
 |   allows performance analysis of the generation step. | 
 |  | 
 |   To view the trace, open Chrome and navigate to "chrome://tracing/", then | 
 |   press "Load" and specify the file you passed to this parameter. | 
 |  | 
 | Examples | 
 |  | 
 |   gn gen out/Default --tracelog=mytrace.trace | 
 | )"; | 
 |  | 
 | const char kVerbose[] = "v"; | 
 | const char kVerbose_HelpShort[] = | 
 |     "-v: Verbose logging."; | 
 | const char kVerbose_Help[] = | 
 |     R"(-v: Verbose logging. | 
 |  | 
 |   This will spew logging events to the console for debugging issues. | 
 |  | 
 |   Good luck! | 
 | )"; | 
 |  | 
 | const char kVersion[] = "version"; | 
 | const char kVersion_HelpShort[] = | 
 |     "--version: Prints the GN version number and exits."; | 
 | // It's impossible to see this since gn_main prints the version and exits | 
 | // immediately if this switch is used. | 
 | const char kVersion_Help[] = ""; | 
 |  | 
 | const char kAllToolchains[] = "all-toolchains"; | 
 |  | 
 | // ----------------------------------------------------------------------------- | 
 |  | 
 | SwitchInfo::SwitchInfo() | 
 |     : short_help(""), | 
 |       long_help("") { | 
 | } | 
 |  | 
 | SwitchInfo::SwitchInfo(const char* short_help, const char* long_help) | 
 |     : short_help(short_help), | 
 |       long_help(long_help) { | 
 | } | 
 |  | 
 | #define INSERT_VARIABLE(var) \ | 
 |     info_map[k##var] = SwitchInfo(k##var##_HelpShort, k##var##_Help); | 
 |  | 
 | const SwitchInfoMap& GetSwitches() { | 
 |   static SwitchInfoMap info_map; | 
 |   if (info_map.empty()) { | 
 |     INSERT_VARIABLE(Args) | 
 |     INSERT_VARIABLE(Color) | 
 |     INSERT_VARIABLE(Dotfile) | 
 |     INSERT_VARIABLE(FailOnUnusedArgs) | 
 |     INSERT_VARIABLE(Markdown) | 
 |     INSERT_VARIABLE(NoColor) | 
 |     INSERT_VARIABLE(Root) | 
 |     INSERT_VARIABLE(Quiet) | 
 |     INSERT_VARIABLE(RuntimeDepsListFile) | 
 |     INSERT_VARIABLE(ScriptExecutable) | 
 |     INSERT_VARIABLE(Threads) | 
 |     INSERT_VARIABLE(Time) | 
 |     INSERT_VARIABLE(Tracelog) | 
 |     INSERT_VARIABLE(Verbose) | 
 |     INSERT_VARIABLE(Version) | 
 |   } | 
 |   return info_map; | 
 | } | 
 |  | 
 | #undef INSERT_VARIABLE | 
 |  | 
 | }  // namespace switches |