| Index: tools/gn/builder.cc
|
| diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
|
| index 132f4e0a604df5b6a023056cd9be3a2d4526ba13..50a027b389de3352afe54e67329c9ed2310a980e 100644
|
| --- a/tools/gn/builder.cc
|
| +++ b/tools/gn/builder.cc
|
| @@ -91,17 +91,18 @@ void Builder::ItemDefined(scoped_ptr<Item> item) {
|
| // loads for targets that are required.
|
| switch (type) {
|
| case BuilderRecord::ITEM_TARGET:
|
| - if (!TargetDefined(record, &err)) {
|
| - g_scheduler->FailWithError(err);
|
| - return;
|
| - }
|
| + TargetDefined(record, &err);
|
| break;
|
| case BuilderRecord::ITEM_TOOLCHAIN:
|
| - loader_->ToolchainLoaded(record->item()->AsToolchain());
|
| + ToolchainDefined(record, &err);
|
| break;
|
| default:
|
| break;
|
| }
|
| + if (err.has_error()) {
|
| + g_scheduler->FailWithError(err);
|
| + return;
|
| + }
|
|
|
| if (record->can_resolve()) {
|
| if (!ResolveItem(record, &err)) {
|
| @@ -243,6 +244,22 @@ bool Builder::TargetDefined(BuilderRecord* record, Err* err) {
|
| return true;
|
| }
|
|
|
| +bool Builder::ToolchainDefined(BuilderRecord* record, Err* err) {
|
| + Toolchain* toolchain = record->item()->AsToolchain();
|
| +
|
| + if (!AddDeps(record, toolchain->deps(), err))
|
| + return false;
|
| +
|
| + // 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() ||
|
| + toolchain->settings()->default_toolchain_label() == toolchain->label())
|
| + RecursiveSetShouldGenerate(record, true);
|
| +
|
| + loader_->ToolchainLoaded(toolchain);
|
| + return true;
|
| +}
|
| +
|
| BuilderRecord* Builder::GetOrCreateRecordOfType(const Label& label,
|
| const ParseNode* request_from,
|
| BuilderRecord::ItemType type,
|
| @@ -380,6 +397,10 @@ bool Builder::ResolveItem(BuilderRecord* record, Err* err) {
|
| !ResolveConfigs(&target->direct_dependent_configs(), err) ||
|
| !ResolveForwardDependentConfigs(target, err))
|
| return false;
|
| + } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) {
|
| + Toolchain* toolchain = record->item()->AsToolchain();
|
| + if (!ResolveDeps(&toolchain->deps(), err))
|
| + return false;
|
| }
|
|
|
| record->set_resolved(true);
|
|
|