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

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

Issue 22290010: Add support for data deps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove switch Created 7 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/target_generator.h ('k') | tools/gn/toolchain.h » ('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/target_generator.h" 5 #include "tools/gn/target_generator.h"
6 6
7 #include "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "tools/gn/build_settings.h" 9 #include "tools/gn/build_settings.h"
10 #include "tools/gn/config.h" 10 #include "tools/gn/config.h"
11 #include "tools/gn/config_values_generator.h" 11 #include "tools/gn/config_values_generator.h"
12 #include "tools/gn/err.h" 12 #include "tools/gn/err.h"
13 #include "tools/gn/filesystem_utils.h" 13 #include "tools/gn/filesystem_utils.h"
14 #include "tools/gn/functions.h" 14 #include "tools/gn/functions.h"
15 #include "tools/gn/input_file.h" 15 #include "tools/gn/input_file.h"
16 #include "tools/gn/item_node.h" 16 #include "tools/gn/item_node.h"
17 #include "tools/gn/ninja_target_writer.h" 17 #include "tools/gn/ninja_target_writer.h"
18 #include "tools/gn/parse_tree.h" 18 #include "tools/gn/parse_tree.h"
19 #include "tools/gn/scheduler.h" 19 #include "tools/gn/scheduler.h"
20 #include "tools/gn/scope.h" 20 #include "tools/gn/scope.h"
21 #include "tools/gn/target_manager.h" 21 #include "tools/gn/target_manager.h"
22 #include "tools/gn/token.h" 22 #include "tools/gn/token.h"
23 #include "tools/gn/value.h" 23 #include "tools/gn/value.h"
24 #include "tools/gn/value_extractors.h" 24 #include "tools/gn/value_extractors.h"
25 #include "tools/gn/variables.h"
25 26
26 namespace { 27 namespace {
27 28
28 bool TypeHasConfigs(Target::OutputType type) { 29 bool TypeHasConfigs(Target::OutputType type) {
29 return type == Target::EXECUTABLE || 30 return type == Target::EXECUTABLE ||
30 type == Target::SHARED_LIBRARY || 31 type == Target::SHARED_LIBRARY ||
31 type == Target::STATIC_LIBRARY || 32 type == Target::STATIC_LIBRARY ||
32 type == Target::LOADABLE_MODULE; 33 type == Target::LOADABLE_MODULE;
33 } 34 }
34 35
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 FillSources(); 92 FillSources();
92 if (TypeHasData(output_type)) 93 if (TypeHasData(output_type))
93 FillData(); 94 FillData();
94 if (output_type == Target::CUSTOM) { 95 if (output_type == Target::CUSTOM) {
95 FillScript(); 96 FillScript();
96 FillScriptArgs(); 97 FillScriptArgs();
97 } 98 }
98 if (TypeHasOutputs(output_type)) 99 if (TypeHasOutputs(output_type))
99 FillOutputs(); 100 FillOutputs();
100 FillDependencies(); // All types have dependencies. 101 FillDependencies(); // All types have dependencies.
102 FillDataDependencies(); // All types have dependencies.
101 103
102 if (TypeHasConfigValues(output_type)) { 104 if (TypeHasConfigValues(output_type)) {
103 ConfigValuesGenerator gen(&target_->config_values(), scope_, 105 ConfigValuesGenerator gen(&target_->config_values(), scope_,
104 function_token_, input_directory_, err_); 106 function_token_, input_directory_, err_);
105 gen.Run(); 107 gen.Run();
106 if (err_->has_error()) 108 if (err_->has_error())
107 return; 109 return;
108 } 110 }
109 111
110 if (TypeHasDestDir(output_type)) 112 if (TypeHasDestDir(output_type))
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 dest_configs[i] = Config::GetConfig( 203 dest_configs[i] = Config::GetConfig(
202 scope_->settings(), 204 scope_->settings(),
203 value->list_value()[i].origin()->GetRange(), 205 value->list_value()[i].origin()->GetRange(),
204 labels[i], target_, err_); 206 labels[i], target_, err_);
205 if (err_->has_error()) 207 if (err_->has_error())
206 return; 208 return;
207 } 209 }
208 (target_->*setter)(&dest_configs); 210 (target_->*setter)(&dest_configs);
209 } 211 }
210 212
213 void TargetGenerator::FillGenericDeps(
214 const char* var_name,
215 void (Target::*setter)(std::vector<const Target*>*)) {
216 const Value* value = scope_->GetValue(var_name, true);
217 if (!value)
218 return;
219
220 std::vector<Label> labels;
221 if (!ExtractListOfLabels(*value, input_directory_,
222 ToolchainLabelForScope(scope_), &labels, err_))
223 return;
224
225 std::vector<const Target*> dest_deps;
226 dest_deps.resize(labels.size());
227 for (size_t i = 0; i < labels.size(); i++) {
228 dest_deps[i] = GetBuildSettings()->target_manager().GetTarget(
229 labels[i], value->list_value()[i].origin()->GetRange(), target_, err_);
230 if (err_->has_error())
231 return;
232 }
233
234 (target_->*setter)(&dest_deps);
235 }
236
211 void TargetGenerator::FillConfigs() { 237 void TargetGenerator::FillConfigs() {
212 FillGenericConfigs("configs", &Target::swap_in_configs); 238 FillGenericConfigs(variables::kConfigs, &Target::swap_in_configs);
213 } 239 }
214 240
215 void TargetGenerator::FillAllDependentConfigs() { 241 void TargetGenerator::FillAllDependentConfigs() {
216 FillGenericConfigs("all_dependent_configs", 242 FillGenericConfigs(variables::kAllDependentConfigs,
217 &Target::swap_in_all_dependent_configs); 243 &Target::swap_in_all_dependent_configs);
218 } 244 }
219 245
220 void TargetGenerator::FillDirectDependentConfigs() { 246 void TargetGenerator::FillDirectDependentConfigs() {
221 FillGenericConfigs("direct_dependent_configs", 247 FillGenericConfigs(variables::kDirectDependentConfigs,
222 &Target::swap_in_direct_dependent_configs); 248 &Target::swap_in_direct_dependent_configs);
223 } 249 }
224 250
225 void TargetGenerator::FillSources() { 251 void TargetGenerator::FillSources() {
226 const Value* value = scope_->GetValue("sources", true); 252 const Value* value = scope_->GetValue(variables::kSources, true);
227 if (!value) 253 if (!value)
228 return; 254 return;
229 255
230 Target::FileList dest_sources; 256 Target::FileList dest_sources;
231 if (!ExtractListOfRelativeFiles(*value, input_directory_, &dest_sources, 257 if (!ExtractListOfRelativeFiles(*value, input_directory_, &dest_sources,
232 err_)) 258 err_))
233 return; 259 return;
234 target_->swap_in_sources(&dest_sources); 260 target_->swap_in_sources(&dest_sources);
235 } 261 }
236 262
237 void TargetGenerator::FillData() { 263 void TargetGenerator::FillData() {
264 // TODO(brettW) hook this up to the constant when we have cleaned up
265 // how data files are used.
238 const Value* value = scope_->GetValue("data", true); 266 const Value* value = scope_->GetValue("data", true);
239 if (!value) 267 if (!value)
240 return; 268 return;
241 269
242 Target::FileList dest_data; 270 Target::FileList dest_data;
243 if (!ExtractListOfRelativeFiles(*value, input_directory_, &dest_data, 271 if (!ExtractListOfRelativeFiles(*value, input_directory_, &dest_data,
244 err_)) 272 err_))
245 return; 273 return;
246 target_->swap_in_data(&dest_data); 274 target_->swap_in_data(&dest_data);
247 } 275 }
248 276
249 void TargetGenerator::FillDependencies() { 277 void TargetGenerator::FillDependencies() {
250 const Value* value = scope_->GetValue("deps", true); 278 FillGenericDeps(variables::kDeps, &Target::swap_in_deps);
251 if (!value) 279 }
252 return;
253 280
254 std::vector<Label> labels; 281 void TargetGenerator::FillDataDependencies() {
255 if (!ExtractListOfLabels(*value, input_directory_, 282 FillGenericDeps(variables::kDatadeps, &Target::swap_in_datadeps);
256 ToolchainLabelForScope(scope_), &labels, err_))
257 return;
258
259 std::vector<const Target*> dest_deps;
260 dest_deps.resize(labels.size());
261 for (size_t i = 0; i < labels.size(); i++) {
262 dest_deps[i] = GetBuildSettings()->target_manager().GetTarget(
263 labels[i], value->list_value()[i].origin()->GetRange(), target_, err_);
264 if (err_->has_error())
265 return;
266 }
267
268 target_->swap_in_deps(&dest_deps);
269 } 283 }
270 284
271 void TargetGenerator::FillDestDir() { 285 void TargetGenerator::FillDestDir() {
272 // Destdir is required for all targets that use it. 286 // Destdir is required for all targets that use it.
273 const Value* value = scope_->GetValue("destdir", true); 287 const Value* value = scope_->GetValue("destdir", true);
274 if (!value) { 288 if (!value) {
275 *err_ = Err(function_token_, "This target type requires a \"destdir\"."); 289 *err_ = Err(function_token_, "This target type requires a \"destdir\".");
276 return; 290 return;
277 } 291 }
278 if (!value->VerifyTypeIs(Value::STRING, err_)) 292 if (!value->VerifyTypeIs(Value::STRING, err_))
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 GetBuildSettings()->build_dir(), 341 GetBuildSettings()->build_dir(),
328 outputs[i].value(), value->list_value()[i], err_)) 342 outputs[i].value(), value->list_value()[i], err_))
329 return; 343 return;
330 } 344 }
331 target_->swap_in_outputs(&outputs); 345 target_->swap_in_outputs(&outputs);
332 } 346 }
333 347
334 const BuildSettings* TargetGenerator::GetBuildSettings() const { 348 const BuildSettings* TargetGenerator::GetBuildSettings() const {
335 return scope_->settings()->build_settings(); 349 return scope_->settings()->build_settings();
336 } 350 }
OLDNEW
« no previous file with comments | « tools/gn/target_generator.h ('k') | tools/gn/toolchain.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698