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

Unified Diff: tools/gn/visual_studio_writer.cc

Issue 2060613002: Generate VS projects also for target dependencies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update docs for --filters, older GN changes Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/docs/reference.md ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/visual_studio_writer.cc
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index 7dedd4d302066e1778bf3128e87ac9f86aa98599..401782f5217434c4d6965e5211e54c71ea4ed8b9 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -8,6 +8,7 @@
#include <iterator>
#include <map>
#include <memory>
+#include <queue>
#include <set>
#include <string>
@@ -18,6 +19,7 @@
#include "tools/gn/commands.h"
#include "tools/gn/config.h"
#include "tools/gn/config_values_extractors.h"
+#include "tools/gn/deps_iterator.h"
#include "tools/gn/filesystem_utils.h"
#include "tools/gn/label_pattern.h"
#include "tools/gn/parse_tree.h"
@@ -163,6 +165,46 @@ base::StringPiece FindParentDir(const std::string* path) {
return base::StringPiece();
}
+bool FilterTargets(const BuildSettings* build_settings,
+ Builder* builder,
+ const std::string& dir_filters,
+ std::vector<const Target*>* targets,
+ Err* err) {
+ if (dir_filters.empty()) {
+ *targets = builder->GetAllResolvedTargets();
+ return true;
+ }
+
+ std::vector<LabelPattern> filters;
+ if (!commands::FilterPatternsFromString(build_settings, dir_filters, &filters,
+ err))
+ return false;
+
+ commands::FilterTargetsByPatterns(builder->GetAllResolvedTargets(), filters,
+ targets);
+
+ std::set<Label> labels;
+ std::queue<const Target*> to_process;
+ for (const Target* target : *targets) {
+ labels.insert(target->label());
+ to_process.push(target);
+ }
+
+ while (!to_process.empty()) {
+ const Target* target = to_process.front();
+ to_process.pop();
+ for (const auto& pair : target->GetDeps(Target::DEPS_ALL)) {
+ if (labels.find(pair.label) == labels.end()) {
+ targets->push_back(pair.ptr);
+ to_process.push(pair.ptr);
+ labels.insert(pair.label);
+ }
+ }
+ }
+
+ return true;
+}
+
} // namespace
VisualStudioWriter::SolutionEntry::SolutionEntry(const std::string& _name,
@@ -233,18 +275,8 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings,
const std::string& dir_filters,
Err* err) {
std::vector<const Target*> targets;
- if (dir_filters.empty()) {
- targets = builder->GetAllResolvedTargets();
- } else {
- std::vector<LabelPattern> filters;
- if (!commands::FilterPatternsFromString(build_settings, dir_filters,
- &filters, err)) {
- return false;
- }
-
- commands::FilterTargetsByPatterns(builder->GetAllResolvedTargets(), filters,
- &targets);
- }
+ if (!FilterTargets(build_settings, builder, dir_filters, &targets, err))
+ return false;
const char* config_platform = "Win32";
« no previous file with comments | « tools/gn/docs/reference.md ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698