| 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/target.h" | 5 #include "tools/gn/target.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
| 10 #include "tools/gn/config_values_extractors.h" | 10 #include "tools/gn/config_values_extractors.h" |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 } | 191 } |
| 192 | 192 |
| 193 bool Target::IsLinkable() const { | 193 bool Target::IsLinkable() const { |
| 194 return output_type_ == STATIC_LIBRARY || output_type_ == SHARED_LIBRARY; | 194 return output_type_ == STATIC_LIBRARY || output_type_ == SHARED_LIBRARY; |
| 195 } | 195 } |
| 196 | 196 |
| 197 bool Target::IsFinal() const { | 197 bool Target::IsFinal() const { |
| 198 return output_type_ == EXECUTABLE || | 198 return output_type_ == EXECUTABLE || |
| 199 output_type_ == SHARED_LIBRARY || | 199 output_type_ == SHARED_LIBRARY || |
| 200 output_type_ == LOADABLE_MODULE || | 200 output_type_ == LOADABLE_MODULE || |
| 201 output_type_ == ACTION || |
| 202 output_type_ == ACTION_FOREACH || |
| 203 output_type_ == COPY_FILES || |
| 201 (output_type_ == STATIC_LIBRARY && complete_static_lib_); | 204 (output_type_ == STATIC_LIBRARY && complete_static_lib_); |
| 202 } | 205 } |
| 203 | 206 |
| 204 DepsIteratorRange Target::GetDeps(DepsIterationType type) const { | 207 DepsIteratorRange Target::GetDeps(DepsIterationType type) const { |
| 205 if (type == DEPS_LINKED) { | 208 if (type == DEPS_LINKED) { |
| 206 return DepsIteratorRange(DepsIterator( | 209 return DepsIteratorRange(DepsIterator( |
| 207 &public_deps_, &private_deps_, nullptr)); | 210 &public_deps_, &private_deps_, nullptr)); |
| 208 } | 211 } |
| 209 // All deps. | 212 // All deps. |
| 210 return DepsIteratorRange(DepsIterator( | 213 return DepsIteratorRange(DepsIterator( |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 PullPublicConfigsFrom(dep.ptr); | 318 PullPublicConfigsFrom(dep.ptr); |
| 316 } | 319 } |
| 317 | 320 |
| 318 void Target::PullPublicConfigsFrom(const Target* from) { | 321 void Target::PullPublicConfigsFrom(const Target* from) { |
| 319 public_configs_.Append(from->public_configs().begin(), | 322 public_configs_.Append(from->public_configs().begin(), |
| 320 from->public_configs().end()); | 323 from->public_configs().end()); |
| 321 } | 324 } |
| 322 | 325 |
| 323 void Target::PullRecursiveHardDeps() { | 326 void Target::PullRecursiveHardDeps() { |
| 324 for (const auto& pair : GetDeps(DEPS_LINKED)) { | 327 for (const auto& pair : GetDeps(DEPS_LINKED)) { |
| 328 // Direct hard dependencies. |
| 325 if (pair.ptr->hard_dep()) | 329 if (pair.ptr->hard_dep()) |
| 326 recursive_hard_deps_.insert(pair.ptr); | 330 recursive_hard_deps_.insert(pair.ptr); |
| 327 | 331 |
| 328 // Android STL doesn't like insert(begin, end) so do it manually. | 332 // Recursive hard dependencies of all dependencies. |
| 329 // TODO(brettw) this can be changed to | 333 recursive_hard_deps_.insert(pair.ptr->recursive_hard_deps().begin(), |
| 330 // insert(iter.target()->begin(), iter.target()->end()) | 334 pair.ptr->recursive_hard_deps().end()); |
| 331 // when Android uses a better STL. | |
| 332 for (std::set<const Target*>::const_iterator cur = | |
| 333 pair.ptr->recursive_hard_deps().begin(); | |
| 334 cur != pair.ptr->recursive_hard_deps().end(); ++cur) | |
| 335 recursive_hard_deps_.insert(*cur); | |
| 336 } | 335 } |
| 337 } | 336 } |
| 338 | 337 |
| 339 void Target::FillOutputFiles() { | 338 void Target::FillOutputFiles() { |
| 340 const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this); | 339 const Tool* tool = toolchain_->GetToolForTargetFinalOutput(this); |
| 341 bool check_tool_outputs = false; | 340 bool check_tool_outputs = false; |
| 342 switch (output_type_) { | 341 switch (output_type_) { |
| 343 case GROUP: | 342 case GROUP: |
| 344 case SOURCE_SET: | 343 case SOURCE_SET: |
| 345 case COPY_FILES: | 344 case COPY_FILES: |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 return; // Not in output dir, this is OK. | 541 return; // Not in output dir, this is OK. |
| 543 | 542 |
| 544 // Tell the scheduler about unknown files. This will be noted for later so | 543 // Tell the scheduler about unknown files. This will be noted for later so |
| 545 // the list of files written by the GN build itself (often response files) | 544 // the list of files written by the GN build itself (often response files) |
| 546 // can be filtered out of this list. | 545 // can be filtered out of this list. |
| 547 OutputFile out_file(settings()->build_settings(), source); | 546 OutputFile out_file(settings()->build_settings(), source); |
| 548 std::set<const Target*> seen_targets; | 547 std::set<const Target*> seen_targets; |
| 549 if (!EnsureFileIsGeneratedByDependency(this, out_file, true, &seen_targets)) | 548 if (!EnsureFileIsGeneratedByDependency(this, out_file, true, &seen_targets)) |
| 550 g_scheduler->AddUnknownGeneratedInput(this, source); | 549 g_scheduler->AddUnknownGeneratedInput(this, source); |
| 551 } | 550 } |
| OLD | NEW |