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

Side by Side Diff: tools/gn/builder.cc

Issue 561273003: Add public deps to GN (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « tools/gn/binary_target_generator.cc ('k') | tools/gn/builder_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/gn/builder.h" 5 #include "tools/gn/builder.h"
6 6
7 #include "tools/gn/config.h" 7 #include "tools/gn/config.h"
8 #include "tools/gn/deps_iterator.h"
8 #include "tools/gn/err.h" 9 #include "tools/gn/err.h"
9 #include "tools/gn/loader.h" 10 #include "tools/gn/loader.h"
10 #include "tools/gn/scheduler.h" 11 #include "tools/gn/scheduler.h"
11 #include "tools/gn/settings.h" 12 #include "tools/gn/settings.h"
12 #include "tools/gn/target.h" 13 #include "tools/gn/target.h"
13 #include "tools/gn/trace.h" 14 #include "tools/gn/trace.h"
14 15
15 namespace { 16 namespace {
16 17
17 typedef BuilderRecord::BuilderRecordSet BuilderRecordSet; 18 typedef BuilderRecord::BuilderRecordSet BuilderRecordSet;
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 } 220 }
220 return false; 221 return false;
221 } 222 }
222 223
223 return true; 224 return true;
224 } 225 }
225 226
226 bool Builder::TargetDefined(BuilderRecord* record, Err* err) { 227 bool Builder::TargetDefined(BuilderRecord* record, Err* err) {
227 Target* target = record->item()->AsTarget(); 228 Target* target = record->item()->AsTarget();
228 229
229 if (!AddDeps(record, target->deps(), err) || 230 if (!AddDeps(record, target->public_deps(), err) ||
230 !AddDeps(record, target->datadeps(), err) || 231 !AddDeps(record, target->private_deps(), err) ||
232 !AddDeps(record, target->data_deps(), err) ||
231 !AddDeps(record, target->configs().vector(), err) || 233 !AddDeps(record, target->configs().vector(), err) ||
232 !AddDeps(record, target->all_dependent_configs(), err) || 234 !AddDeps(record, target->all_dependent_configs(), err) ||
233 !AddDeps(record, target->direct_dependent_configs(), err) || 235 !AddDeps(record, target->public_configs(), err) ||
234 !AddToolchainDep(record, target, err)) 236 !AddToolchainDep(record, target, err))
235 return false; 237 return false;
236 238
237 // All targets in the default toolchain get generated by default. We also 239 // All targets in the default toolchain get generated by default. We also
238 // check if this target was previously marked as "required" and force setting 240 // check if this target was previously marked as "required" and force setting
239 // the bit again so the target's dependencies (which we now know) get the 241 // the bit again so the target's dependencies (which we now know) get the
240 // required bit pushed to them. 242 // required bit pushed to them.
241 if (record->should_generate() || target->settings()->is_default()) 243 if (record->should_generate() || target->settings()->is_default())
242 RecursiveSetShouldGenerate(record, true); 244 RecursiveSetShouldGenerate(record, true);
243 245
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 const ParseNode* origin = record->originally_referenced_from(); 398 const ParseNode* origin = record->originally_referenced_from();
397 loader_->Load(record->label(), 399 loader_->Load(record->label(),
398 origin ? origin->GetRange() : LocationRange()); 400 origin ? origin->GetRange() : LocationRange());
399 } 401 }
400 402
401 bool Builder::ResolveItem(BuilderRecord* record, Err* err) { 403 bool Builder::ResolveItem(BuilderRecord* record, Err* err) {
402 DCHECK(record->can_resolve() && !record->resolved()); 404 DCHECK(record->can_resolve() && !record->resolved());
403 405
404 if (record->type() == BuilderRecord::ITEM_TARGET) { 406 if (record->type() == BuilderRecord::ITEM_TARGET) {
405 Target* target = record->item()->AsTarget(); 407 Target* target = record->item()->AsTarget();
406 if (!ResolveDeps(&target->deps(), err) || 408 if (!ResolveDeps(&target->public_deps(), err) ||
407 !ResolveDeps(&target->datadeps(), err) || 409 !ResolveDeps(&target->private_deps(), err) ||
410 !ResolveDeps(&target->data_deps(), err) ||
408 !ResolveConfigs(&target->configs(), err) || 411 !ResolveConfigs(&target->configs(), err) ||
409 !ResolveConfigs(&target->all_dependent_configs(), err) || 412 !ResolveConfigs(&target->all_dependent_configs(), err) ||
410 !ResolveConfigs(&target->direct_dependent_configs(), err) || 413 !ResolveConfigs(&target->public_configs(), err) ||
411 !ResolveForwardDependentConfigs(target, err) || 414 !ResolveForwardDependentConfigs(target, err) ||
412 !ResolveToolchain(target, err)) 415 !ResolveToolchain(target, err))
413 return false; 416 return false;
414 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) { 417 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) {
415 Toolchain* toolchain = record->item()->AsToolchain(); 418 Toolchain* toolchain = record->item()->AsToolchain();
416 if (!ResolveDeps(&toolchain->deps(), err)) 419 if (!ResolveDeps(&toolchain->deps(), err))
417 return false; 420 return false;
418 } 421 }
419 422
420 record->set_resolved(true); 423 record->set_resolved(true);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 if (!record) 469 if (!record)
467 return false; 470 return false;
468 const_cast<LabelConfigPair&>(cur).ptr = record->item()->AsConfig(); 471 const_cast<LabelConfigPair&>(cur).ptr = record->item()->AsConfig();
469 } 472 }
470 return true; 473 return true;
471 } 474 }
472 475
473 // "Forward dependent configs" should refer to targets in the deps that should 476 // "Forward dependent configs" should refer to targets in the deps that should
474 // have their configs forwarded. 477 // have their configs forwarded.
475 bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) { 478 bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) {
476 const LabelTargetVector& deps = target->deps();
477 const UniqueVector<LabelTargetPair>& configs = 479 const UniqueVector<LabelTargetPair>& configs =
478 target->forward_dependent_configs(); 480 target->forward_dependent_configs();
479 481
480 // Assume that the lists are small so that brute-force n^2 is appropriate. 482 // Assume that the lists are small so that brute-force n^2 is appropriate.
481 for (size_t config_i = 0; config_i < configs.size(); config_i++) { 483 for (size_t config_i = 0; config_i < configs.size(); config_i++) {
482 for (size_t dep_i = 0; dep_i < deps.size(); dep_i++) { 484 for (DepsIterator dep_iter(target, DepsIterator::LINKED_ONLY);
483 if (configs[config_i].label == deps[dep_i].label) { 485 !dep_iter.done(); dep_iter.Advance()) {
484 DCHECK(deps[dep_i].ptr); // Should already be resolved. 486 if (configs[config_i].label == dep_iter.label()) {
487 DCHECK(dep_iter.target()); // Should already be resolved.
485 // UniqueVector's contents are constant so uniqueness is preserved, but 488 // UniqueVector's contents are constant so uniqueness is preserved, but
486 // we want to update this pointer which doesn't change uniqueness 489 // we want to update this pointer which doesn't change uniqueness
487 // (uniqueness in this vector is determined by the label only). 490 // (uniqueness in this vector is determined by the label only).
488 const_cast<LabelTargetPair&>(configs[config_i]).ptr = deps[dep_i].ptr; 491 const_cast<LabelTargetPair&>(configs[config_i]).ptr = dep_iter.target();
489 break; 492 break;
490 } 493 }
491 } 494 }
492 if (!configs[config_i].ptr) { 495 if (!configs[config_i].ptr) {
493 *err = Err(target->defined_from(), 496 *err = Err(target->defined_from(),
494 "Target in forward_dependent_configs_from was not listed in the deps", 497 "Target in forward_dependent_configs_from was not listed in the deps",
495 "This target has a forward_dependent_configs_from entry that was " 498 "This target has a forward_dependent_configs_from entry that was "
496 "not present in\nthe deps. A target can only forward things it " 499 "not present in\nthe deps. A target can only forward things it "
497 "depends on. It was forwarding:\n " + 500 "depends on. It was forwarding:\n " +
498 configs[config_i].label.GetUserVisibleName(false)); 501 configs[config_i].label.GetUserVisibleName(false));
(...skipping 30 matching lines...) Expand all
529 std::string ret; 532 std::string ret;
530 for (size_t i = 0; i < cycle.size(); i++) { 533 for (size_t i = 0; i < cycle.size(); i++) {
531 ret += " " + cycle[i]->label().GetUserVisibleName(false); 534 ret += " " + cycle[i]->label().GetUserVisibleName(false);
532 if (i != cycle.size() - 1) 535 if (i != cycle.size() - 1)
533 ret += " ->"; 536 ret += " ->";
534 ret += "\n"; 537 ret += "\n";
535 } 538 }
536 539
537 return ret; 540 return ret;
538 } 541 }
OLDNEW
« no previous file with comments | « tools/gn/binary_target_generator.cc ('k') | tools/gn/builder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698