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

Side by Side Diff: tools/gn/toolchain.cc

Issue 440333002: Support more configurability in GN toolchains (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unsigned check 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 | Annotate | Revision Log
« no previous file with comments | « tools/gn/toolchain.h ('k') | no next file » | 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 #include "tools/gn/toolchain.h" 5 #include "tools/gn/toolchain.h"
6 6
7 #include <string.h>
8
7 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "tools/gn/target.h"
8 #include "tools/gn/value.h" 11 #include "tools/gn/value.h"
9 12
10 const char* Toolchain::kToolCc = "cc"; 13 const char* Toolchain::kToolCc = "cc";
11 const char* Toolchain::kToolCxx = "cxx"; 14 const char* Toolchain::kToolCxx = "cxx";
12 const char* Toolchain::kToolObjC = "objc"; 15 const char* Toolchain::kToolObjC = "objc";
13 const char* Toolchain::kToolObjCxx = "objcxx"; 16 const char* Toolchain::kToolObjCxx = "objcxx";
14 const char* Toolchain::kToolRc = "rc"; 17 const char* Toolchain::kToolRc = "rc";
15 const char* Toolchain::kToolAsm = "asm"; 18 const char* Toolchain::kToolAsm = "asm";
16 const char* Toolchain::kToolAlink = "alink"; 19 const char* Toolchain::kToolAlink = "alink";
17 const char* Toolchain::kToolSolink = "solink"; 20 const char* Toolchain::kToolSolink = "solink";
18 const char* Toolchain::kToolLink = "link"; 21 const char* Toolchain::kToolLink = "link";
19 const char* Toolchain::kToolStamp = "stamp"; 22 const char* Toolchain::kToolStamp = "stamp";
20 const char* Toolchain::kToolCopy = "copy"; 23 const char* Toolchain::kToolCopy = "copy";
21 24
22 Toolchain::Tool::Tool() {
23 }
24
25 Toolchain::Tool::~Tool() {
26 }
27
28 Toolchain::Toolchain(const Settings* settings, const Label& label) 25 Toolchain::Toolchain(const Settings* settings, const Label& label)
29 : Item(settings, label) { 26 : Item(settings, label),
27 setup_complete_(false) {
30 } 28 }
31 29
32 Toolchain::~Toolchain() { 30 Toolchain::~Toolchain() {
33 } 31 }
34 32
35 Toolchain* Toolchain::AsToolchain() { 33 Toolchain* Toolchain::AsToolchain() {
36 return this; 34 return this;
37 } 35 }
38 36
39 const Toolchain* Toolchain::AsToolchain() const { 37 const Toolchain* Toolchain::AsToolchain() const {
(...skipping 29 matching lines...) Expand all
69 case TYPE_SOLINK: return kToolSolink; 67 case TYPE_SOLINK: return kToolSolink;
70 case TYPE_LINK: return kToolLink; 68 case TYPE_LINK: return kToolLink;
71 case TYPE_STAMP: return kToolStamp; 69 case TYPE_STAMP: return kToolStamp;
72 case TYPE_COPY: return kToolCopy; 70 case TYPE_COPY: return kToolCopy;
73 default: 71 default:
74 NOTREACHED(); 72 NOTREACHED();
75 return std::string(); 73 return std::string();
76 } 74 }
77 } 75 }
78 76
79 const Toolchain::Tool& Toolchain::GetTool(ToolType type) const { 77 const Tool* Toolchain::GetTool(ToolType type) const {
80 DCHECK(type != TYPE_NONE); 78 DCHECK(type != TYPE_NONE);
81 return tools_[static_cast<size_t>(type)]; 79 return tools_[static_cast<size_t>(type)].get();
82 } 80 }
83 81
84 void Toolchain::SetTool(ToolType type, const Tool& t) { 82 void Toolchain::SetTool(ToolType type, scoped_ptr<Tool> t) {
85 DCHECK(type != TYPE_NONE); 83 DCHECK(type != TYPE_NONE);
86 tools_[static_cast<size_t>(type)] = t; 84 DCHECK(!tools_[type].get());
85 t->SetComplete();
86 tools_[type] = t.Pass();
87 } 87 }
88
89 void Toolchain::ToolchainSetupComplete() {
90 // Collect required bits from all tools.
91 for (size_t i = 0; i < TYPE_NUMTYPES; i++) {
92 if (tools_[i])
93 substitution_bits_.MergeFrom(tools_[i]->substitution_bits());
94 }
95
96 setup_complete_ = true;
97 }
98
99 // static
100 Toolchain::ToolType Toolchain::GetToolTypeForSourceType(SourceFileType type) {
101 switch (type) {
102 case SOURCE_C:
103 return TYPE_CC;
104 case SOURCE_CC:
105 return TYPE_CXX;
106 case SOURCE_M:
107 return TYPE_OBJC;
108 case SOURCE_MM:
109 return TYPE_OBJCXX;
110 case SOURCE_ASM:
111 case SOURCE_S:
112 return TYPE_ASM;
113 case SOURCE_RC:
114 return TYPE_RC;
115 case SOURCE_UNKNOWN:
116 case SOURCE_H:
117 case SOURCE_O:
118 return TYPE_NONE;
119 default:
120 NOTREACHED();
121 return TYPE_NONE;
122 }
123 }
124
125 const Tool* Toolchain::GetToolForSourceType(SourceFileType type) {
126 return tools_[GetToolTypeForSourceType(type)].get();
127 }
128
129 // static
130 Toolchain::ToolType Toolchain::GetToolTypeForTargetFinalOutput(
131 const Target* target) {
132 // The contents of this list might be suprising (i.e. stamp tool for copy
133 // rules). See the header for why.
134 switch (target->output_type()) {
135 case Target::GROUP:
136 return TYPE_STAMP;
137 case Target::EXECUTABLE:
138 return Toolchain::TYPE_LINK;
139 case Target::SHARED_LIBRARY:
140 return Toolchain::TYPE_SOLINK;
141 case Target::STATIC_LIBRARY:
142 return Toolchain::TYPE_ALINK;
143 case Target::SOURCE_SET:
144 return TYPE_STAMP;
145 case Target::COPY_FILES:
146 case Target::ACTION:
147 case Target::ACTION_FOREACH:
148 return TYPE_STAMP;
149 default:
150 NOTREACHED();
151 return Toolchain::TYPE_NONE;
152 }
153 }
154
155 const Tool* Toolchain::GetToolForTargetFinalOutput(const Target* target) const {
156 return tools_[GetToolTypeForTargetFinalOutput(target)].get();
157 }
OLDNEW
« no previous file with comments | « tools/gn/toolchain.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698