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

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

Issue 1868023002: Add GN output prefix override and allow empty output extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « tools/gn/target.h ('k') | tools/gn/target_unittest.cc » ('j') | 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/target.h" 5 #include "tools/gn/target.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } 205 }
206 206
207 return true; 207 return true;
208 } 208 }
209 209
210 } // namespace 210 } // namespace
211 211
212 Target::Target(const Settings* settings, const Label& label) 212 Target::Target(const Settings* settings, const Label& label)
213 : Item(settings, label), 213 : Item(settings, label),
214 output_type_(UNKNOWN), 214 output_type_(UNKNOWN),
215 output_prefix_override_(false),
216 output_extension_set_(false),
215 all_headers_public_(true), 217 all_headers_public_(true),
216 check_includes_(true), 218 check_includes_(true),
217 complete_static_lib_(false), 219 complete_static_lib_(false),
218 testonly_(false), 220 testonly_(false),
219 toolchain_(nullptr) { 221 toolchain_(nullptr) {
220 } 222 }
221 223
222 Target::~Target() { 224 Target::~Target() {
223 } 225 }
224 226
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 DepsIteratorRange Target::GetDeps(DepsIterationType type) const { 353 DepsIteratorRange Target::GetDeps(DepsIterationType type) const {
352 if (type == DEPS_LINKED) { 354 if (type == DEPS_LINKED) {
353 return DepsIteratorRange(DepsIterator( 355 return DepsIteratorRange(DepsIterator(
354 &public_deps_, &private_deps_, nullptr)); 356 &public_deps_, &private_deps_, nullptr));
355 } 357 }
356 // All deps. 358 // All deps.
357 return DepsIteratorRange(DepsIterator( 359 return DepsIteratorRange(DepsIterator(
358 &public_deps_, &private_deps_, &data_deps_)); 360 &public_deps_, &private_deps_, &data_deps_));
359 } 361 }
360 362
361 std::string Target::GetComputedOutputName(bool include_prefix) const { 363 std::string Target::GetComputedOutputName() const {
362 DCHECK(toolchain_) 364 DCHECK(toolchain_)
363 << "Toolchain must be specified before getting the computed output name."; 365 << "Toolchain must be specified before getting the computed output name.";
364 366
365 const std::string& name = output_name_.empty() ? label().name() 367 const std::string& name = output_name_.empty() ? label().name()
366 : output_name_; 368 : output_name_;
367 369
368 std::string result; 370 std::string result;
369 if (include_prefix) { 371 const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this);
370 const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this); 372 if (tool) {
371 if (tool) { 373 // Only add the prefix if the name doesn't already have it and it's not
372 // Only add the prefix if the name doesn't already have it. 374 // being overridden.
373 if (!base::StartsWith(name, tool->output_prefix(), 375 if (!output_prefix_override_ &&
374 base::CompareCase::SENSITIVE)) 376 !base::StartsWith(name, tool->output_prefix(),
375 result = tool->output_prefix(); 377 base::CompareCase::SENSITIVE))
376 } 378 result = tool->output_prefix();
377 } 379 }
378 result.append(name); 380 result.append(name);
379 return result; 381 return result;
380 } 382 }
381 383
382 bool Target::SetToolchain(const Toolchain* toolchain, Err* err) { 384 bool Target::SetToolchain(const Toolchain* toolchain, Err* err) {
383 DCHECK(!toolchain_); 385 DCHECK(!toolchain_);
384 DCHECK_NE(UNKNOWN, output_type_); 386 DCHECK_NE(UNKNOWN, output_type_);
385 toolchain_ = toolchain; 387 toolchain_ = toolchain;
386 388
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 case BUNDLE_DATA: 531 case BUNDLE_DATA:
530 case CREATE_BUNDLE: 532 case CREATE_BUNDLE:
531 case SOURCE_SET: 533 case SOURCE_SET:
532 case COPY_FILES: 534 case COPY_FILES:
533 case ACTION: 535 case ACTION:
534 case ACTION_FOREACH: { 536 case ACTION_FOREACH: {
535 // These don't get linked to and use stamps which should be the first 537 // These don't get linked to and use stamps which should be the first
536 // entry in the outputs. These stamps are named 538 // entry in the outputs. These stamps are named
537 // "<target_out_dir>/<targetname>.stamp". 539 // "<target_out_dir>/<targetname>.stamp".
538 dependency_output_file_ = GetTargetOutputDirAsOutputFile(this); 540 dependency_output_file_ = GetTargetOutputDirAsOutputFile(this);
539 dependency_output_file_.value().append(GetComputedOutputName(true)); 541 dependency_output_file_.value().append(GetComputedOutputName());
540 dependency_output_file_.value().append(".stamp"); 542 dependency_output_file_.value().append(".stamp");
541 break; 543 break;
542 } 544 }
543 case EXECUTABLE: 545 case EXECUTABLE:
544 case LOADABLE_MODULE: 546 case LOADABLE_MODULE:
545 // Executables and loadable modules don't get linked to, but the first 547 // Executables and loadable modules don't get linked to, but the first
546 // output is used for dependency management. 548 // output is used for dependency management.
547 CHECK_GE(tool->outputs().list().size(), 1u); 549 CHECK_GE(tool->outputs().list().size(), 1u);
548 check_tool_outputs = true; 550 check_tool_outputs = true;
549 dependency_output_file_ = 551 dependency_output_file_ =
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 check_data_deps = g_scheduler->IsFileGeneratedByWriteRuntimeDeps(out_file); 779 check_data_deps = g_scheduler->IsFileGeneratedByWriteRuntimeDeps(out_file);
778 // Check object files (much slower and very rare) only if the "normal" 780 // Check object files (much slower and very rare) only if the "normal"
779 // output check failed. 781 // output check failed.
780 consider_object_files = !check_data_deps; 782 consider_object_files = !check_data_deps;
781 if (!EnsureFileIsGeneratedByDependency(this, out_file, true, 783 if (!EnsureFileIsGeneratedByDependency(this, out_file, true,
782 consider_object_files, 784 consider_object_files,
783 check_data_deps, &seen_targets)) 785 check_data_deps, &seen_targets))
784 g_scheduler->AddUnknownGeneratedInput(this, source); 786 g_scheduler->AddUnknownGeneratedInput(this, source);
785 } 787 }
786 } 788 }
OLDNEW
« no previous file with comments | « tools/gn/target.h ('k') | tools/gn/target_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698