Use ResolvedTargetData::GetTargetDeps() in Ninja target writers. Use the new NinjaTargetWriter::resolved() method to parse target dependencies. This is the first CL in a series that will move computations from Target to ResolvedTargetData and modify the Ninja writers to use instances of the latter. Bug: 331 Change-Id: I053f7f62f3525f58d94ffbfd1c170d429327ccd7 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/15322 Reviewed-by: Takuto Ikuta <tikuta@google.com> Commit-Queue: David Turner <digit@google.com>
diff --git a/src/gn/ninja_action_target_writer.cc b/src/gn/ninja_action_target_writer.cc index f4f0867..644b845 100644 --- a/src/gn/ninja_action_target_writer.cc +++ b/src/gn/ninja_action_target_writer.cc
@@ -36,11 +36,13 @@ // serialize these. std::vector<const Target*> additional_hard_deps; std::vector<OutputFile> data_outs; - for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) { - if (pair.ptr->IsDataOnly()) { - data_outs.push_back(pair.ptr->dependency_output_file()); + const auto& target_deps = resolved().GetTargetDeps(target_); + + for (const Target* dep : target_deps.linked_deps()) { + if (dep->IsDataOnly()) { + data_outs.push_back(dep->dependency_output_file()); } else { - additional_hard_deps.push_back(pair.ptr); + additional_hard_deps.push_back(dep); } } @@ -97,8 +99,8 @@ // done before we run the action. // TODO(thakis): If the action has just a single output, make things depend // on that output directly without writing a stamp file. - for (const auto& dep : target_->data_deps()) - data_outs.push_back(dep.ptr->dependency_output_file()); + for (const Target* data_dep : target_deps.data_deps()) + data_outs.push_back(data_dep->dependency_output_file()); WriteStampForTarget(output_files, data_outs); }
diff --git a/src/gn/ninja_binary_target_writer.cc b/src/gn/ninja_binary_target_writer.cc index e14954d..b9ecc21 100644 --- a/src/gn/ninja_binary_target_writer.cc +++ b/src/gn/ninja_binary_target_writer.cc
@@ -129,9 +129,11 @@ NinjaBinaryTargetWriter::GetClassifiedDeps() const { ClassifiedDeps classified_deps; + const auto& target_deps = resolved().GetTargetDeps(target_); + // Normal public/private deps. - for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) { - ClassifyDependency(pair.ptr, &classified_deps); + for (const Target* dep : target_deps.linked_deps()) { + ClassifyDependency(dep, &classified_deps); } // Inherited libraries. @@ -140,8 +142,8 @@ } // Data deps. - for (const auto& data_dep_pair : target_->data_deps()) - classified_deps.non_linkable_deps.push_back(data_dep_pair.ptr); + for (const Target* data_dep : target_deps.data_deps()) + classified_deps.non_linkable_deps.push_back(data_dep); return classified_deps; }
diff --git a/src/gn/ninja_bundle_data_target_writer.cc b/src/gn/ninja_bundle_data_target_writer.cc index 0e3bcb0..da3bb4e 100644 --- a/src/gn/ninja_bundle_data_target_writer.cc +++ b/src/gn/ninja_bundle_data_target_writer.cc
@@ -26,8 +26,8 @@ output_files.insert(output_files.end(), input_deps.begin(), input_deps.end()); std::vector<OutputFile> order_only_deps; - for (const auto& pair : target_->data_deps()) - order_only_deps.push_back(pair.ptr->dependency_output_file()); + for (const Target* data_dep : resolved().GetDataDeps(target_)) + order_only_deps.push_back(data_dep->dependency_output_file()); WriteStampForTarget(output_files, order_only_deps); }
diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc index 1ef0475..c0f73b8 100644 --- a/src/gn/ninja_c_binary_target_writer.cc +++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -83,7 +83,9 @@ return nullptr; } -std::vector<ModuleDep> GetModuleDepsInformation(const Target* target) { +std::vector<ModuleDep> GetModuleDepsInformation( + const Target* target, + const ResolvedTargetData& resolved) { std::vector<ModuleDep> ret; auto add = [&ret](const Target* t, bool is_self) { @@ -107,10 +109,10 @@ add(target, true); } - for (const auto& pair: target->GetDeps(Target::DEPS_LINKED)) { + for (const Target* dep : resolved.GetLinkedDeps(target)) { // Having a .modulemap source means that the dependency is modularized. - if (pair.ptr->source_types_used().Get(SourceFile::SOURCE_MODULEMAP)) { - add(pair.ptr, false); + if (dep->source_types_used().Get(SourceFile::SOURCE_MODULEMAP)) { + add(dep, false); } } @@ -127,7 +129,8 @@ NinjaCBinaryTargetWriter::~NinjaCBinaryTargetWriter() = default; void NinjaCBinaryTargetWriter::Run() { - std::vector<ModuleDep> module_dep_info = GetModuleDepsInformation(target_); + std::vector<ModuleDep> module_dep_info = + GetModuleDepsInformation(target_, resolved()); WriteCompilerVars(module_dep_info);
diff --git a/src/gn/ninja_copy_target_writer.cc b/src/gn/ninja_copy_target_writer.cc index 9299223..8a95cea 100644 --- a/src/gn/ninja_copy_target_writer.cc +++ b/src/gn/ninja_copy_target_writer.cc
@@ -74,8 +74,8 @@ std::vector<const Target*>(), num_stamp_uses); std::vector<OutputFile> data_outs; - for (const auto& dep : target_->data_deps()) - data_outs.push_back(dep.ptr->dependency_output_file()); + for (const Target* data_dep : resolved().GetDataDeps(target_)) + data_outs.push_back(data_dep->dependency_output_file()); // Note that we don't write implicit deps for copy steps. "copy" only // depends on the output files themselves, rather than having includes
diff --git a/src/gn/ninja_create_bundle_target_writer.cc b/src/gn/ninja_create_bundle_target_writer.cc index d05f5f0..23936ab 100644 --- a/src/gn/ninja_create_bundle_target_writer.cc +++ b/src/gn/ninja_create_bundle_target_writer.cc
@@ -89,8 +89,8 @@ WriteCompileAssetsCatalogStep(order_only_deps, &output_files); WriteCodeSigningStep(code_signing_rule_name, order_only_deps, &output_files); - for (const auto& pair : target_->data_deps()) - order_only_deps.push_back(pair.ptr->dependency_output_file()); + for (const Target* data_dep : resolved().GetDataDeps(target_)) + order_only_deps.push_back(data_dep->dependency_output_file()); WriteStampForTarget(output_files, order_only_deps); // Write a phony target for the outer bundle directory. This allows other
diff --git a/src/gn/ninja_generated_file_target_writer.cc b/src/gn/ninja_generated_file_target_writer.cc index 3e07090..1abdc05 100644 --- a/src/gn/ninja_generated_file_target_writer.cc +++ b/src/gn/ninja_generated_file_target_writer.cc
@@ -31,17 +31,17 @@ // done at gen time, and so ninja doesn't need to know about it. std::vector<OutputFile> output_files; std::vector<OutputFile> data_output_files; - for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) { - if (pair.ptr->IsDataOnly()) { - data_output_files.push_back(pair.ptr->dependency_output_file()); + const auto& target_deps = resolved().GetTargetDeps(target_); + for (const Target* dep : target_deps.linked_deps()) { + if (dep->IsDataOnly()) { + data_output_files.push_back(dep->dependency_output_file()); } else { - output_files.push_back(pair.ptr->dependency_output_file()); + output_files.push_back(dep->dependency_output_file()); } } - const LabelTargetVector& data_deps = target_->data_deps(); - for (const auto& pair : data_deps) - data_output_files.push_back(pair.ptr->dependency_output_file()); + for (const Target* data_dep : target_deps.data_deps()) + data_output_files.push_back(data_dep->dependency_output_file()); WriteStampForTarget(output_files, data_output_files); }
diff --git a/src/gn/ninja_group_target_writer.cc b/src/gn/ninja_group_target_writer.cc index beeb54a..58d6ce7 100644 --- a/src/gn/ninja_group_target_writer.cc +++ b/src/gn/ninja_group_target_writer.cc
@@ -21,17 +21,18 @@ // the deps and data_deps in the group. std::vector<OutputFile> output_files; std::vector<OutputFile> data_output_files; - for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) { - if (pair.ptr->IsDataOnly()) { - data_output_files.push_back(pair.ptr->dependency_output_file()); + const auto& target_deps = resolved().GetTargetDeps(target_); + + for (const Target* dep : target_deps.linked_deps()) { + if (dep->IsDataOnly()) { + data_output_files.push_back(dep->dependency_output_file()); } else { - output_files.push_back(pair.ptr->dependency_output_file()); + output_files.push_back(dep->dependency_output_file()); } } - const LabelTargetVector& data_deps = target_->data_deps(); - for (const auto& pair : data_deps) - data_output_files.push_back(pair.ptr->dependency_output_file()); + for (const Target* data_dep : target_deps.data_deps()) + data_output_files.push_back(data_dep->dependency_output_file()); WriteStampForTarget(output_files, data_output_files); }