summaryrefslogtreecommitdiffstats
path: root/tools/gn
diff options
context:
space:
mode:
authorngg <ngg@ngg.hu>2016-02-22 15:18:48 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-22 23:19:54 +0000
commitd0bc0fa329d753da4fb333c572361f575411b8a7 (patch)
tree596cc894bd1f89127cadeea1880ebb2857a90f5e /tools/gn
parent8a3b2484a53a49edcce869471de32a35a85a685a (diff)
downloadchromium_src-d0bc0fa329d753da4fb333c572361f575411b8a7.zip
chromium_src-d0bc0fa329d753da4fb333c572361f575411b8a7.tar.gz
chromium_src-d0bc0fa329d753da4fb333c572361f575411b8a7.tar.bz2
GN support for generating VS2013 project files
Optional Visual Studio version can now be specified for "gn gen". The default remains Visual Studio 2015. BUG= Review URL: https://codereview.chromium.org/1713363002 Cr-Commit-Position: refs/heads/master@{#376849}
Diffstat (limited to 'tools/gn')
-rw-r--r--tools/gn/command_gen.cc22
-rw-r--r--tools/gn/visual_studio_writer.cc35
-rw-r--r--tools/gn/visual_studio_writer.h18
-rw-r--r--tools/gn/visual_studio_writer_unittest.cc6
4 files changed, 65 insertions, 16 deletions
diff --git a/tools/gn/command_gen.cc b/tools/gn/command_gen.cc
index 7ba7789..b5ffc14 100644
--- a/tools/gn/command_gen.cc
+++ b/tools/gn/command_gen.cc
@@ -29,6 +29,8 @@ const char kSwitchCheck[] = "check";
const char kSwitchIde[] = "ide";
const char kSwitchIdeValueEclipse[] = "eclipse";
const char kSwitchIdeValueVs[] = "vs";
+const char kSwitchIdeValueVs2013[] = "vs2013";
+const char kSwitchIdeValueVs2015[] = "vs2015";
// Called on worker thread to write the ninja file.
void BackgroundDoWrite(const Target* target) {
@@ -156,15 +158,20 @@ bool RunIdeWriter(const std::string& ide,
base::ElapsedTimer timer;
if (ide == kSwitchIdeValueEclipse) {
bool res = EclipseWriter::RunAndWriteFile(build_settings, builder, err);
- if (res) {
+ if (res &&
+ !base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kQuiet)) {
OutputString("Generating Eclipse settings took " +
base::Int64ToString(timer.Elapsed().InMilliseconds()) +
"ms\n");
}
return res;
- } else if (ide == kSwitchIdeValueVs) {
- bool res =
- VisualStudioWriter::RunAndWriteFiles(build_settings, builder, err);
+ } else if (ide == kSwitchIdeValueVs || ide == kSwitchIdeValueVs2013 ||
+ ide == kSwitchIdeValueVs2015) {
+ VisualStudioWriter::Version version =
+ ide == kSwitchIdeValueVs2013 ? VisualStudioWriter::Version::Vs2013
+ : VisualStudioWriter::Version::Vs2015;
+ bool res = VisualStudioWriter::RunAndWriteFiles(build_settings, builder,
+ version, err);
if (res &&
!base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kQuiet)) {
OutputString("Generating Visual Studio projects took " +
@@ -198,8 +205,11 @@ const char kGen_Help[] =
"\n"
" --ide=<ide_name>\n"
" Also generate files for an IDE. Currently supported values:\n"
- " 'vs' - Visual Studio project/solution files.\n"
- " 'eclipse' - Eclipse CDT settings file.\n"
+ " \"eclipse\" - Eclipse CDT settings file.\n"
+ " \"vs\" - Visual Studio project/solution files.\n"
+ " (default Visual Studio version: 2015)\n"
+ " \"vs2013\" - Visual Studio 2013 project/solution files.\n"
+ " \"vs2015\" - Visual Studio 2015 project/solution files.\n"
"\n"
" See \"gn help switches\" for the common command-line switches.\n"
"\n"
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index dec0837..b0392b4 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -64,8 +64,12 @@ struct SourceFileWriter {
const SourceFile& source_file_;
};
-const char kToolsetVersion[] = "v140"; // Visual Studio 2015
-const char kVisualStudioVersion[] = "14.0"; // Visual Studio 2015
+const char kToolsetVersionVs2013[] = "v120"; // Visual Studio 2013
+const char kToolsetVersionVs2015[] = "v140"; // Visual Studio 2015
+const char kProjectVersionVs2013[] = "12.0"; // Visual Studio 2013
+const char kProjectVersionVs2015[] = "14.0"; // Visual Studio 2015
+const char kVersionStringVs2013[] = "Visual Studio 2013"; // Visual Studio 2013
+const char kVersionStringVs2015[] = "Visual Studio 2015"; // Visual Studio 2015
const char kWindowsKitsVersion[] = "10"; // Windows 10 SDK
const char kWindowsKitsIncludeVersion[] = "10.0.10240.0"; // Windows 10 SDK
@@ -173,7 +177,8 @@ VisualStudioWriter::SolutionProject::SolutionProject(
VisualStudioWriter::SolutionProject::~SolutionProject() = default;
-VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings)
+VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings,
+ Version version)
: build_settings_(build_settings) {
const Value* value = build_settings->build_args().GetArgOverride("is_debug");
is_debug_config_ = value == nullptr || value->boolean_value();
@@ -182,6 +187,21 @@ VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings)
if (value != nullptr && value->string_value() == "x64")
config_platform_ = "x64";
+ switch (version) {
+ case Version::Vs2013:
+ project_version_ = kProjectVersionVs2013;
+ toolset_version_ = kToolsetVersionVs2013;
+ version_string_ = kVersionStringVs2013;
+ break;
+ case Version::Vs2015:
+ project_version_ = kProjectVersionVs2015;
+ toolset_version_ = kToolsetVersionVs2015;
+ version_string_ = kVersionStringVs2015;
+ break;
+ default:
+ NOTREACHED() << "Not a valid Visual Studio Version: " << version;
+ }
+
windows_kits_include_dirs_ = GetWindowsKitsIncludeDirs();
}
@@ -193,10 +213,11 @@ VisualStudioWriter::~VisualStudioWriter() {
// static
bool VisualStudioWriter::RunAndWriteFiles(const BuildSettings* build_settings,
Builder* builder,
+ Version version,
Err* err) {
std::vector<const Target*> targets = builder->GetAllResolvedTargets();
- VisualStudioWriter writer(build_settings);
+ VisualStudioWriter writer(build_settings, version);
writer.projects_.reserve(targets.size());
writer.folders_.reserve(targets.size());
@@ -290,7 +311,7 @@ bool VisualStudioWriter::WriteProjectFileContents(
XmlElementWriter project(
out, "Project",
XmlAttributes("DefaultTargets", "Build")
- .add("ToolsVersion", kVisualStudioVersion)
+ .add("ToolsVersion", project_version_)
.add("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003"));
{
@@ -333,7 +354,7 @@ bool VisualStudioWriter::WriteProjectFileContents(
{
scoped_ptr<XmlElementWriter> locals =
project.SubElement("PropertyGroup", XmlAttributes("Label", "Locals"));
- locals->SubElement("PlatformToolset")->Text(kToolsetVersion);
+ locals->SubElement("PlatformToolset")->Text(toolset_version_);
}
project.SubElement(
@@ -580,7 +601,7 @@ void VisualStudioWriter::WriteSolutionFileContents(
const base::FilePath& solution_dir_path) {
out << "Microsoft Visual Studio Solution File, Format Version 12.00"
<< std::endl;
- out << "# Visual Studio 2015" << std::endl;
+ out << "# " << version_string_ << std::endl;
SourceDir solution_dir(FilePathToUTF8(solution_dir_path));
for (const SolutionEntry* folder : folders_) {
diff --git a/tools/gn/visual_studio_writer.h b/tools/gn/visual_studio_writer.h
index bd94f92..0409220 100644
--- a/tools/gn/visual_studio_writer.h
+++ b/tools/gn/visual_studio_writer.h
@@ -23,9 +23,15 @@ class Target;
class VisualStudioWriter {
public:
+ enum Version {
+ Vs2013 = 1, // Visual Studio 2013
+ Vs2015 // Visual Studio 2015
+ };
+
// On failure will populate |err| and will return false.
static bool RunAndWriteFiles(const BuildSettings* build_settings,
Builder* builder,
+ Version version,
Err* err);
private:
@@ -67,7 +73,8 @@ class VisualStudioWriter {
using SolutionProjects = std::vector<SolutionProject*>;
using SolutionFolders = std::vector<SolutionEntry*>;
- explicit VisualStudioWriter(const BuildSettings* build_settings);
+ explicit VisualStudioWriter(const BuildSettings* build_settings,
+ Version version);
~VisualStudioWriter();
bool WriteProjectFiles(const Target* target, Err* err);
@@ -86,6 +93,15 @@ class VisualStudioWriter {
const BuildSettings* build_settings_;
+ // Toolset version.
+ const char* toolset_version_;
+
+ // Project version.
+ const char* project_version_;
+
+ // Visual Studio version string.
+ const char* version_string_;
+
// Indicates if project files are generated for Debug mode configuration.
bool is_debug_config_;
diff --git a/tools/gn/visual_studio_writer_unittest.cc b/tools/gn/visual_studio_writer_unittest.cc
index 91c7089..1675e4f 100644
--- a/tools/gn/visual_studio_writer_unittest.cc
+++ b/tools/gn/visual_studio_writer_unittest.cc
@@ -26,7 +26,8 @@ std::string MakeTestPath(const std::string& path) {
} // namespace
TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) {
- VisualStudioWriter writer(setup_.build_settings());
+ VisualStudioWriter writer(setup_.build_settings(),
+ VisualStudioWriter::Version::Vs2015);
std::string path =
MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj");
@@ -79,7 +80,8 @@ TEST_F(VisualStudioWriterTest, ResolveSolutionFolders) {
}
TEST_F(VisualStudioWriterTest, ResolveSolutionFolders_AbsPath) {
- VisualStudioWriter writer(setup_.build_settings());
+ VisualStudioWriter writer(setup_.build_settings(),
+ VisualStudioWriter::Version::Vs2015);
std::string path =
MakeTestPath("/foo/chromium/src/out/Debug/obj/base/base.vcxproj");