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

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

Issue 440333002: Support more configurability in GN toolchains (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unsigned check Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « tools/gn/builder.h ('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/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 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 bool Builder::ResolveItem(BuilderRecord* record, Err* err) { 401 bool Builder::ResolveItem(BuilderRecord* record, Err* err) {
402 DCHECK(record->can_resolve() && !record->resolved()); 402 DCHECK(record->can_resolve() && !record->resolved());
403 403
404 if (record->type() == BuilderRecord::ITEM_TARGET) { 404 if (record->type() == BuilderRecord::ITEM_TARGET) {
405 Target* target = record->item()->AsTarget(); 405 Target* target = record->item()->AsTarget();
406 if (!ResolveDeps(&target->deps(), err) || 406 if (!ResolveDeps(&target->deps(), err) ||
407 !ResolveDeps(&target->datadeps(), err) || 407 !ResolveDeps(&target->datadeps(), err) ||
408 !ResolveConfigs(&target->configs(), err) || 408 !ResolveConfigs(&target->configs(), err) ||
409 !ResolveConfigs(&target->all_dependent_configs(), err) || 409 !ResolveConfigs(&target->all_dependent_configs(), err) ||
410 !ResolveConfigs(&target->direct_dependent_configs(), err) || 410 !ResolveConfigs(&target->direct_dependent_configs(), err) ||
411 !ResolveForwardDependentConfigs(target, err)) 411 !ResolveForwardDependentConfigs(target, err) ||
412 !ResolveToolchain(target, err))
412 return false; 413 return false;
413 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) { 414 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) {
414 Toolchain* toolchain = record->item()->AsToolchain(); 415 Toolchain* toolchain = record->item()->AsToolchain();
415 if (!ResolveDeps(&toolchain->deps(), err)) 416 if (!ResolveDeps(&toolchain->deps(), err))
416 return false; 417 return false;
417 } 418 }
418 419
419 record->set_resolved(true); 420 record->set_resolved(true);
420 record->item()->OnResolved(); 421 record->item()->OnResolved();
421 if (!resolved_callback_.is_null()) 422 if (!resolved_callback_.is_null())
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 "This target has a forward_dependent_configs_from entry that was " 493 "This target has a forward_dependent_configs_from entry that was "
493 "not present in\nthe deps. A target can only forward things it " 494 "not present in\nthe deps. A target can only forward things it "
494 "depends on. It was forwarding:\n " + 495 "depends on. It was forwarding:\n " +
495 configs[config_i].label.GetUserVisibleName(false)); 496 configs[config_i].label.GetUserVisibleName(false));
496 return false; 497 return false;
497 } 498 }
498 } 499 }
499 return true; 500 return true;
500 } 501 }
501 502
503 bool Builder::ResolveToolchain(Target* target, Err* err) {
504 BuilderRecord* record = GetResolvedRecordOfType(
505 target->settings()->toolchain_label(), target->defined_from(),
506 BuilderRecord::ITEM_TOOLCHAIN, err);
507 if (!record) {
508 *err = Err(target->defined_from(),
509 "Toolchain for target not defined.",
510 "I was hoping to find a toolchain " +
511 target->settings()->toolchain_label().GetUserVisibleName(false));
512 return false;
513 }
514
515 if (!target->SetToolchain(record->item()->AsToolchain(), err))
516 return false;
517
518 return true;
519 }
520
502 std::string Builder::CheckForCircularDependencies( 521 std::string Builder::CheckForCircularDependencies(
503 const std::vector<const BuilderRecord*>& bad_records) const { 522 const std::vector<const BuilderRecord*>& bad_records) const {
504 std::vector<const BuilderRecord*> cycle; 523 std::vector<const BuilderRecord*> cycle;
505 if (!RecursiveFindCycle(bad_records[0], &cycle)) 524 if (!RecursiveFindCycle(bad_records[0], &cycle))
506 return std::string(); // Didn't find a cycle, something else is wrong. 525 return std::string(); // Didn't find a cycle, something else is wrong.
507 526
508 // Walk backwards since the dependency arrows point in the reverse direction. 527 // Walk backwards since the dependency arrows point in the reverse direction.
509 std::string ret; 528 std::string ret;
510 for (int i = static_cast<int>(cycle.size()) - 1; i >= 0; i--) { 529 for (int i = static_cast<int>(cycle.size()) - 1; i >= 0; i--) {
511 ret += " " + cycle[i]->label().GetUserVisibleName(false); 530 ret += " " + cycle[i]->label().GetUserVisibleName(false);
512 if (i != 0) 531 if (i != 0)
513 ret += " ->\n"; 532 ret += " ->\n";
514 } 533 }
515 534
516 return ret; 535 return ret;
517 } 536 }
OLDNEW
« 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