| Index: tools/gn/builder.cc
|
| diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
|
| index 22b4c478c9bd347ded71d84ad6b14469df99cf22..318931e4a46a9cee68e8a1779d708b63a0cf1c14 100644
|
| --- a/tools/gn/builder.cc
|
| +++ b/tools/gn/builder.cc
|
| @@ -263,6 +263,20 @@ bool Builder::ToolchainDefined(BuilderRecord* record, Err* err) {
|
| if (!AddDeps(record, toolchain->deps(), err))
|
| return false;
|
|
|
| + for (int i = Toolchain::TYPE_NONE + 1; i < Toolchain::TYPE_NUMTYPES; i++) {
|
| + Toolchain::ToolType tool_type = static_cast<Toolchain::ToolType>(i);
|
| + Tool* tool = toolchain->GetTool(tool_type);
|
| + if (!tool || tool->pool_label_pair().label.is_null())
|
| + continue;
|
| +
|
| + BuilderRecord* dep_record = GetOrCreateRecordOfType(
|
| + tool->pool_label_pair().label, tool->pool_label_pair().origin,
|
| + BuilderRecord::ITEM_POOL, err);
|
| + if (!dep_record)
|
| + return false;
|
| + record->AddDep(dep_record);
|
| + }
|
| +
|
| // The default toolchain gets generated by default. Also propogate the
|
| // generate flag if it depends on items in a non-default toolchain.
|
| if (record->should_generate() ||
|
| @@ -429,6 +443,8 @@ bool Builder::ResolveItem(BuilderRecord* record, Err* err) {
|
| Toolchain* toolchain = record->item()->AsToolchain();
|
| if (!ResolveDeps(&toolchain->deps(), err))
|
| return false;
|
| + if (!ResolvePools(toolchain, err))
|
| + return false;
|
| }
|
|
|
| record->set_resolved(true);
|
| @@ -497,6 +513,30 @@ bool Builder::ResolveToolchain(Target* target, Err* err) {
|
| return true;
|
| }
|
|
|
| +bool Builder::ResolvePools(Toolchain* toolchain, Err* err) {
|
| + for (int i = Toolchain::TYPE_NONE + 1; i < Toolchain::TYPE_NUMTYPES; i++) {
|
| + Toolchain::ToolType tool_type = static_cast<Toolchain::ToolType>(i);
|
| + Tool* tool = toolchain->GetTool(tool_type);
|
| + if (!tool || tool->pool_label_pair().label.is_null())
|
| + continue;
|
| +
|
| + BuilderRecord* record = GetResolvedRecordOfType(
|
| + tool->pool_label_pair().label, toolchain->defined_from(),
|
| + BuilderRecord::ITEM_POOL, err);
|
| + if (!record) {
|
| + * err = Err(tool->pool_label_pair().origin,
|
| + "Pool for tool not defined.",
|
| + "I was hoping to find a pool " +
|
| + tool->pool_label_pair().label.GetUserVisibleName(false));
|
| + return false;
|
| + }
|
| +
|
| + tool->set_pool(record->item()->AsPool());
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| std::string Builder::CheckForCircularDependencies(
|
| const std::vector<const BuilderRecord*>& bad_records) const {
|
| std::vector<const BuilderRecord*> cycle;
|
|
|