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

Side by Side Diff: tools/gn/target.h

Issue 26537002: Add a UniqueVector class to GN (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: REview comments, remove npos 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
« no previous file with comments | « tools/gn/source_file.h ('k') | tools/gn/target.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 #ifndef TOOLS_GN_TARGET_H_ 5 #ifndef TOOLS_GN_TARGET_H_
6 #define TOOLS_GN_TARGET_H_ 6 #define TOOLS_GN_TARGET_H_
7 7
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/strings/string_piece.h" 15 #include "base/strings/string_piece.h"
16 #include "base/synchronization/lock.h" 16 #include "base/synchronization/lock.h"
17 #include "tools/gn/action_values.h" 17 #include "tools/gn/action_values.h"
18 #include "tools/gn/config_values.h" 18 #include "tools/gn/config_values.h"
19 #include "tools/gn/item.h" 19 #include "tools/gn/item.h"
20 #include "tools/gn/label_ptr.h" 20 #include "tools/gn/label_ptr.h"
21 #include "tools/gn/ordered_set.h" 21 #include "tools/gn/ordered_set.h"
22 #include "tools/gn/source_file.h" 22 #include "tools/gn/source_file.h"
23 #include "tools/gn/unique_vector.h"
23 24
24 class InputFile; 25 class InputFile;
25 class Settings; 26 class Settings;
26 class Token; 27 class Token;
27 28
28 class Target : public Item { 29 class Target : public Item {
29 public: 30 public:
30 enum OutputType { 31 enum OutputType {
31 UNKNOWN, 32 UNKNOWN,
32 GROUP, 33 GROUP,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 // Linked dependencies. 99 // Linked dependencies.
99 const LabelTargetVector& deps() const { return deps_; } 100 const LabelTargetVector& deps() const { return deps_; }
100 LabelTargetVector& deps() { return deps_; } 101 LabelTargetVector& deps() { return deps_; }
101 102
102 // Non-linked dependencies. 103 // Non-linked dependencies.
103 const LabelTargetVector& datadeps() const { return datadeps_; } 104 const LabelTargetVector& datadeps() const { return datadeps_; }
104 LabelTargetVector& datadeps() { return datadeps_; } 105 LabelTargetVector& datadeps() { return datadeps_; }
105 106
106 // List of configs that this class inherits settings from. Once a target is 107 // List of configs that this class inherits settings from. Once a target is
107 // resolved, this will also list all- and direct-dependent configs. 108 // resolved, this will also list all- and direct-dependent configs.
108 const LabelConfigVector& configs() const { return configs_; } 109 const UniqueVector<LabelConfigPair>& configs() const { return configs_; }
109 LabelConfigVector& configs() { return configs_; } 110 UniqueVector<LabelConfigPair>& configs() { return configs_; }
110 111
111 // List of configs that all dependencies (direct and indirect) of this 112 // List of configs that all dependencies (direct and indirect) of this
112 // target get. These configs are not added to this target. Note that due 113 // target get. These configs are not added to this target. Note that due
113 // to the way this is computed, there may be duplicates in this list. 114 // to the way this is computed, there may be duplicates in this list.
114 const LabelConfigVector& all_dependent_configs() const { 115 const UniqueVector<LabelConfigPair>& all_dependent_configs() const {
115 return all_dependent_configs_; 116 return all_dependent_configs_;
116 } 117 }
117 LabelConfigVector& all_dependent_configs() { 118 UniqueVector<LabelConfigPair>& all_dependent_configs() {
118 return all_dependent_configs_; 119 return all_dependent_configs_;
119 } 120 }
120 121
121 // List of configs that targets depending directly on this one get. These 122 // List of configs that targets depending directly on this one get. These
122 // configs are not added to this target. 123 // configs are not added to this target.
123 const LabelConfigVector& direct_dependent_configs() const { 124 const UniqueVector<LabelConfigPair>& direct_dependent_configs() const {
124 return direct_dependent_configs_; 125 return direct_dependent_configs_;
125 } 126 }
126 LabelConfigVector& direct_dependent_configs() { 127 UniqueVector<LabelConfigPair>& direct_dependent_configs() {
127 return direct_dependent_configs_; 128 return direct_dependent_configs_;
128 } 129 }
129 130
130 // A list of a subset of deps where we'll re-export direct_dependent_configs 131 // A list of a subset of deps where we'll re-export direct_dependent_configs
131 // as direct_dependent_configs of this target. 132 // as direct_dependent_configs of this target.
132 const LabelTargetVector& forward_dependent_configs() const { 133 const UniqueVector<LabelTargetPair>& forward_dependent_configs() const {
133 return forward_dependent_configs_; 134 return forward_dependent_configs_;
134 } 135 }
135 LabelTargetVector& forward_dependent_configs() { 136 UniqueVector<LabelTargetPair>& forward_dependent_configs() {
136 return forward_dependent_configs_; 137 return forward_dependent_configs_;
137 } 138 }
138 139
139 const std::set<const Target*>& inherited_libraries() const { 140 const UniqueVector<const Target*>& inherited_libraries() const {
140 return inherited_libraries_; 141 return inherited_libraries_;
141 } 142 }
142 143
143 // This config represents the configuration set directly on this target. 144 // This config represents the configuration set directly on this target.
144 ConfigValues& config_values() { return config_values_; } 145 ConfigValues& config_values() { return config_values_; }
145 const ConfigValues& config_values() const { return config_values_; } 146 const ConfigValues& config_values() const { return config_values_; }
146 147
147 ActionValues& action_values() { return action_values_; } 148 ActionValues& action_values() { return action_values_; }
148 const ActionValues& action_values() const { return action_values_; } 149 const ActionValues& action_values() const { return action_values_; }
149 150
150 const OrderedSet<SourceDir>& all_lib_dirs() const { return all_lib_dirs_; } 151 const OrderedSet<SourceDir>& all_lib_dirs() const { return all_lib_dirs_; }
151 const OrderedSet<std::string>& all_libs() const { return all_libs_; } 152 const OrderedSet<std::string>& all_libs() const { return all_libs_; }
152 153
153 const std::set<const Target*>& recursive_hard_deps() const { 154 const std::set<const Target*>& recursive_hard_deps() const {
154 return recursive_hard_deps_; 155 return recursive_hard_deps_;
155 } 156 }
156 157
157 private: 158 private:
158 // Pulls necessary information from dependencies to this one when all 159 // Pulls necessary information from dependencies to this one when all
159 // dependencies have been resolved. 160 // dependencies have been resolved.
160 void PullDependentTargetInfo(std::set<const Config*>* unique_configs); 161 void PullDependentTargetInfo();
161 162
162 // These each pull specific things from dependencies to this one when all 163 // These each pull specific things from dependencies to this one when all
163 // deps have been resolved. 164 // deps have been resolved.
164 void PullForwardedDependentConfigs(); 165 void PullForwardedDependentConfigs();
165 void PullRecursiveHardDeps(); 166 void PullRecursiveHardDeps();
166 167
167 OutputType output_type_; 168 OutputType output_type_;
168 std::string output_name_; 169 std::string output_name_;
169 std::string output_extension_; 170 std::string output_extension_;
170 171
(...skipping 12 matching lines...) Expand all
183 // groups of dependencies, so adding the groups deps make this happen with 184 // groups of dependencies, so adding the groups deps make this happen with
184 // no additional complexity when iterating over a target's deps. 185 // no additional complexity when iterating over a target's deps.
185 // 186 //
186 // However, a group may also have specific settings and configs added to it, 187 // However, a group may also have specific settings and configs added to it,
187 // so we also need the group in the list so we find these things. But you 188 // so we also need the group in the list so we find these things. But you
188 // shouldn't need to look inside the deps of the group since those will 189 // shouldn't need to look inside the deps of the group since those will
189 // already be added. 190 // already be added.
190 LabelTargetVector deps_; 191 LabelTargetVector deps_;
191 LabelTargetVector datadeps_; 192 LabelTargetVector datadeps_;
192 193
193 LabelConfigVector configs_; 194 UniqueVector<LabelConfigPair> configs_;
194 LabelConfigVector all_dependent_configs_; 195 UniqueVector<LabelConfigPair> all_dependent_configs_;
195 LabelConfigVector direct_dependent_configs_; 196 UniqueVector<LabelConfigPair> direct_dependent_configs_;
196 LabelTargetVector forward_dependent_configs_; 197 UniqueVector<LabelTargetPair> forward_dependent_configs_;
197 198
198 bool external_; 199 bool external_;
199 200
200 // Static libraries and source sets from transitive deps. These things need 201 // Static libraries and source sets from transitive deps. These things need
201 // to be linked only with the end target (executable, shared library). Source 202 // to be linked only with the end target (executable, shared library). Source
202 // sets do not get pushed beyond static library boundaries, and neither 203 // sets do not get pushed beyond static library boundaries, and neither
203 // source sets nor static libraries get pushed beyond sahred library 204 // source sets nor static libraries get pushed beyond sahred library
204 // boundaries. 205 // boundaries.
205 std::set<const Target*> inherited_libraries_; 206 UniqueVector<const Target*> inherited_libraries_;
206 207
207 // These libs and dirs are inherited from statically linked deps and all 208 // These libs and dirs are inherited from statically linked deps and all
208 // configs applying to this target. 209 // configs applying to this target.
209 OrderedSet<SourceDir> all_lib_dirs_; 210 OrderedSet<SourceDir> all_lib_dirs_;
210 OrderedSet<std::string> all_libs_; 211 OrderedSet<std::string> all_libs_;
211 212
212 // All hard deps from this target and all dependencies. Filled in when this 213 // All hard deps from this target and all dependencies. Filled in when this
213 // target is marked resolved. This will not include the current target. 214 // target is marked resolved. This will not include the current target.
214 std::set<const Target*> recursive_hard_deps_; 215 std::set<const Target*> recursive_hard_deps_;
215 216
216 ConfigValues config_values_; // Used for all binary targets. 217 ConfigValues config_values_; // Used for all binary targets.
217 ActionValues action_values_; // Used for action[_foreach] targets. 218 ActionValues action_values_; // Used for action[_foreach] targets.
218 219
219 DISALLOW_COPY_AND_ASSIGN(Target); 220 DISALLOW_COPY_AND_ASSIGN(Target);
220 }; 221 };
221 222
223 namespace BASE_HASH_NAMESPACE {
224
225 #if defined(COMPILER_GCC)
226 template<> struct hash<const Target*> {
227 std::size_t operator()(const Target* t) const {
228 return reinterpret_cast<std::size_t>(t);
229 }
230 };
231 #elif defined(COMPILER_MSVC)
232 inline size_t hash_value(const Target* t) {
233 return reinterpret_cast<size_t>(t);
234 }
235 #endif // COMPILER...
236
237 } // namespace BASE_HASH_NAMESPACE
238
222 #endif // TOOLS_GN_TARGET_H_ 239 #endif // TOOLS_GN_TARGET_H_
OLDNEW
« no previous file with comments | « tools/gn/source_file.h ('k') | tools/gn/target.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698