OLD | NEW |
| (Empty) |
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 #ifndef TOOLS_GN_GYP_TARGET_WRITER_H_ | |
6 #define TOOLS_GN_GYP_TARGET_WRITER_H_ | |
7 | |
8 #include <iosfwd> | |
9 #include <vector> | |
10 | |
11 #include "base/basictypes.h" | |
12 #include "tools/gn/gyp_helper.h" | |
13 #include "tools/gn/path_output.h" | |
14 | |
15 class BuilderRecord; | |
16 class Err; | |
17 class Settings; | |
18 class SourceFile; | |
19 class Target; | |
20 class Toolchain; | |
21 | |
22 class GypTargetWriter { | |
23 public: | |
24 struct TargetGroup { | |
25 TargetGroup(); | |
26 | |
27 // Returns "a" record associated with this group. This is used when getting | |
28 // general things like the sources list that should be the same across all | |
29 // records in a group. | |
30 const BuilderRecord* get() const { | |
31 // We assume we always have either a host or a target debug build. | |
32 return debug ? debug : host_debug; | |
33 } | |
34 | |
35 const BuilderRecord* debug; | |
36 const BuilderRecord* release; | |
37 | |
38 // When the main compile is targeting a different architecture, these will | |
39 // contain the builds with the host system's toolchain. Only supported on | |
40 // Linux. | |
41 const BuilderRecord* host_debug; | |
42 const BuilderRecord* host_release; | |
43 | |
44 // On Windows, we do both 32-bit and 64-bit builds. Null on non-Windows. | |
45 const BuilderRecord* debug64; | |
46 const BuilderRecord* release64; | |
47 | |
48 // On Mac/iOS, there are some nontrivial differences between the GYP Ninja | |
49 // build and the GYP XCode build. In GYP, these are parameterized as | |
50 // conditions using the generator flag. To emulate this, we have different | |
51 // builds for the XCode and Ninja versions of the GYP file, and the | |
52 // generator wraps everything in a big condition so that GYP does the right | |
53 // thing. | |
54 // | |
55 // These refer to the GYP-XCode build. The "regular" debug and release | |
56 // targets above refer to the GYP-Ninja build. | |
57 const BuilderRecord* xcode_debug; | |
58 const BuilderRecord* xcode_release; | |
59 | |
60 // Optional host versions of the xcode config when cross-compiling to iOS. | |
61 const BuilderRecord* xcode_host_debug; | |
62 const BuilderRecord* xcode_host_release; | |
63 }; | |
64 | |
65 GypTargetWriter(const Target* target, | |
66 const Toolchain* toolchain, | |
67 const SourceDir& gyp_dir, | |
68 std::ostream& out); | |
69 virtual ~GypTargetWriter(); | |
70 | |
71 static void WriteFile(const SourceFile& gyp_file, | |
72 const std::vector<TargetGroup>& targets, | |
73 const Toolchain* debug_toolchain, | |
74 Err* err); | |
75 | |
76 virtual void Run() = 0; | |
77 | |
78 protected: | |
79 // Writes the given number of spaces to the output stream and returns it. | |
80 std::ostream& Indent(int spaces); | |
81 static std::ostream& Indent(std::ostream& out, int spaces); | |
82 | |
83 static const int kExtraIndent = 2; | |
84 | |
85 const Settings* settings_; // Non-owning. | |
86 const Target* target_; // Non-owning. | |
87 const Toolchain* toolchain_; // Toolchain corresponding to target_. | |
88 SourceDir gyp_dir_; // Dir of GYP file. | |
89 std::ostream& out_; | |
90 | |
91 GypHelper helper_; | |
92 PathOutput path_output_; | |
93 | |
94 private: | |
95 DISALLOW_COPY_AND_ASSIGN(GypTargetWriter); | |
96 }; | |
97 | |
98 #endif // TOOLS_GN_GYP_TARGET_WRITER_H_ | |
OLD | NEW |