| 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::kToolSolink = "solink"; | 20 const char* Toolchain::kToolSolink = "solink"; |
| 21 const char* Toolchain::kToolSolinkModule = "solink_module"; |
| 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 } |
| 30 | 31 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 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; |
| 51 if (str == kToolSolink) return TYPE_SOLINK; | 52 if (str == kToolSolink) return TYPE_SOLINK; |
| 53 if (str == kToolSolinkModule) return TYPE_SOLINK_MODULE; |
| 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; |
| 68 case TYPE_SOLINK: return kToolSolink; | 70 case TYPE_SOLINK: return kToolSolink; |
| 71 case TYPE_SOLINK_MODULE: return kToolSolinkModule; |
| 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 |
| 78 const Tool* Toolchain::GetTool(ToolType type) const { | 81 const Tool* Toolchain::GetTool(ToolType type) const { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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: |
| 142 return Toolchain::TYPE_SOLINK; | 145 return Toolchain::TYPE_SOLINK; |
| 146 case Target::LOADABLE_MODULE: |
| 147 return Toolchain::TYPE_SOLINK_MODULE; |
| 143 case Target::STATIC_LIBRARY: | 148 case Target::STATIC_LIBRARY: |
| 144 return Toolchain::TYPE_ALINK; | 149 return Toolchain::TYPE_ALINK; |
| 145 case Target::SOURCE_SET: | 150 case Target::SOURCE_SET: |
| 146 return TYPE_STAMP; | 151 return TYPE_STAMP; |
| 147 case Target::COPY_FILES: | 152 case Target::COPY_FILES: |
| 148 case Target::ACTION: | 153 case Target::ACTION: |
| 149 case Target::ACTION_FOREACH: | 154 case Target::ACTION_FOREACH: |
| 150 return TYPE_STAMP; | 155 return TYPE_STAMP; |
| 151 default: | 156 default: |
| 152 NOTREACHED(); | 157 NOTREACHED(); |
| 153 return Toolchain::TYPE_NONE; | 158 return Toolchain::TYPE_NONE; |
| 154 } | 159 } |
| 155 } | 160 } |
| 156 | 161 |
| 157 const Tool* Toolchain::GetToolForTargetFinalOutput(const Target* target) const { | 162 const Tool* Toolchain::GetToolForTargetFinalOutput(const Target* target) const { |
| 158 return tools_[GetToolTypeForTargetFinalOutput(target)].get(); | 163 return tools_[GetToolTypeForTargetFinalOutput(target)].get(); |
| 159 } | 164 } |
| OLD | NEW |