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

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: 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
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/err.h" 8 #include "tools/gn/err.h"
9 #include "tools/gn/loader.h" 9 #include "tools/gn/loader.h"
10 #include "tools/gn/scheduler.h" 10 #include "tools/gn/scheduler.h"
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 } 219 }
220 return false; 220 return false;
221 } 221 }
222 222
223 return true; 223 return true;
224 } 224 }
225 225
226 bool Builder::TargetDefined(BuilderRecord* record, Err* err) { 226 bool Builder::TargetDefined(BuilderRecord* record, Err* err) {
227 Target* target = record->item()->AsTarget(); 227 Target* target = record->item()->AsTarget();
228 228
229 if (!AddDeps(record, target->deps(), err) || 229 if (!AddDeps(record, target->public_deps(), err) ||
230 !AddDeps(record, target->datadeps(), err) || 230 !AddDeps(record, target->private_deps(), err) ||
231 !AddDeps(record, target->data_deps(), err) ||
231 !AddDeps(record, target->configs().vector(), err) || 232 !AddDeps(record, target->configs().vector(), err) ||
232 !AddDeps(record, target->all_dependent_configs(), err) || 233 !AddDeps(record, target->all_dependent_configs(), err) ||
233 !AddDeps(record, target->direct_dependent_configs(), err) || 234 !AddDeps(record, target->public_configs(), err) ||
234 !AddToolchainDep(record, target, err)) 235 !AddToolchainDep(record, target, err))
235 return false; 236 return false;
236 237
237 // All targets in the default toolchain get generated by default. We also 238 // 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 239 // 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 240 // the bit again so the target's dependencies (which we now know) get the
240 // required bit pushed to them. 241 // required bit pushed to them.
241 if (record->should_generate() || target->settings()->is_default()) 242 if (record->should_generate() || target->settings()->is_default())
242 RecursiveSetShouldGenerate(record, true); 243 RecursiveSetShouldGenerate(record, true);
243 244
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 const ParseNode* origin = record->originally_referenced_from(); 397 const ParseNode* origin = record->originally_referenced_from();
397 loader_->Load(record->label(), 398 loader_->Load(record->label(),
398 origin ? origin->GetRange() : LocationRange()); 399 origin ? origin->GetRange() : LocationRange());
399 } 400 }
400 401
401 bool Builder::ResolveItem(BuilderRecord* record, Err* err) { 402 bool Builder::ResolveItem(BuilderRecord* record, Err* err) {
402 DCHECK(record->can_resolve() && !record->resolved()); 403 DCHECK(record->can_resolve() && !record->resolved());
403 404
404 if (record->type() == BuilderRecord::ITEM_TARGET) { 405 if (record->type() == BuilderRecord::ITEM_TARGET) {
405 Target* target = record->item()->AsTarget(); 406 Target* target = record->item()->AsTarget();
406 if (!ResolveDeps(&target->deps(), err) || 407 if (!ResolveDeps(&target->public_deps(), err) ||
407 !ResolveDeps(&target->datadeps(), err) || 408 !ResolveDeps(&target->private_deps(), err) ||
409 !ResolveDeps(&target->data_deps(), err) ||
408 !ResolveConfigs(&target->configs(), err) || 410 !ResolveConfigs(&target->configs(), err) ||
409 !ResolveConfigs(&target->all_dependent_configs(), err) || 411 !ResolveConfigs(&target->all_dependent_configs(), err) ||
410 !ResolveConfigs(&target->direct_dependent_configs(), err) || 412 !ResolveConfigs(&target->public_configs(), err) ||
411 !ResolveForwardDependentConfigs(target, err) || 413 !ResolveForwardDependentConfigs(target, err) ||
412 !ResolveToolchain(target, err)) 414 !ResolveToolchain(target, err))
413 return false; 415 return false;
414 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) { 416 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) {
415 Toolchain* toolchain = record->item()->AsToolchain(); 417 Toolchain* toolchain = record->item()->AsToolchain();
416 if (!ResolveDeps(&toolchain->deps(), err)) 418 if (!ResolveDeps(&toolchain->deps(), err))
417 return false; 419 return false;
418 } 420 }
419 421
420 record->set_resolved(true); 422 record->set_resolved(true);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 if (!record) 468 if (!record)
467 return false; 469 return false;
468 const_cast<LabelConfigPair&>(cur).ptr = record->item()->AsConfig(); 470 const_cast<LabelConfigPair&>(cur).ptr = record->item()->AsConfig();
469 } 471 }
470 return true; 472 return true;
471 } 473 }
472 474
473 // "Forward dependent configs" should refer to targets in the deps that should 475 // "Forward dependent configs" should refer to targets in the deps that should
474 // have their configs forwarded. 476 // have their configs forwarded.
475 bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) { 477 bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) {
476 const LabelTargetVector& deps = target->deps();
477 const UniqueVector<LabelTargetPair>& configs = 478 const UniqueVector<LabelTargetPair>& configs =
478 target->forward_dependent_configs(); 479 target->forward_dependent_configs();
479 480
480 // Assume that the lists are small so that brute-force n^2 is appropriate. 481 // 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++) { 482 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++) { 483 for (DepsIterator dep_iter(target, DepsIterator::LINKED_ONLY);
483 if (configs[config_i].label == deps[dep_i].label) { 484 !dep_iter.done(); dep_iter.Advance()) {
484 DCHECK(deps[dep_i].ptr); // Should already be resolved. 485 if (configs[config_i].label == dep_iter.label()) {
486 DCHECK(dep_iter.target()); // Should already be resolved.
485 // UniqueVector's contents are constant so uniqueness is preserved, but 487 // UniqueVector's contents are constant so uniqueness is preserved, but
486 // we want to update this pointer which doesn't change uniqueness 488 // we want to update this pointer which doesn't change uniqueness
487 // (uniqueness in this vector is determined by the label only). 489 // (uniqueness in this vector is determined by the label only).
488 const_cast<LabelTargetPair&>(configs[config_i]).ptr = deps[dep_i].ptr; 490 const_cast<LabelTargetPair&>(configs[config_i]).ptr = dep_iter.target();
489 break; 491 break;
490 } 492 }
491 } 493 }
492 if (!configs[config_i].ptr) { 494 if (!configs[config_i].ptr) {
493 *err = Err(target->defined_from(), 495 *err = Err(target->defined_from(),
494 "Target in forward_dependent_configs_from was not listed in the deps", 496 "Target in forward_dependent_configs_from was not listed in the deps",
495 "This target has a forward_dependent_configs_from entry that was " 497 "This target has a forward_dependent_configs_from entry that was "
496 "not present in\nthe deps. A target can only forward things it " 498 "not present in\nthe deps. A target can only forward things it "
497 "depends on. It was forwarding:\n " + 499 "depends on. It was forwarding:\n " +
498 configs[config_i].label.GetUserVisibleName(false)); 500 configs[config_i].label.GetUserVisibleName(false));
(...skipping 30 matching lines...) Expand all
529 std::string ret; 531 std::string ret;
530 for (size_t i = 0; i < cycle.size(); i++) { 532 for (size_t i = 0; i < cycle.size(); i++) {
531 ret += " " + cycle[i]->label().GetUserVisibleName(false); 533 ret += " " + cycle[i]->label().GetUserVisibleName(false);
532 if (i != cycle.size() - 1) 534 if (i != cycle.size() - 1)
533 ret += " ->"; 535 ret += " ->";
534 ret += "\n"; 536 ret += "\n";
535 } 537 }
536 538
537 return ret; 539 return ret;
538 } 540 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698