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

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: Created 4 years, 7 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..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;
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/builder_record.h » ('j') | tools/gn/function_toolchain.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698