• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "tools/gn/binary_target_generator.h"
6 
7 #include "tools/gn/config_values_generator.h"
8 #include "tools/gn/err.h"
9 #include "tools/gn/scope.h"
10 #include "tools/gn/variables.h"
11 
BinaryTargetGenerator(Target * target,Scope * scope,const FunctionCallNode * function_call,Target::OutputType type,Err * err)12 BinaryTargetGenerator::BinaryTargetGenerator(
13     Target* target,
14     Scope* scope,
15     const FunctionCallNode* function_call,
16     Target::OutputType type,
17     Err* err)
18     : TargetGenerator(target, scope, function_call, err),
19       output_type_(type) {
20 }
21 
~BinaryTargetGenerator()22 BinaryTargetGenerator::~BinaryTargetGenerator() {
23 }
24 
DoRun()25 void BinaryTargetGenerator::DoRun() {
26   target_->set_output_type(output_type_);
27 
28   FillOutputName();
29   if (err_->has_error())
30     return;
31 
32   FillOutputExtension();
33   if (err_->has_error())
34     return;
35 
36   FillSources();
37   if (err_->has_error())
38     return;
39 
40   FillPublic();
41   if (err_->has_error())
42     return;
43 
44   FillInputs();
45   if (err_->has_error())
46     return;
47 
48   FillConfigs();
49   if (err_->has_error())
50     return;
51 
52   // Config values (compiler flags, etc.) set directly on this target.
53   ConfigValuesGenerator gen(&target_->config_values(), scope_,
54                             scope_->GetSourceDir(), err_);
55   gen.Run();
56   if (err_->has_error())
57     return;
58 }
59 
FillOutputName()60 void BinaryTargetGenerator::FillOutputName() {
61   const Value* value = scope_->GetValue(variables::kOutputName, true);
62   if (!value)
63     return;
64   if (!value->VerifyTypeIs(Value::STRING, err_))
65     return;
66   target_->set_output_name(value->string_value());
67 }
68 
FillOutputExtension()69 void BinaryTargetGenerator::FillOutputExtension() {
70   const Value* value = scope_->GetValue(variables::kOutputExtension, true);
71   if (!value)
72     return;
73   if (!value->VerifyTypeIs(Value::STRING, err_))
74     return;
75   target_->set_output_extension(value->string_value());
76 }
77