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/toolchain.h" | 5 #include "tools/gn/toolchain.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "tools/gn/target.h" | 10 #include "tools/gn/target.h" |
11 #include "tools/gn/value.h" | 11 #include "tools/gn/value.h" |
12 | 12 |
13 const char* Toolchain::kToolCc = "cc"; | 13 const char* Toolchain::kToolCc = "cc"; |
14 const char* Toolchain::kToolCxx = "cxx"; | 14 const char* Toolchain::kToolCxx = "cxx"; |
15 const char* Toolchain::kToolObjC = "objc"; | 15 const char* Toolchain::kToolObjC = "objc"; |
16 const char* Toolchain::kToolObjCxx = "objcxx"; | 16 const char* Toolchain::kToolObjCxx = "objcxx"; |
17 const char* Toolchain::kToolRc = "rc"; | 17 const char* Toolchain::kToolRc = "rc"; |
18 const char* Toolchain::kToolAsm = "asm"; | 18 const char* Toolchain::kToolAsm = "asm"; |
19 const char* Toolchain::kToolAlink = "alink"; | 19 const char* Toolchain::kToolAlink = "alink"; |
| 20 const char* Toolchain::kToolDylink = "dylink"; |
20 const char* Toolchain::kToolSolink = "solink"; | 21 const char* Toolchain::kToolSolink = "solink"; |
21 const char* Toolchain::kToolLink = "link"; | 22 const char* Toolchain::kToolLink = "link"; |
22 const char* Toolchain::kToolStamp = "stamp"; | 23 const char* Toolchain::kToolStamp = "stamp"; |
23 const char* Toolchain::kToolCopy = "copy"; | 24 const char* Toolchain::kToolCopy = "copy"; |
24 | 25 |
25 Toolchain::Toolchain(const Settings* settings, const Label& label) | 26 Toolchain::Toolchain(const Settings* settings, const Label& label) |
26 : Item(settings, label), | 27 : Item(settings, label), |
27 concurrent_links_(0), | 28 concurrent_links_(0), |
28 setup_complete_(false) { | 29 setup_complete_(false) { |
29 } | 30 } |
(...skipping 11 matching lines...) Expand all Loading... |
41 | 42 |
42 // static | 43 // static |
43 Toolchain::ToolType Toolchain::ToolNameToType(const base::StringPiece& str) { | 44 Toolchain::ToolType Toolchain::ToolNameToType(const base::StringPiece& str) { |
44 if (str == kToolCc) return TYPE_CC; | 45 if (str == kToolCc) return TYPE_CC; |
45 if (str == kToolCxx) return TYPE_CXX; | 46 if (str == kToolCxx) return TYPE_CXX; |
46 if (str == kToolObjC) return TYPE_OBJC; | 47 if (str == kToolObjC) return TYPE_OBJC; |
47 if (str == kToolObjCxx) return TYPE_OBJCXX; | 48 if (str == kToolObjCxx) return TYPE_OBJCXX; |
48 if (str == kToolRc) return TYPE_RC; | 49 if (str == kToolRc) return TYPE_RC; |
49 if (str == kToolAsm) return TYPE_ASM; | 50 if (str == kToolAsm) return TYPE_ASM; |
50 if (str == kToolAlink) return TYPE_ALINK; | 51 if (str == kToolAlink) return TYPE_ALINK; |
| 52 if (str == kToolDylink) return TYPE_DYLINK; |
51 if (str == kToolSolink) return TYPE_SOLINK; | 53 if (str == kToolSolink) return TYPE_SOLINK; |
52 if (str == kToolLink) return TYPE_LINK; | 54 if (str == kToolLink) return TYPE_LINK; |
53 if (str == kToolStamp) return TYPE_STAMP; | 55 if (str == kToolStamp) return TYPE_STAMP; |
54 if (str == kToolCopy) return TYPE_COPY; | 56 if (str == kToolCopy) return TYPE_COPY; |
55 return TYPE_NONE; | 57 return TYPE_NONE; |
56 } | 58 } |
57 | 59 |
58 // static | 60 // static |
59 std::string Toolchain::ToolTypeToName(ToolType type) { | 61 std::string Toolchain::ToolTypeToName(ToolType type) { |
60 switch (type) { | 62 switch (type) { |
61 case TYPE_CC: return kToolCc; | 63 case TYPE_CC: return kToolCc; |
62 case TYPE_CXX: return kToolCxx; | 64 case TYPE_CXX: return kToolCxx; |
63 case TYPE_OBJC: return kToolObjC; | 65 case TYPE_OBJC: return kToolObjC; |
64 case TYPE_OBJCXX: return kToolObjCxx; | 66 case TYPE_OBJCXX: return kToolObjCxx; |
65 case TYPE_RC: return kToolRc; | 67 case TYPE_RC: return kToolRc; |
66 case TYPE_ASM: return kToolAsm; | 68 case TYPE_ASM: return kToolAsm; |
67 case TYPE_ALINK: return kToolAlink; | 69 case TYPE_ALINK: return kToolAlink; |
| 70 case TYPE_DYLINK: return kToolDylink; |
68 case TYPE_SOLINK: return kToolSolink; | 71 case TYPE_SOLINK: return kToolSolink; |
69 case TYPE_LINK: return kToolLink; | 72 case TYPE_LINK: return kToolLink; |
70 case TYPE_STAMP: return kToolStamp; | 73 case TYPE_STAMP: return kToolStamp; |
71 case TYPE_COPY: return kToolCopy; | 74 case TYPE_COPY: return kToolCopy; |
72 default: | 75 default: |
73 NOTREACHED(); | 76 NOTREACHED(); |
74 return std::string(); | 77 return std::string(); |
75 } | 78 } |
76 } | 79 } |
77 | 80 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 Toolchain::ToolType Toolchain::GetToolTypeForTargetFinalOutput( | 135 Toolchain::ToolType Toolchain::GetToolTypeForTargetFinalOutput( |
133 const Target* target) { | 136 const Target* target) { |
134 // The contents of this list might be suprising (i.e. stamp tool for copy | 137 // The contents of this list might be suprising (i.e. stamp tool for copy |
135 // rules). See the header for why. | 138 // rules). See the header for why. |
136 switch (target->output_type()) { | 139 switch (target->output_type()) { |
137 case Target::GROUP: | 140 case Target::GROUP: |
138 return TYPE_STAMP; | 141 return TYPE_STAMP; |
139 case Target::EXECUTABLE: | 142 case Target::EXECUTABLE: |
140 return Toolchain::TYPE_LINK; | 143 return Toolchain::TYPE_LINK; |
141 case Target::SHARED_LIBRARY: | 144 case Target::SHARED_LIBRARY: |
| 145 // TODO(andybons): Uncomment on the next roll, which must include the |
| 146 // BUILD file changes. |
| 147 //if (target->loadable_module()) |
| 148 // return Toolchain::TYPE_SOLINK; |
| 149 //return Toolchain::TYPE_DYLINK; |
142 return Toolchain::TYPE_SOLINK; | 150 return Toolchain::TYPE_SOLINK; |
143 case Target::STATIC_LIBRARY: | 151 case Target::STATIC_LIBRARY: |
144 return Toolchain::TYPE_ALINK; | 152 return Toolchain::TYPE_ALINK; |
145 case Target::SOURCE_SET: | 153 case Target::SOURCE_SET: |
146 return TYPE_STAMP; | 154 return TYPE_STAMP; |
147 case Target::COPY_FILES: | 155 case Target::COPY_FILES: |
148 case Target::ACTION: | 156 case Target::ACTION: |
149 case Target::ACTION_FOREACH: | 157 case Target::ACTION_FOREACH: |
150 return TYPE_STAMP; | 158 return TYPE_STAMP; |
151 default: | 159 default: |
152 NOTREACHED(); | 160 NOTREACHED(); |
153 return Toolchain::TYPE_NONE; | 161 return Toolchain::TYPE_NONE; |
154 } | 162 } |
155 } | 163 } |
156 | 164 |
157 const Tool* Toolchain::GetToolForTargetFinalOutput(const Target* target) const { | 165 const Tool* Toolchain::GetToolForTargetFinalOutput(const Target* target) const { |
158 return tools_[GetToolTypeForTargetFinalOutput(target)].get(); | 166 return tools_[GetToolTypeForTargetFinalOutput(target)].get(); |
159 } | 167 } |
OLD | NEW |