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/gyp_binary_target_writer.h" | 5 #include "tools/gn/gyp_binary_target_writer.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "tools/gn/builder_record.h" |
10 #include "tools/gn/config_values_extractors.h" | 11 #include "tools/gn/config_values_extractors.h" |
11 #include "tools/gn/err.h" | 12 #include "tools/gn/err.h" |
12 #include "tools/gn/escape.h" | 13 #include "tools/gn/escape.h" |
13 #include "tools/gn/filesystem_utils.h" | 14 #include "tools/gn/filesystem_utils.h" |
14 #include "tools/gn/settings.h" | 15 #include "tools/gn/settings.h" |
15 #include "tools/gn/target.h" | 16 #include "tools/gn/target.h" |
16 | 17 |
17 namespace { | 18 namespace { |
18 | 19 |
19 // This functor is used to capture the output of RecursiveTargetConfigToStream | 20 // This functor is used to capture the output of RecursiveTargetConfigToStream |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 112 |
112 const int kExtraIndent = 2; | 113 const int kExtraIndent = 2; |
113 | 114 |
114 } // namespace | 115 } // namespace |
115 | 116 |
116 GypBinaryTargetWriter::Flags::Flags() {} | 117 GypBinaryTargetWriter::Flags::Flags() {} |
117 GypBinaryTargetWriter::Flags::~Flags() {} | 118 GypBinaryTargetWriter::Flags::~Flags() {} |
118 | 119 |
119 GypBinaryTargetWriter::GypBinaryTargetWriter(const TargetGroup& group, | 120 GypBinaryTargetWriter::GypBinaryTargetWriter(const TargetGroup& group, |
120 std::ostream& out) | 121 std::ostream& out) |
121 : GypTargetWriter(group.debug, out), | 122 : GypTargetWriter(group.debug->item()->AsTarget(), out), |
122 group_(group) { | 123 group_(group) { |
123 } | 124 } |
124 | 125 |
125 GypBinaryTargetWriter::~GypBinaryTargetWriter() { | 126 GypBinaryTargetWriter::~GypBinaryTargetWriter() { |
126 } | 127 } |
127 | 128 |
128 void GypBinaryTargetWriter::Run() { | 129 void GypBinaryTargetWriter::Run() { |
129 int indent = 4; | 130 int indent = 4; |
130 | 131 |
131 Indent(indent) << "{\n"; | 132 Indent(indent) << "{\n"; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 } | 187 } |
187 | 188 |
188 if (target_->hard_dep()) | 189 if (target_->hard_dep()) |
189 Indent(indent) << "'hard_dependency': 1,\n"; | 190 Indent(indent) << "'hard_dependency': 1,\n"; |
190 } | 191 } |
191 | 192 |
192 void GypBinaryTargetWriter::WriteVCConfiguration(int indent) { | 193 void GypBinaryTargetWriter::WriteVCConfiguration(int indent) { |
193 Indent(indent) << "'configurations': {\n"; | 194 Indent(indent) << "'configurations': {\n"; |
194 | 195 |
195 Indent(indent + kExtraIndent) << "'Debug': {\n"; | 196 Indent(indent + kExtraIndent) << "'Debug': {\n"; |
196 Flags debug_flags(FlagsFromTarget(group_.debug)); | 197 Flags debug_flags(FlagsFromTarget(group_.debug->item()->AsTarget())); |
197 WriteVCFlags(debug_flags, indent + kExtraIndent * 2); | 198 WriteVCFlags(debug_flags, indent + kExtraIndent * 2); |
198 Indent(indent + kExtraIndent) << "},\n"; | 199 Indent(indent + kExtraIndent) << "},\n"; |
199 | 200 |
200 Indent(indent + kExtraIndent) << "'Release': {\n"; | 201 Indent(indent + kExtraIndent) << "'Release': {\n"; |
201 Flags release_flags(FlagsFromTarget(group_.release)); | 202 Flags release_flags(FlagsFromTarget(group_.release->item()->AsTarget())); |
202 WriteVCFlags(release_flags, indent + kExtraIndent * 2); | 203 WriteVCFlags(release_flags, indent + kExtraIndent * 2); |
203 Indent(indent + kExtraIndent) << "},\n"; | 204 Indent(indent + kExtraIndent) << "},\n"; |
204 | 205 |
205 Indent(indent + kExtraIndent) << "'Debug_x64': {},\n"; | 206 Indent(indent + kExtraIndent) << "'Debug_x64': {},\n"; |
206 Indent(indent + kExtraIndent) << "'Release_x64': {},\n"; | 207 Indent(indent + kExtraIndent) << "'Release_x64': {},\n"; |
207 Indent(indent) << "},\n"; | 208 Indent(indent) << "},\n"; |
208 | 209 |
209 WriteSources(target_, indent); | 210 WriteSources(target_, indent); |
210 WriteDeps(target_, indent); | 211 WriteDeps(target_, indent); |
211 } | 212 } |
212 | 213 |
213 void GypBinaryTargetWriter::WriteLinuxConfiguration(int indent) { | 214 void GypBinaryTargetWriter::WriteLinuxConfiguration(int indent) { |
214 // The Linux stuff works differently. On Linux we support cross-compiles and | 215 // The Linux stuff works differently. On Linux we support cross-compiles and |
215 // all ninja generators know to look for target conditions. Other platforms' | 216 // all ninja generators know to look for target conditions. Other platforms' |
216 // generators don't all do this, so we can't have the same GYP structure. | 217 // generators don't all do this, so we can't have the same GYP structure. |
217 Indent(indent) << "'target_conditions': [\n"; | 218 Indent(indent) << "'target_conditions': [\n"; |
218 // The host toolset is configured for the current computer, we will only have | 219 // The host toolset is configured for the current computer, we will only have |
219 // this when doing cross-compiles. | 220 // this when doing cross-compiles. |
220 if (group_.host_debug && group_.host_release) { | 221 if (group_.host_debug && group_.host_release) { |
221 Indent(indent + kExtraIndent) << "['_toolset == \"host\"', {\n"; | 222 Indent(indent + kExtraIndent) << "['_toolset == \"host\"', {\n"; |
222 Indent(indent + kExtraIndent * 2) << "'configurations': {\n"; | 223 Indent(indent + kExtraIndent * 2) << "'configurations': {\n"; |
223 Indent(indent + kExtraIndent * 3) << "'Debug': {\n"; | 224 Indent(indent + kExtraIndent * 3) << "'Debug': {\n"; |
224 WriteLinuxFlagsForTarget(group_.host_debug, indent + kExtraIndent * 4); | 225 WriteLinuxFlagsForTarget(group_.host_debug->item()->AsTarget(), |
| 226 indent + kExtraIndent * 4); |
225 Indent(indent + kExtraIndent * 3) << "},\n"; | 227 Indent(indent + kExtraIndent * 3) << "},\n"; |
226 Indent(indent + kExtraIndent * 3) << "'Release': {\n"; | 228 Indent(indent + kExtraIndent * 3) << "'Release': {\n"; |
227 WriteLinuxFlagsForTarget(group_.host_release, indent + kExtraIndent * 4); | 229 WriteLinuxFlagsForTarget(group_.host_release->item()->AsTarget(), |
| 230 indent + kExtraIndent * 4); |
228 Indent(indent + kExtraIndent * 3) << "},\n"; | 231 Indent(indent + kExtraIndent * 3) << "},\n"; |
229 Indent(indent + kExtraIndent * 2) << "}\n"; | 232 Indent(indent + kExtraIndent * 2) << "}\n"; |
230 | 233 |
231 // The sources are per-toolset but shared between debug & release. | 234 // The sources are per-toolset but shared between debug & release. |
232 WriteSources(group_.host_debug, indent + kExtraIndent * 2); | 235 WriteSources(group_.host_debug->item()->AsTarget(), |
| 236 indent + kExtraIndent * 2); |
233 | 237 |
234 Indent(indent + kExtraIndent) << "],\n"; | 238 Indent(indent + kExtraIndent) << "],\n"; |
235 } | 239 } |
236 | 240 |
237 // The target toolset is the "regular" one. | 241 // The target toolset is the "regular" one. |
238 Indent(indent + kExtraIndent) << "['_toolset == \"target\"', {\n"; | 242 Indent(indent + kExtraIndent) << "['_toolset == \"target\"', {\n"; |
239 Indent(indent + kExtraIndent * 2) << "'configurations': {\n"; | 243 Indent(indent + kExtraIndent * 2) << "'configurations': {\n"; |
240 Indent(indent + kExtraIndent * 3) << "'Debug': {\n"; | 244 Indent(indent + kExtraIndent * 3) << "'Debug': {\n"; |
241 WriteLinuxFlagsForTarget(group_.debug, indent + kExtraIndent * 4); | 245 WriteLinuxFlagsForTarget(group_.debug->item()->AsTarget(), |
| 246 indent + kExtraIndent * 4); |
242 Indent(indent + kExtraIndent * 3) << "},\n"; | 247 Indent(indent + kExtraIndent * 3) << "},\n"; |
243 Indent(indent + kExtraIndent * 3) << "'Release': {\n"; | 248 Indent(indent + kExtraIndent * 3) << "'Release': {\n"; |
244 WriteLinuxFlagsForTarget(group_.release, indent + kExtraIndent * 4); | 249 WriteLinuxFlagsForTarget(group_.release->item()->AsTarget(), |
| 250 indent + kExtraIndent * 4); |
245 Indent(indent + kExtraIndent * 3) << "},\n"; | 251 Indent(indent + kExtraIndent * 3) << "},\n"; |
246 Indent(indent + kExtraIndent * 2) << "},\n"; | 252 Indent(indent + kExtraIndent * 2) << "},\n"; |
247 | 253 |
248 WriteSources(target_, indent + kExtraIndent * 2); | 254 WriteSources(target_, indent + kExtraIndent * 2); |
249 | 255 |
250 Indent(indent + kExtraIndent) << "},],\n"; | 256 Indent(indent + kExtraIndent) << "},],\n"; |
251 Indent(indent) << "],\n"; | 257 Indent(indent) << "],\n"; |
252 | 258 |
253 // Deps in GYP can not vary based on the toolset. | 259 // Deps in GYP can not vary based on the toolset. |
254 WriteDeps(target_, indent); | 260 WriteDeps(target_, indent); |
255 } | 261 } |
256 | 262 |
257 void GypBinaryTargetWriter::WriteMacConfiguration(int indent) { | 263 void GypBinaryTargetWriter::WriteMacConfiguration(int indent) { |
258 Indent(indent) << "'configurations': {\n"; | 264 Indent(indent) << "'configurations': {\n"; |
259 | 265 |
260 Indent(indent + kExtraIndent) << "'Debug': {\n"; | 266 Indent(indent + kExtraIndent) << "'Debug': {\n"; |
261 Flags debug_flags(FlagsFromTarget(group_.debug)); | 267 Flags debug_flags(FlagsFromTarget(group_.debug->item()->AsTarget())); |
262 WriteMacFlags(debug_flags, indent + kExtraIndent * 2); | 268 WriteMacFlags(debug_flags, indent + kExtraIndent * 2); |
263 Indent(indent + kExtraIndent) << "},\n"; | 269 Indent(indent + kExtraIndent) << "},\n"; |
264 | 270 |
265 Indent(indent + kExtraIndent) << "'Release': {\n"; | 271 Indent(indent + kExtraIndent) << "'Release': {\n"; |
266 Flags release_flags(FlagsFromTarget(group_.release)); | 272 Flags release_flags(FlagsFromTarget(group_.release->item()->AsTarget())); |
267 WriteMacFlags(release_flags, indent + kExtraIndent * 2); | 273 WriteMacFlags(release_flags, indent + kExtraIndent * 2); |
268 Indent(indent + kExtraIndent) << "},\n"; | 274 Indent(indent + kExtraIndent) << "},\n"; |
269 | 275 |
270 Indent(indent) << "},\n"; | 276 Indent(indent) << "},\n"; |
271 | 277 |
272 WriteSources(target_, indent); | 278 WriteSources(target_, indent); |
273 WriteDeps(target_, indent); | 279 WriteDeps(target_, indent); |
274 } | 280 } |
275 | 281 |
276 void GypBinaryTargetWriter::WriteVCFlags(Flags& flags, int indent) { | 282 void GypBinaryTargetWriter::WriteVCFlags(Flags& flags, int indent) { |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 EXTRACT(std::string, cflags_objc); | 566 EXTRACT(std::string, cflags_objc); |
561 EXTRACT(std::string, cflags_objcc); | 567 EXTRACT(std::string, cflags_objcc); |
562 EXTRACT(std::string, ldflags); | 568 EXTRACT(std::string, ldflags); |
563 EXTRACT(SourceDir, lib_dirs); | 569 EXTRACT(SourceDir, lib_dirs); |
564 EXTRACT(std::string, libs); | 570 EXTRACT(std::string, libs); |
565 | 571 |
566 #undef EXTRACT | 572 #undef EXTRACT |
567 | 573 |
568 return ret; | 574 return ret; |
569 } | 575 } |
OLD | NEW |