Commit 8480d866 authored by Andrew Boyarshin's avatar Andrew Boyarshin Committed by Commit Bot

tools/gn: Implement Windows SDK version command line switch

Windows SDK command line switch enables ability to browse source code
smoothly in Visual Studio using various installed Windows SDK versions.

BUG=634788

Change-Id: I64af058a0ccfd10a189cda61938a9ec7b5f9c60d
Reviewed-on: https://chromium-review.googlesource.com/535639Reviewed-by: default avatarDirk Pranke <dpranke@chromium.org>
Reviewed-by: default avatarBruce Dawson <brucedawson@chromium.org>
Commit-Queue: Dirk Pranke <dpranke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#480307}
parent f104ee4d
...@@ -58,6 +58,7 @@ Ancil George <ancilgeorge@samsung.com> ...@@ -58,6 +58,7 @@ Ancil George <ancilgeorge@samsung.com>
Andra Paraschiv <andra.paraschiv@intel.com> Andra Paraschiv <andra.paraschiv@intel.com>
Andrei Parvu <andrei.prv@gmail.com> Andrei Parvu <andrei.prv@gmail.com>
Andrei Parvu <parvu@adobe.com> Andrei Parvu <parvu@adobe.com>
Andrew Boyarshin <andrew.boyarshin@gmail.com>
Andrew Brampton <me@bramp.net> Andrew Brampton <me@bramp.net>
Andrew Hung <andrhung@amazon.com> Andrew Hung <andrhung@amazon.com>
Andrew MacPherson <andrew.macpherson@soundtrap.com> Andrew MacPherson <andrew.macpherson@soundtrap.com>
......
...@@ -37,6 +37,7 @@ const char kSwitchIdeValueVs[] = "vs"; ...@@ -37,6 +37,7 @@ const char kSwitchIdeValueVs[] = "vs";
const char kSwitchIdeValueVs2013[] = "vs2013"; const char kSwitchIdeValueVs2013[] = "vs2013";
const char kSwitchIdeValueVs2015[] = "vs2015"; const char kSwitchIdeValueVs2015[] = "vs2015";
const char kSwitchIdeValueVs2017[] = "vs2017"; const char kSwitchIdeValueVs2017[] = "vs2017";
const char kSwitchIdeValueWinSdk[] = "winsdk";
const char kSwitchIdeValueXcode[] = "xcode"; const char kSwitchIdeValueXcode[] = "xcode";
const char kSwitchIdeValueJson[] = "json"; const char kSwitchIdeValueJson[] = "json";
const char kSwitchNinjaExtraArgs[] = "ninja-extra-args"; const char kSwitchNinjaExtraArgs[] = "ninja-extra-args";
...@@ -207,9 +208,13 @@ bool RunIdeWriter(const std::string& ide, ...@@ -207,9 +208,13 @@ bool RunIdeWriter(const std::string& ide,
std::string filters; std::string filters;
if (command_line->HasSwitch(kSwitchFilters)) if (command_line->HasSwitch(kSwitchFilters))
filters = command_line->GetSwitchValueASCII(kSwitchFilters); filters = command_line->GetSwitchValueASCII(kSwitchFilters);
std::string win_kit;
if (command_line->HasSwitch(kSwitchIdeValueWinSdk))
win_kit = command_line->GetSwitchValueASCII(kSwitchIdeValueWinSdk);
bool no_deps = command_line->HasSwitch(kSwitchNoDeps); bool no_deps = command_line->HasSwitch(kSwitchNoDeps);
bool res = VisualStudioWriter::RunAndWriteFiles( bool res = VisualStudioWriter::RunAndWriteFiles(build_settings, builder,
build_settings, builder, version, sln_name, filters, no_deps, err); version, sln_name, filters,
win_kit, no_deps, err);
if (res && !quiet) { if (res && !quiet) {
OutputString("Generating Visual Studio projects took " + OutputString("Generating Visual Studio projects took " +
base::Int64ToString(timer.Elapsed().InMilliseconds()) + base::Int64ToString(timer.Elapsed().InMilliseconds()) +
...@@ -321,6 +326,11 @@ Visual Studio Flags ...@@ -321,6 +326,11 @@ Visual Studio Flags
Don't include targets dependencies to the solution. Changes the way how Don't include targets dependencies to the solution. Changes the way how
--filters option works. Only directly matching targets are included. --filters option works. Only directly matching targets are included.
--winsdk=<sdk_version>
Use the specified Windows 10 SDK version to generate project files.
As an example, "10.0.15063.0" can be specified to use Creators Update SDK
instead of the default one.
Xcode Flags Xcode Flags
--workspace=<file_name> --workspace=<file_name>
......
...@@ -74,12 +74,12 @@ const char kToolsetVersionVs2015[] = "v140"; // Visual Studio 2015 ...@@ -74,12 +74,12 @@ const char kToolsetVersionVs2015[] = "v140"; // Visual Studio 2015
const char kToolsetVersionVs2017[] = "v141"; // Visual Studio 2017 const char kToolsetVersionVs2017[] = "v141"; // Visual Studio 2017
const char kProjectVersionVs2013[] = "12.0"; // Visual Studio 2013 const char kProjectVersionVs2013[] = "12.0"; // Visual Studio 2013
const char kProjectVersionVs2015[] = "14.0"; // Visual Studio 2015 const char kProjectVersionVs2015[] = "14.0"; // Visual Studio 2015
const char kProjectVersionVs2017[] = "15.0"; // Visual Studio 2015 const char kProjectVersionVs2017[] = "15.0"; // Visual Studio 2017
const char kVersionStringVs2013[] = "Visual Studio 2013"; // Visual Studio 2013 const char kVersionStringVs2013[] = "Visual Studio 2013"; // Visual Studio 2013
const char kVersionStringVs2015[] = "Visual Studio 2015"; // Visual Studio 2015 const char kVersionStringVs2015[] = "Visual Studio 2015"; // Visual Studio 2015
const char kVersionStringVs2017[] = "Visual Studio 2017"; // Visual Studio 2017 const char kVersionStringVs2017[] = "Visual Studio 2017"; // Visual Studio 2017
const char kWindowsKitsVersion[] = "10"; // Windows 10 SDK const char kWindowsKitsVersion[] = "10"; // Windows 10 SDK
const char kWindowsKitsIncludeVersion[] = "10.0.14393.0"; // Windows 10 SDK const char kWindowsKitsDefaultVersion[] = "10.0.14393.0"; // Windows 10 SDK
const char kGuidTypeProject[] = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"; const char kGuidTypeProject[] = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}";
const char kGuidTypeFolder[] = "{2150E333-8FDC-42A3-9474-1A3956D46DE8}"; const char kGuidTypeFolder[] = "{2150E333-8FDC-42A3-9474-1A3956D46DE8}";
...@@ -89,7 +89,7 @@ const char kGuidSeedFilter[] = "filter"; ...@@ -89,7 +89,7 @@ const char kGuidSeedFilter[] = "filter";
const char kConfigurationName[] = "GN"; const char kConfigurationName[] = "GN";
std::string GetWindowsKitsIncludeDirs() { std::string GetWindowsKitsIncludeDirs(const std::string& win_kit) {
std::string kits_path; std::string kits_path;
#if defined(OS_WIN) #if defined(OS_WIN)
...@@ -115,9 +115,8 @@ std::string GetWindowsKitsIncludeDirs() { ...@@ -115,9 +115,8 @@ std::string GetWindowsKitsIncludeDirs() {
kWindowsKitsVersion + "\\"; kWindowsKitsVersion + "\\";
} }
return kits_path + "Include\\" + kWindowsKitsIncludeVersion + "\\shared;" + const std::string kit_prefix = kits_path + "Include\\" + win_kit + "\\";
kits_path + "Include\\" + kWindowsKitsIncludeVersion + "\\um;" + return kit_prefix + "shared;" + kit_prefix + "um;" + kit_prefix + "winrt;";
kits_path + "Include\\" + kWindowsKitsIncludeVersion + "\\winrt;";
} }
std::string GetConfigurationType(const Target* target, Err* err) { std::string GetConfigurationType(const Target* target, Err* err) {
...@@ -259,12 +258,16 @@ VisualStudioWriter::SourceFileCompileTypePair::~SourceFileCompileTypePair() = ...@@ -259,12 +258,16 @@ VisualStudioWriter::SourceFileCompileTypePair::~SourceFileCompileTypePair() =
VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings, VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings,
const char* config_platform, const char* config_platform,
Version version) Version version,
const std::string& win_kit)
: build_settings_(build_settings), : build_settings_(build_settings),
config_platform_(config_platform), config_platform_(config_platform),
ninja_path_output_(build_settings->build_dir(), ninja_path_output_(build_settings->build_dir(),
build_settings->root_path_utf8(), build_settings->root_path_utf8(),
EscapingMode::ESCAPE_NINJA_COMMAND) { EscapingMode::ESCAPE_NINJA_COMMAND),
windows_sdk_version_(win_kit) {
DCHECK(!win_kit.empty());
switch (version) { switch (version) {
case Version::Vs2013: case Version::Vs2013:
project_version_ = kProjectVersionVs2013; project_version_ = kProjectVersionVs2013;
...@@ -285,7 +288,7 @@ VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings, ...@@ -285,7 +288,7 @@ VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings,
NOTREACHED() << "Not a valid Visual Studio Version: " << version; NOTREACHED() << "Not a valid Visual Studio Version: " << version;
} }
windows_kits_include_dirs_ = GetWindowsKitsIncludeDirs(); windows_kits_include_dirs_ = GetWindowsKitsIncludeDirs(win_kit);
} }
VisualStudioWriter::~VisualStudioWriter() { VisualStudioWriter::~VisualStudioWriter() {
...@@ -297,12 +300,17 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings, ...@@ -297,12 +300,17 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings,
Version version, Version version,
const std::string& sln_name, const std::string& sln_name,
const std::string& filters, const std::string& filters,
const std::string& win_sdk,
bool no_deps, bool no_deps,
Err* err) { Err* err) {
std::vector<const Target*> targets; std::vector<const Target*> targets;
if (!FilterTargets(build_settings, builder, filters, no_deps, &targets, err)) if (!FilterTargets(build_settings, builder, filters, no_deps, &targets, err))
return false; return false;
std::string win_kit = kWindowsKitsDefaultVersion;
if (!win_sdk.empty())
win_kit = win_sdk;
const char* config_platform = "Win32"; const char* config_platform = "Win32";
// Assume the "target_cpu" variable does not change between different // Assume the "target_cpu" variable does not change between different
...@@ -315,7 +323,7 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings, ...@@ -315,7 +323,7 @@ bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings,
config_platform = "x64"; config_platform = "x64";
} }
VisualStudioWriter writer(build_settings, config_platform, version); VisualStudioWriter writer(build_settings, config_platform, version, win_kit);
writer.projects_.reserve(targets.size()); writer.projects_.reserve(targets.size());
writer.folders_.reserve(targets.size()); writer.folders_.reserve(targets.size());
...@@ -436,7 +444,7 @@ bool VisualStudioWriter::WriteProjectFileContents( ...@@ -436,7 +444,7 @@ bool VisualStudioWriter::WriteProjectFileContents(
globals->SubElement("IgnoreWarnCompileDuplicatedFilename")->Text("true"); globals->SubElement("IgnoreWarnCompileDuplicatedFilename")->Text("true");
globals->SubElement("PreferredToolArchitecture")->Text("x64"); globals->SubElement("PreferredToolArchitecture")->Text("x64");
globals->SubElement("WindowsTargetPlatformVersion") globals->SubElement("WindowsTargetPlatformVersion")
->Text(kWindowsKitsIncludeVersion); ->Text(windows_sdk_version_);
} }
project.SubElement( project.SubElement(
......
...@@ -37,12 +37,14 @@ class VisualStudioWriter { ...@@ -37,12 +37,14 @@ class VisualStudioWriter {
// semicolon-separated list of label patterns used to limit the set of // semicolon-separated list of label patterns used to limit the set of
// generated projects. Only matching targets and their dependencies (unless // generated projects. Only matching targets and their dependencies (unless
// |no_deps| is true) will be included to the solution. On failure will // |no_deps| is true) will be included to the solution. On failure will
// populate |err| and will return false. // populate |err| and will return false. |win_sdk| is the Windows SDK version
// which will be used by Visual Studio IntelliSense.
static bool RunAndWriteFiles(const BuildSettings* build_settings, static bool RunAndWriteFiles(const BuildSettings* build_settings,
const Builder& builder, const Builder& builder,
Version version, Version version,
const std::string& sln_name, const std::string& sln_name,
const std::string& filters, const std::string& filters,
const std::string& win_sdk,
bool no_deps, bool no_deps,
Err* err); Err* err);
...@@ -98,7 +100,8 @@ class VisualStudioWriter { ...@@ -98,7 +100,8 @@ class VisualStudioWriter {
VisualStudioWriter(const BuildSettings* build_settings, VisualStudioWriter(const BuildSettings* build_settings,
const char* config_platform, const char* config_platform,
Version version); Version version,
const std::string& win_kit);
~VisualStudioWriter(); ~VisualStudioWriter();
bool WriteProjectFiles(const Target* target, Err* err); bool WriteProjectFiles(const Target* target, Err* err);
...@@ -150,6 +153,9 @@ class VisualStudioWriter { ...@@ -150,6 +153,9 @@ class VisualStudioWriter {
// Path formatter for ninja targets. // Path formatter for ninja targets.
PathOutput ninja_path_output_; PathOutput ninja_path_output_;
// Windows 10 SDK version string (e.g. 10.0.14393.0)
std::string windows_sdk_version_;
DISALLOW_COPY_AND_ASSIGN(VisualStudioWriter); DISALLOW_COPY_AND_ASSIGN(VisualStudioWriter);
}; };
......
...@@ -28,7 +28,8 @@ std::string MakeTestPath(const std::string& path) { ...@@ -28,7 +28,8 @@ std::string MakeTestPath(const std::string& path) {
TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) { TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) {
VisualStudioWriter writer(setup_.build_settings(), "Win32", VisualStudioWriter writer(setup_.build_settings(), "Win32",
VisualStudioWriter::Version::Vs2015); VisualStudioWriter::Version::Vs2015,
"10.0.14393.0");
std::string path = std::string path =
MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj"); MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj");
...@@ -82,7 +83,8 @@ TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) { ...@@ -82,7 +83,8 @@ TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) {
TEST_F(VisualStudioWriterTest, ResolveSolutionFolders_AbsPath) { TEST_F(VisualStudioWriterTest, ResolveSolutionFolders_AbsPath) {
VisualStudioWriter writer(setup_.build_settings(), "Win32", VisualStudioWriter writer(setup_.build_settings(), "Win32",
VisualStudioWriter::Version::Vs2015); VisualStudioWriter::Version::Vs2015,
"10.0.14393.0");
std::string path = std::string path =
MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj"); MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment