| Index: tools/gn/function_toolchain.cc
|
| diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc
|
| index a0bb9a909307db38d9c3212215f863a255dbd054..65361faa60a913d0677edca6ea4e3e994c9d4389 100644
|
| --- a/tools/gn/function_toolchain.cc
|
| +++ b/tools/gn/function_toolchain.cc
|
| @@ -3,6 +3,7 @@
|
| // found in the LICENSE file.
|
|
|
| #include <algorithm>
|
| +#include <limits>
|
|
|
| #include "tools/gn/err.h"
|
| #include "tools/gn/functions.h"
|
| @@ -202,15 +203,43 @@ const char kToolchain_Help[] =
|
| " source code. You can have more than one toolchain in use at once in\n"
|
| " a build.\n"
|
| "\n"
|
| - " A toolchain specifies the commands to run for various input file\n"
|
| - " types via the \"tool\" call (see \"gn help tool\") and specifies\n"
|
| - " arguments to be passed to the toolchain build via the\n"
|
| - " \"toolchain_args\" call (see \"gn help toolchain_args\").\n"
|
| + "Functions and variables\n"
|
| "\n"
|
| - " In addition, a toolchain can specify dependencies via the \"deps\"\n"
|
| - " variable like a target. These dependencies will be resolved before any\n"
|
| - " target in the toolchain is compiled. To avoid circular dependencies\n"
|
| - " these must be targets defined in another toolchain.\n"
|
| + " tool()\n"
|
| + " The tool() function call specifies the commands commands to run for\n"
|
| + " a given step. See \"gn help tool\".\n"
|
| + "\n"
|
| + " toolchain_args()\n"
|
| + " List of arguments to pass to the toolchain when invoking this\n"
|
| + " toolchain. This applies only to non-default toolchains. See\n"
|
| + " \"gn help toolchain_args\" for more.\n"
|
| + "\n"
|
| + " deps\n"
|
| + " Dependencies of this toolchain. These dependencies will be resolved\n"
|
| + " before any target in the toolchain is compiled. To avoid circular\n"
|
| + " dependencies these must be targets defined in another toolchain.\n"
|
| + "\n"
|
| + " This is expressed as a list of targets, and generally these targets\n"
|
| + " will always specify a toolchain:\n"
|
| + " deps = [ \"//foo/bar:baz(//build/toolchain:bootstrap)\" ]\n"
|
| + "\n"
|
| + " This concept is somewhat inefficient to express in Ninja (it\n"
|
| + " requires a lot of duplicate of rules) so should only be used when\n"
|
| + " absolutely necessary.\n"
|
| + "\n"
|
| + " concurrent_links\n"
|
| + " In integer expressing the number of links that Ninja will perform in\n"
|
| + " parallel. GN will create a pool for shared library and executable\n"
|
| + " link steps with this many processes. Since linking is memory- and\n"
|
| + " I/O-intensive, projects with many large targets may want to limit\n"
|
| + " the number of parallel steps to avoid overloading the computer.\n"
|
| + " Since creating static libraries is generally not as intensive\n"
|
| + " there is no limit to \"alink\" steps.\n"
|
| + "\n"
|
| + " Defaults to 0 which Ninja interprets as \"no limit\".\n"
|
| + "\n"
|
| + " The value used will be the one from the default toolchain of the\n"
|
| + " current build.\n"
|
| "\n"
|
| "Invoking targets in toolchains:\n"
|
| "\n"
|
| @@ -236,8 +265,11 @@ const char kToolchain_Help[] =
|
| "\n"
|
| "Example:\n"
|
| " toolchain(\"plugin_toolchain\") {\n"
|
| + " concurrent_links = 8\n"
|
| + "\n"
|
| " tool(\"cc\") {\n"
|
| " command = \"gcc $in\"\n"
|
| + " ...\n"
|
| " }\n"
|
| "\n"
|
| " toolchain_args() {\n"
|
| @@ -287,6 +319,21 @@ Value RunToolchain(Scope* scope,
|
| return Value();
|
| }
|
|
|
| + // Read concurrent_links (if any).
|
| + const Value* concurrent_links_value =
|
| + block_scope.GetValue("concurrent_links", true);
|
| + if (concurrent_links_value) {
|
| + if (!concurrent_links_value->VerifyTypeIs(Value::INTEGER, err))
|
| + return Value();
|
| + if (concurrent_links_value->int_value() < 0 ||
|
| + concurrent_links_value->int_value() > std::numeric_limits<int>::max()) {
|
| + *err = Err(*concurrent_links_value, "Value out of range.");
|
| + return Value();
|
| + }
|
| + toolchain->set_concurrent_links(
|
| + static_cast<int>(concurrent_links_value->int_value()));
|
| + }
|
| +
|
| if (!block_scope.CheckForUnusedVars(err))
|
| return Value();
|
|
|
| @@ -458,9 +505,6 @@ const char kTool_Help[] =
|
| " Posix systems:\n"
|
| " output_prefix = \"lib\"\n"
|
| "\n"
|
| - // TODO(brettw) document "pool" when it works.
|
| - //" pool [string, optional]\n"
|
| - //"\n"
|
| " restat [boolean]\n"
|
| " Valid for: all tools (optional, defaults to false)\n"
|
| "\n"
|
| @@ -742,7 +786,6 @@ Value RunTool(Scope* scope,
|
| &Tool::set_depend_output, err) ||
|
| !ReadString(&block_scope, "output_prefix", tool.get(),
|
| &Tool::set_output_prefix, err) ||
|
| - !ReadString(&block_scope, "pool", tool.get(), &Tool::set_pool, err) ||
|
| !ReadBool(&block_scope, "restat", tool.get(), &Tool::set_restat, err) ||
|
| !ReadPattern(&block_scope, "rspfile", subst_validator, tool.get(),
|
| &Tool::set_rspfile, err) ||
|
|
|