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

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

Issue 422633002: GN: Put shared libraries in outdir, not outdir/lib (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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/ninja_binary_target_writer_unittest.cc ('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/ninja_helper.h" 5 #include "tools/gn/ninja_helper.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "tools/gn/filesystem_utils.h" 9 #include "tools/gn/filesystem_utils.h"
10 #include "tools/gn/string_utils.h" 10 #include "tools/gn/string_utils.h"
11 #include "tools/gn/target.h" 11 #include "tools/gn/target.h"
12 12
13 namespace { 13 namespace {
14 14
15 const char kLibDirWithSlash[] = "lib/";
16 const char kObjectDirNoSlash[] = "obj"; 15 const char kObjectDirNoSlash[] = "obj";
17 16
18 } // namespace 17 } // namespace
19 18
20 NinjaHelper::NinjaHelper(const BuildSettings* build_settings) 19 NinjaHelper::NinjaHelper(const BuildSettings* build_settings)
21 : build_settings_(build_settings) { 20 : build_settings_(build_settings) {
22 build_to_src_no_last_slash_ = build_settings->build_to_source_dir_string(); 21 build_to_src_no_last_slash_ = build_settings->build_to_source_dir_string();
23 if (!build_to_src_no_last_slash_.empty() && 22 if (!build_to_src_no_last_slash_.empty() &&
24 build_to_src_no_last_slash_[build_to_src_no_last_slash_.size() - 1] == 23 build_to_src_no_last_slash_[build_to_src_no_last_slash_.size() - 1] ==
25 '/') 24 '/')
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 target->settings()->target_os()); 170 target->settings()->target_os());
172 } 171 }
173 } else { 172 } else {
174 extension = target->output_extension().c_str(); 173 extension = target->output_extension().c_str();
175 } 174 }
176 175
177 // Everything goes into the toolchain directory (which will be empty for the 176 // Everything goes into the toolchain directory (which will be empty for the
178 // default toolchain, and will end in a slash otherwise). 177 // default toolchain, and will end in a slash otherwise).
179 ret.value().append(target->settings()->toolchain_output_subdir().value()); 178 ret.value().append(target->settings()->toolchain_output_subdir().value());
180 179
181 // Binaries and loadable libraries go into the toolchain root. 180 // Binaries and shared libraries go into the toolchain root.
182 if (target->output_type() == Target::EXECUTABLE || 181 if (target->output_type() == Target::EXECUTABLE ||
183 ((target->settings()->IsMac() || target->settings()->IsWin()) && 182 target->output_type() == Target::SHARED_LIBRARY) {
184 target->output_type() == Target::SHARED_LIBRARY)) {
185 // Generate a name like "<toolchain>/<prefix><name>.<extension>". 183 // Generate a name like "<toolchain>/<prefix><name>.<extension>".
186 ret.value().append(prefix); 184 ret.value().append(prefix);
187 ret.value().append(name); 185 ret.value().append(name);
188 if (extension[0]) { 186 if (extension[0]) {
189 ret.value().push_back('.'); 187 ret.value().push_back('.');
190 ret.value().append(extension); 188 ret.value().append(extension);
191 } 189 }
192 return ret; 190 return ret;
193 } 191 }
194 192
195 // Libraries go into the library subdirectory like
196 // "<toolchain>/lib/<prefix><name>.<extension>".
197 if (target->output_type() == Target::SHARED_LIBRARY) {
198 ret.value().append(kLibDirWithSlash);
199 ret.value().append(prefix);
200 ret.value().append(name);
201 if (extension[0]) {
202 ret.value().push_back('.');
203 ret.value().append(extension);
204 }
205 return ret;
206 }
207
208 // Everything else goes next to the target's .ninja file like 193 // Everything else goes next to the target's .ninja file like
209 // "<toolchain>/obj/<path>/<name>.<extension>". 194 // "<toolchain>/obj/<path>/<name>.<extension>".
210 ret.value().append(kObjectDirNoSlash); 195 ret.value().append(kObjectDirNoSlash);
211 AppendStringPiece(&ret.value(), 196 AppendStringPiece(&ret.value(),
212 target->label().dir().SourceAbsoluteWithOneSlash()); 197 target->label().dir().SourceAbsoluteWithOneSlash());
213 ret.value().append(prefix); 198 ret.value().append(prefix);
214 ret.value().append(name); 199 ret.value().append(name);
215 if (extension[0]) { 200 if (extension[0]) {
216 ret.value().push_back('.'); 201 ret.value().push_back('.');
217 ret.value().append(extension); 202 ret.value().append(extension);
(...skipping 28 matching lines...) Expand all
246 return prefix + "rc"; 231 return prefix + "rc";
247 if (type == SOURCE_S) 232 if (type == SOURCE_S)
248 return prefix + "cc"; // Assembly files just get compiled by CC. 233 return prefix + "cc"; // Assembly files just get compiled by CC.
249 234
250 // TODO(brettw) asm files. 235 // TODO(brettw) asm files.
251 236
252 // .obj files have no rules to make them (they're already built) so we return 237 // .obj files have no rules to make them (they're already built) so we return
253 // the enpty string for SOURCE_O. 238 // the enpty string for SOURCE_O.
254 return std::string(); 239 return std::string();
255 } 240 }
OLDNEW
« no previous file with comments | « tools/gn/ninja_binary_target_writer_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698