Move RustValues::transitive_libs_ to Target::rust_transitive_libs_ This field is used by all targets, even if it is only useful to generate the build commands for final Rust targets. This prepares for moving Target::rust_values_ into an std::unique_pointer<> in a future CL. Change-Id: I1154ac1da5980b80440ad5f99602c1149bc97c20 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/12400 Reviewed-by: Dirk Pranke <dpranke@google.com> Reviewed-by: Petr Hosek <phosek@google.com> Reviewed-by: Brett Wilson <brettw@chromium.org> Commit-Queue: David Turner <digit@google.com>
diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc index d9c3ad2..376c943 100644 --- a/src/gn/ninja_c_binary_target_writer.cc +++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -780,8 +780,7 @@ // entire tree of transitive rlibs. std::vector<OutputFile> transitive_rustlibs; if (target_->IsFinal()) { - for (const auto* dep : - target_->rust_values().transitive_libs().GetOrdered()) { + for (const auto* dep : target_->rust_transitive_libs().GetOrdered()) { if (dep->output_type() == Target::RUST_LIBRARY) { transitive_rustlibs.push_back(dep->dependency_output_file()); implicit_deps.push_back(dep->dependency_output_file());
diff --git a/src/gn/ninja_rust_binary_target_writer.cc b/src/gn/ninja_rust_binary_target_writer.cc index 140fe09..d894681 100644 --- a/src/gn/ninja_rust_binary_target_writer.cc +++ b/src/gn/ninja_rust_binary_target_writer.cc
@@ -178,8 +178,7 @@ // Bubble up the full list of transitive rlib dependencies. std::vector<OutputFile> transitive_rustlibs; - for (const auto* dep : - target_->rust_values().transitive_libs().GetOrdered()) { + for (const auto* dep : target_->rust_transitive_libs().GetOrdered()) { if (dep->source_types_used().RustSourceUsed()) { transitive_rustlibs.push_back(dep->dependency_output_file()); }
diff --git a/src/gn/rust_values.h b/src/gn/rust_values.h index 3185340..d201014 100644 --- a/src/gn/rust_values.h +++ b/src/gn/rust_values.h
@@ -74,16 +74,11 @@ } std::map<Label, std::string>& aliased_deps() { return aliased_deps_; } - // Transitive closure of libraries that are depended on by this target - InheritedLibraries& transitive_libs() { return rust_libs_; } - const InheritedLibraries& transitive_libs() const { return rust_libs_; } - private: std::string crate_name_; SourceFile crate_root_; CrateType crate_type_ = CRATE_AUTO; std::map<Label, std::string> aliased_deps_; - InheritedLibraries rust_libs_; RustValues(const RustValues&) = delete; RustValues& operator=(const RustValues&) = delete;
diff --git a/src/gn/target.cc b/src/gn/target.cc index 7071357..d9c02d3 100644 --- a/src/gn/target.cc +++ b/src/gn/target.cc
@@ -655,13 +655,13 @@ if (dep->output_type() == STATIC_LIBRARY || dep->output_type() == SHARED_LIBRARY || dep->output_type() == RUST_LIBRARY) { - rust_values().transitive_libs().Append(dep, is_public); + rust_transitive_libs_.Append(dep, is_public); // Propagate public dependent libraries. for (const auto& transitive : - dep->rust_values().transitive_libs().GetOrderedAndPublicFlag()) { + dep->rust_transitive_libs_.GetOrderedAndPublicFlag()) { if (transitive.second) { - rust_values().transitive_libs().Append(transitive.first, is_public); + rust_transitive_libs_.Append(transitive.first, is_public); } } } @@ -670,13 +670,13 @@ // handled the same way, whether static or dynamic. if (dep->output_type() == RUST_LIBRARY || RustValues::InferredCrateType(dep) == RustValues::CRATE_DYLIB) { - rust_values().transitive_libs().AppendInherited( - dep->rust_values().transitive_libs(), is_public); + rust_transitive_libs_.AppendInherited(dep->rust_transitive_libs_, + is_public); // If there is a transitive dependency that is not a rust library, place it // in the normal location for (const auto& inherited : - rust_values().transitive_libs().GetOrderedAndPublicFlag()) { + rust_transitive_libs_.GetOrderedAndPublicFlag()) { if (!RustValues::IsRustLibrary(inherited.first)) { inherited_libraries_.Append(inherited.first, inherited.second); } @@ -685,7 +685,7 @@ // We will need to specify the path to find a procedural macro, // but have no need to specify the paths to find its dependencies // as the procedural macro is now a complete .so. - rust_values().transitive_libs().Append(dep, is_public); + rust_transitive_libs_.Append(dep, is_public); } else if (dep->output_type() == SHARED_LIBRARY) { // Shared library dependendencies are inherited across public shared // library boundaries. @@ -713,8 +713,8 @@ // The current target isn't linked, so propagate linked deps and // libraries up the dependency tree. inherited_libraries_.AppendInherited(dep->inherited_libraries(), is_public); - rust_values().transitive_libs().AppendInherited( - dep->rust_values().transitive_libs(), is_public); + rust_transitive_libs_.AppendInherited(dep->rust_transitive_libs_, + is_public); } else if (dep->complete_static_lib()) { // Inherit only final targets through _complete_ static libraries. //
diff --git a/src/gn/target.h b/src/gn/target.h index 293d53c..fec9731 100644 --- a/src/gn/target.h +++ b/src/gn/target.h
@@ -284,6 +284,12 @@ RustValues& rust_values() { return rust_values_; } const RustValues& rust_values() const { return rust_values_; } + // Transitive closure of libraries that are depended on by this target + InheritedLibraries& rust_transitive_libs() { return rust_transitive_libs_; } + const InheritedLibraries& rust_transitive_libs() const { + return rust_transitive_libs_; + } + const UniqueVector<SourceDir>& all_lib_dirs() const { return all_lib_dirs_; } const UniqueVector<LibFile>& all_libs() const { return all_libs_; } @@ -485,6 +491,9 @@ // Used for Rust targets. RustValues rust_values_; + // Used by all targets, only useful to generate Rust targets though. + InheritedLibraries rust_transitive_libs_; + // User for Swift targets. SwiftValues swift_values_;