OLD | NEW |
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/deps_iterator.h" |
9 #include "tools/gn/err.h" | 9 #include "tools/gn/err.h" |
10 #include "tools/gn/loader.h" | 10 #include "tools/gn/loader.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 } | 81 } |
82 | 82 |
83 record->set_item(item.Pass()); | 83 record->set_item(item.Pass()); |
84 | 84 |
85 // Do target-specific dependency setup. This will also schedule dependency | 85 // Do target-specific dependency setup. This will also schedule dependency |
86 // loads for targets that are required. | 86 // loads for targets that are required. |
87 switch (type) { | 87 switch (type) { |
88 case BuilderRecord::ITEM_TARGET: | 88 case BuilderRecord::ITEM_TARGET: |
89 TargetDefined(record, &err); | 89 TargetDefined(record, &err); |
90 break; | 90 break; |
| 91 case BuilderRecord::ITEM_CONFIG: |
| 92 ConfigDefined(record, &err); |
| 93 break; |
91 case BuilderRecord::ITEM_TOOLCHAIN: | 94 case BuilderRecord::ITEM_TOOLCHAIN: |
92 ToolchainDefined(record, &err); | 95 ToolchainDefined(record, &err); |
93 break; | 96 break; |
94 default: | 97 default: |
95 break; | 98 break; |
96 } | 99 } |
97 if (err.has_error()) { | 100 if (err.has_error()) { |
98 g_scheduler->FailWithError(err); | 101 g_scheduler->FailWithError(err); |
99 return; | 102 return; |
100 } | 103 } |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 // All targets in the default toolchain get generated by default. We also | 229 // All targets in the default toolchain get generated by default. We also |
227 // check if this target was previously marked as "required" and force setting | 230 // check if this target was previously marked as "required" and force setting |
228 // the bit again so the target's dependencies (which we now know) get the | 231 // the bit again so the target's dependencies (which we now know) get the |
229 // required bit pushed to them. | 232 // required bit pushed to them. |
230 if (record->should_generate() || target->settings()->is_default()) | 233 if (record->should_generate() || target->settings()->is_default()) |
231 RecursiveSetShouldGenerate(record, true); | 234 RecursiveSetShouldGenerate(record, true); |
232 | 235 |
233 return true; | 236 return true; |
234 } | 237 } |
235 | 238 |
| 239 bool Builder::ConfigDefined(BuilderRecord* record, Err* err) { |
| 240 Config* config = record->item()->AsConfig(); |
| 241 if (!AddDeps(record, config->configs(), err)) |
| 242 return false; |
| 243 return true; |
| 244 } |
| 245 |
236 bool Builder::ToolchainDefined(BuilderRecord* record, Err* err) { | 246 bool Builder::ToolchainDefined(BuilderRecord* record, Err* err) { |
237 Toolchain* toolchain = record->item()->AsToolchain(); | 247 Toolchain* toolchain = record->item()->AsToolchain(); |
238 | 248 |
239 if (!AddDeps(record, toolchain->deps(), err)) | 249 if (!AddDeps(record, toolchain->deps(), err)) |
240 return false; | 250 return false; |
241 | 251 |
242 // The default toolchain gets generated by default. Also propogate the | 252 // The default toolchain gets generated by default. Also propogate the |
243 // generate flag if it depends on items in a non-default toolchain. | 253 // generate flag if it depends on items in a non-default toolchain. |
244 if (record->should_generate() || | 254 if (record->should_generate() || |
245 toolchain->settings()->default_toolchain_label() == toolchain->label()) | 255 toolchain->settings()->default_toolchain_label() == toolchain->label()) |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 Target* target = record->item()->AsTarget(); | 401 Target* target = record->item()->AsTarget(); |
392 if (!ResolveDeps(&target->public_deps(), err) || | 402 if (!ResolveDeps(&target->public_deps(), err) || |
393 !ResolveDeps(&target->private_deps(), err) || | 403 !ResolveDeps(&target->private_deps(), err) || |
394 !ResolveDeps(&target->data_deps(), err) || | 404 !ResolveDeps(&target->data_deps(), err) || |
395 !ResolveConfigs(&target->configs(), err) || | 405 !ResolveConfigs(&target->configs(), err) || |
396 !ResolveConfigs(&target->all_dependent_configs(), err) || | 406 !ResolveConfigs(&target->all_dependent_configs(), err) || |
397 !ResolveConfigs(&target->public_configs(), err) || | 407 !ResolveConfigs(&target->public_configs(), err) || |
398 !ResolveForwardDependentConfigs(target, err) || | 408 !ResolveForwardDependentConfigs(target, err) || |
399 !ResolveToolchain(target, err)) | 409 !ResolveToolchain(target, err)) |
400 return false; | 410 return false; |
| 411 } else if (record->type() == BuilderRecord::ITEM_CONFIG) { |
| 412 Config* config = record->item()->AsConfig(); |
| 413 if (!ResolveConfigs(&config->configs(), err)) |
| 414 return false; |
401 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) { | 415 } else if (record->type() == BuilderRecord::ITEM_TOOLCHAIN) { |
402 Toolchain* toolchain = record->item()->AsToolchain(); | 416 Toolchain* toolchain = record->item()->AsToolchain(); |
403 if (!ResolveDeps(&toolchain->deps(), err)) | 417 if (!ResolveDeps(&toolchain->deps(), err)) |
404 return false; | 418 return false; |
405 } | 419 } |
406 | 420 |
407 record->set_resolved(true); | 421 record->set_resolved(true); |
408 | 422 |
409 if (!record->item()->OnResolved(err)) | 423 if (!record->item()->OnResolved(err)) |
410 return false; | 424 return false; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 std::string ret; | 524 std::string ret; |
511 for (size_t i = 0; i < cycle.size(); i++) { | 525 for (size_t i = 0; i < cycle.size(); i++) { |
512 ret += " " + cycle[i]->label().GetUserVisibleName(false); | 526 ret += " " + cycle[i]->label().GetUserVisibleName(false); |
513 if (i != cycle.size() - 1) | 527 if (i != cycle.size() - 1) |
514 ret += " ->"; | 528 ret += " ->"; |
515 ret += "\n"; | 529 ret += "\n"; |
516 } | 530 } |
517 | 531 |
518 return ret; | 532 return ret; |
519 } | 533 } |
OLD | NEW |