Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: tools/gn/builder.cc

Issue 350743004: Allow dependencies of toolchains in GN. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/builder_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/builder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698