| // 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 |