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

Unified Diff: tools/gn/visual_studio_writer.cc

Issue 1733023002: GN: Fix CPU detection in Visual Studio generator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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/visual_studio_writer.h ('k') | tools/gn/visual_studio_writer_unittest.cc » ('j') | 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 a404461c79b1353643de6cb01272b98d48f253c3..2c454d22202aa1f5eb02c8323a23e41b48bc645e 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -178,18 +178,15 @@ VisualStudioWriter::SolutionProject::SolutionProject(
VisualStudioWriter::SolutionProject::~SolutionProject() = default;
VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings,
+ bool is_debug_config,
+ const char* config_platform,
Version version)
: build_settings_(build_settings),
+ is_debug_config_(is_debug_config),
+ config_platform_(config_platform),
ninja_path_output_(build_settings->build_dir(),
build_settings->root_path_utf8(),
EscapingMode::ESCAPE_NINJA_COMMAND) {
- const Value* value = build_settings->build_args().GetArgOverride("is_debug");
- is_debug_config_ = value == nullptr || value->boolean_value();
- config_platform_ = "Win32";
- value = build_settings->build_args().GetArgOverride(variables::kTargetCpu);
- if (value != nullptr && value->string_value() == "x64")
- config_platform_ = "x64";
-
switch (version) {
case Version::Vs2013:
project_version_ = kProjectVersionVs2013;
@@ -220,7 +217,24 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings,
Err* err) {
std::vector<const Target*> targets = builder->GetAllResolvedTargets();
- VisualStudioWriter writer(build_settings, version);
+ bool is_debug_config = true;
+ const char* config_platform = "Win32";
+
+ // Assume the "is_debug" and "target_cpu" variables do not change
+ // between different toolchains.
brettw 2016/02/24 21:51:48 This is not the case (CPU does change between tool
NGG 2016/02/24 22:19:15 Cross-compiles work with this if only the "current
brettw 2016/02/24 23:38:15 Oh, I missed "target" and I thought you were talki
+ if (!targets.empty()) {
+ const Scope* scope = targets.front()->settings()->base_config();
+ const Value* is_debug_value = scope->GetValue("is_debug");
brettw 2016/02/24 21:51:48 "is_debug" is a variable in the Chrome build, not
NGG 2016/02/24 22:19:15 +1 for this. It could be called "GN". I don't know
Tomasz Moniuszko 2016/02/25 11:06:14 Visual Studio allows to rename configuration to an
+ is_debug_config =
+ is_debug_value == nullptr || is_debug_value->boolean_value();
+ const Value* target_cpu_value = scope->GetValue(variables::kTargetCpu);
+ if (target_cpu_value != nullptr &&
+ target_cpu_value->string_value() == "x64")
+ config_platform = "x64";
+ }
+
+ VisualStudioWriter writer(build_settings, is_debug_config, config_platform,
+ version);
writer.projects_.reserve(targets.size());
writer.folders_.reserve(targets.size());
@@ -255,16 +269,14 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings,
bool VisualStudioWriter::WriteProjectFiles(const Target* target, Err* err) {
std::string project_name = target->label().name();
- std::string project_config_platform = config_platform_;
+ const char* project_config_platform = config_platform_;
if (!target->settings()->is_default()) {
project_name += "_" + target->toolchain()->label().name();
- project_config_platform = target->toolchain()
- ->settings()
- ->build_settings()
- ->build_args()
- .GetArgOverride(variables::kCurrentCpu)
- ->string_value();
- if (project_config_platform == "x86")
+ const Value* value =
+ target->settings()->base_config()->GetValue(variables::kCurrentCpu);
+ if (value != nullptr && value->string_value() == "x64")
+ project_config_platform = "x64";
+ else
project_config_platform = "Win32";
}
« no previous file with comments | « tools/gn/visual_studio_writer.h ('k') | tools/gn/visual_studio_writer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698