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

Unified Diff: tools/gn/builder.cc

Issue 2006923004: Add support for user defined "pool" to GN. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 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
Index: tools/gn/builder.cc
diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
index 22b4c478c9bd347ded71d84ad6b14469df99cf22..036d3902c707ff2e183059d94bd223553d8866b8 100644
--- a/tools/gn/builder.cc
+++ b/tools/gn/builder.cc
@@ -11,6 +11,7 @@
#include "tools/gn/deps_iterator.h"
#include "tools/gn/err.h"
#include "tools/gn/loader.h"
+#include "tools/gn/pool.h"
#include "tools/gn/scheduler.h"
#include "tools/gn/settings.h"
#include "tools/gn/target.h"
@@ -263,6 +264,19 @@ 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.is_null())
+ continue;
+
+ BuilderRecord* dep_record = GetOrCreateRecordOfType(
+ tool->pool().label, tool->pool().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,29 @@ 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.is_null())
+ continue;
+
+ BuilderRecord* record =
+ GetResolvedRecordOfType(tool->pool().label, toolchain->defined_from(),
+ BuilderRecord::ITEM_POOL, err);
+ if (!record) {
+ *err = Err(tool->pool().origin, "Pool for tool not defined.",
+ "I was hoping to find a pool " +
+ tool->pool().label.GetUserVisibleName(false));
+ return false;
+ }
+
+ tool->set_pool(LabelPtrPair<Pool>(record->item()->AsPool()));
+ }
+
+ return true;
+}
+
std::string Builder::CheckForCircularDependencies(
const std::vector<const BuilderRecord*>& bad_records) const {
std::vector<const BuilderRecord*> cycle;
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/builder_record.h » ('j') | tools/gn/functions.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698