Index: tools/gn/function_toolchain.cc |
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc |
index aaa9b7efaa739fbe43fc3f0fae702de55b142373..210cc2c84b45c092f1c57732d9df70d6b2b66689 100644 |
--- a/tools/gn/function_toolchain.cc |
+++ b/tools/gn/function_toolchain.cc |
@@ -8,6 +8,8 @@ |
#include "tools/gn/err.h" |
#include "tools/gn/functions.h" |
+#include "tools/gn/label.h" |
+#include "tools/gn/label_ptr.h" |
#include "tools/gn/parse_tree.h" |
#include "tools/gn/scheduler.h" |
#include "tools/gn/scope.h" |
@@ -57,6 +59,31 @@ bool ReadString(Scope* scope, |
return true; |
} |
+// Reads the given label from the scope (if present) and puts the result into |
+// dest. If the value is not a label, sets the error and returns false. |
+bool ReadLabel(Scope* scope, |
+ const char* var, |
+ Tool* tool, |
+ const ParseNode* origin, |
+ const Label& current_toolchain, |
+ void (Tool::*set)(const LabelPtrPair<Pool>&), |
+ Err* err) { |
+ const Value* v = scope->GetValue(var, true); |
+ if (!v) |
+ return true; // Not present is fine. |
+ |
+ Label label = |
+ Label::Resolve(scope->GetSourceDir(), current_toolchain, *v, err); |
+ if (err->has_error()) |
+ return false; |
+ |
+ LabelPtrPair<Pool> pair(label); |
+ pair.origin = origin; |
+ |
+ (tool->*set)(pair); |
+ return true; |
+} |
+ |
// Calls the given validate function on each type in the list. On failure, |
// sets the error, blame the value, and return false. |
bool ValidateSubstitutionList(const std::vector<SubstitutionType>& list, |
@@ -518,6 +545,14 @@ const char kTool_Help[] = |
" \"{{output_dir}}/{{target_output_name}}.lib\",\n" |
" ]\n" |
"\n" |
+ " pool [label, optional]\n" |
+ "\n" |
+ " Label of the pool to use for the tool. Pools are used to limit\n" |
+ " the number of tasks that can execute concurrently during the\n" |
+ " build.\n" |
+ "\n" |
+ " See also \"gn help pool\".\n" |
+ "\n" |
" link_output [string with substitutions]\n" |
" depend_output [string with substitutions]\n" |
" runtime_link_output [string with substitutions]\n" |
@@ -908,7 +943,9 @@ Value RunTool(Scope* scope, |
!ReadPattern(&block_scope, "rspfile", subst_validator, tool.get(), |
&Tool::set_rspfile, err) || |
!ReadPattern(&block_scope, "rspfile_content", subst_validator, tool.get(), |
- &Tool::set_rspfile_content, err)) { |
+ &Tool::set_rspfile_content, err) || |
+ !ReadLabel(&block_scope, "pool", tool.get(), function, toolchain->label(), |
+ &Tool::set_pool, err)) { |
return Value(); |
} |