Chromium Code Reviews| 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/binary_target_generator.h" | 5 #include "tools/gn/binary_target_generator.h" |
| 6 | 6 |
| 7 #include "tools/gn/config_values_generator.h" | 7 #include "tools/gn/config_values_generator.h" |
| 8 #include "tools/gn/err.h" | 8 #include "tools/gn/err.h" |
| 9 #include "tools/gn/functions.h" | |
| 9 #include "tools/gn/scope.h" | 10 #include "tools/gn/scope.h" |
| 11 #include "tools/gn/value_extractors.h" | |
| 10 #include "tools/gn/variables.h" | 12 #include "tools/gn/variables.h" |
| 11 | 13 |
| 12 BinaryTargetGenerator::BinaryTargetGenerator( | 14 BinaryTargetGenerator::BinaryTargetGenerator( |
| 13 Target* target, | 15 Target* target, |
| 14 Scope* scope, | 16 Scope* scope, |
| 15 const FunctionCallNode* function_call, | 17 const FunctionCallNode* function_call, |
| 16 Target::OutputType type, | 18 Target::OutputType type, |
| 17 Err* err) | 19 Err* err) |
| 18 : TargetGenerator(target, scope, function_call, err), | 20 : TargetGenerator(target, scope, function_call, err), |
| 19 output_type_(type) { | 21 output_type_(type) { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 34 return; | 36 return; |
| 35 | 37 |
| 36 FillSources(); | 38 FillSources(); |
| 37 if (err_->has_error()) | 39 if (err_->has_error()) |
| 38 return; | 40 return; |
| 39 | 41 |
| 40 FillPublic(); | 42 FillPublic(); |
| 41 if (err_->has_error()) | 43 if (err_->has_error()) |
| 42 return; | 44 return; |
| 43 | 45 |
| 46 FillCheckIncludes(); | |
| 47 if (err_->has_error()) | |
| 48 return; | |
| 49 | |
| 44 FillInputs(); | 50 FillInputs(); |
| 45 if (err_->has_error()) | 51 if (err_->has_error()) |
| 46 return; | 52 return; |
| 47 | 53 |
| 48 FillConfigs(); | 54 FillConfigs(); |
| 49 if (err_->has_error()) | 55 if (err_->has_error()) |
| 50 return; | 56 return; |
| 51 | 57 |
| 58 FillAllowCircularIncludesFrom(); | |
| 59 if (err_->has_error()) | |
| 60 return; | |
| 61 | |
| 52 // Config values (compiler flags, etc.) set directly on this target. | 62 // Config values (compiler flags, etc.) set directly on this target. |
| 53 ConfigValuesGenerator gen(&target_->config_values(), scope_, | 63 ConfigValuesGenerator gen(&target_->config_values(), scope_, |
| 54 scope_->GetSourceDir(), err_); | 64 scope_->GetSourceDir(), err_); |
| 55 gen.Run(); | 65 gen.Run(); |
| 56 if (err_->has_error()) | 66 if (err_->has_error()) |
| 57 return; | 67 return; |
| 58 } | 68 } |
| 59 | 69 |
| 70 void BinaryTargetGenerator::FillCheckIncludes() { | |
| 71 const Value* value = scope_->GetValue(variables::kCheckIncludes, true); | |
| 72 if (!value) | |
| 73 return; | |
| 74 if (!value->VerifyTypeIs(Value::BOOLEAN, err_)) | |
| 75 return; | |
| 76 target_->set_check_includes(value->boolean_value()); | |
| 77 } | |
| 78 | |
| 60 void BinaryTargetGenerator::FillOutputName() { | 79 void BinaryTargetGenerator::FillOutputName() { |
| 61 const Value* value = scope_->GetValue(variables::kOutputName, true); | 80 const Value* value = scope_->GetValue(variables::kOutputName, true); |
| 62 if (!value) | 81 if (!value) |
| 63 return; | 82 return; |
| 64 if (!value->VerifyTypeIs(Value::STRING, err_)) | 83 if (!value->VerifyTypeIs(Value::STRING, err_)) |
| 65 return; | 84 return; |
| 66 target_->set_output_name(value->string_value()); | 85 target_->set_output_name(value->string_value()); |
| 67 } | 86 } |
| 68 | 87 |
| 69 void BinaryTargetGenerator::FillOutputExtension() { | 88 void BinaryTargetGenerator::FillOutputExtension() { |
| 70 const Value* value = scope_->GetValue(variables::kOutputExtension, true); | 89 const Value* value = scope_->GetValue(variables::kOutputExtension, true); |
| 71 if (!value) | 90 if (!value) |
| 72 return; | 91 return; |
| 73 if (!value->VerifyTypeIs(Value::STRING, err_)) | 92 if (!value->VerifyTypeIs(Value::STRING, err_)) |
| 74 return; | 93 return; |
| 75 target_->set_output_extension(value->string_value()); | 94 target_->set_output_extension(value->string_value()); |
| 76 } | 95 } |
| 96 | |
| 97 void BinaryTargetGenerator::FillAllowCircularIncludesFrom() { | |
| 98 const Value* value = scope_->GetValue( | |
| 99 variables::kAllowCircularIncludesFrom, true); | |
| 100 if (!value) | |
| 101 return; | |
| 102 | |
| 103 UniqueVector<Label> circular; | |
| 104 ExtractListOfUniqueLabels(*value, scope_->GetSourceDir(), | |
| 105 ToolchainLabelForScope(scope_), &circular, err_); | |
| 106 if (err_->has_error()) | |
| 107 return; | |
| 108 | |
| 109 // Validate that all circular includes entriews are in the deps. | |
|
viettrungluu
2014/08/28 19:47:54
s/entriews/entries/
| |
| 110 const LabelTargetVector& deps = target_->deps(); | |
| 111 for (size_t circular_i = 0; circular_i < circular.size(); circular_i++) { | |
| 112 bool found_dep = false; | |
| 113 for (size_t dep_i = 0; dep_i < deps.size(); dep_i++) { | |
| 114 if (deps[dep_i].label == circular[circular_i]) { | |
| 115 found_dep = true; | |
| 116 break; | |
| 117 } | |
| 118 } | |
| 119 if (!found_dep) { | |
| 120 *err_ = Err(*value, "Label not in deps.", | |
| 121 "The label \"" + circular[circular_i].GetUserVisibleName(false) + | |
| 122 "\"\nwas not in the deps of this target. " | |
| 123 "allow_circular_includes_from only allows\ntargets present in the " | |
| 124 "deps."); | |
| 125 return; | |
| 126 } | |
| 127 } | |
| 128 | |
| 129 // Add to the set. | |
| 130 for (size_t i = 0; i < circular.size(); i++) | |
| 131 target_->allow_circular_includes_from().insert(circular[i]); | |
| 132 } | |
| OLD | NEW |