OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/visual_studio_writer.h" | 5 #include "tools/gn/visual_studio_writer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 const std::string& _label_dir_path, | 172 const std::string& _label_dir_path, |
173 const std::string& _config_platform) | 173 const std::string& _config_platform) |
174 : SolutionEntry(_name, _path, _guid), | 174 : SolutionEntry(_name, _path, _guid), |
175 label_dir_path(_label_dir_path), | 175 label_dir_path(_label_dir_path), |
176 config_platform(_config_platform) {} | 176 config_platform(_config_platform) {} |
177 | 177 |
178 VisualStudioWriter::SolutionProject::~SolutionProject() = default; | 178 VisualStudioWriter::SolutionProject::~SolutionProject() = default; |
179 | 179 |
180 VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings, | 180 VisualStudioWriter::VisualStudioWriter(const BuildSettings* build_settings, |
181 Version version) | 181 Version version) |
182 : build_settings_(build_settings) { | 182 : build_settings_(build_settings), |
| 183 ninja_path_output_(build_settings->build_dir(), |
| 184 build_settings->root_path_utf8(), |
| 185 EscapingMode::ESCAPE_NINJA_COMMAND) { |
183 const Value* value = build_settings->build_args().GetArgOverride("is_debug"); | 186 const Value* value = build_settings->build_args().GetArgOverride("is_debug"); |
184 is_debug_config_ = value == nullptr || value->boolean_value(); | 187 is_debug_config_ = value == nullptr || value->boolean_value(); |
185 config_platform_ = "Win32"; | 188 config_platform_ = "Win32"; |
186 value = build_settings->build_args().GetArgOverride(variables::kTargetCpu); | 189 value = build_settings->build_args().GetArgOverride(variables::kTargetCpu); |
187 if (value != nullptr && value->string_value() == "x64") | 190 if (value != nullptr && value->string_value() == "x64") |
188 config_platform_ = "x64"; | 191 config_platform_ = "x64"; |
189 | 192 |
190 switch (version) { | 193 switch (version) { |
191 case Version::Vs2013: | 194 case Version::Vs2013: |
192 project_version_ = kProjectVersionVs2013; | 195 project_version_ = kProjectVersionVs2013; |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 | 492 |
490 project.SubElement( | 493 project.SubElement( |
491 "Import", | 494 "Import", |
492 XmlAttributes("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets")); | 495 XmlAttributes("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets")); |
493 project.SubElement( | 496 project.SubElement( |
494 "Import", | 497 "Import", |
495 XmlAttributes("Project", | 498 XmlAttributes("Project", |
496 "$(VCTargetsPath)\\BuildCustomizations\\masm.targets")); | 499 "$(VCTargetsPath)\\BuildCustomizations\\masm.targets")); |
497 project.SubElement("ImportGroup", XmlAttributes("Label", "ExtensionTargets")); | 500 project.SubElement("ImportGroup", XmlAttributes("Label", "ExtensionTargets")); |
498 | 501 |
| 502 std::string ninja_target = GetNinjaTarget(target); |
| 503 |
499 { | 504 { |
500 scoped_ptr<XmlElementWriter> build = | 505 scoped_ptr<XmlElementWriter> build = |
501 project.SubElement("Target", XmlAttributes("Name", "Build")); | 506 project.SubElement("Target", XmlAttributes("Name", "Build")); |
502 build->SubElement( | 507 build->SubElement( |
503 "Exec", | 508 "Exec", XmlAttributes("Command", |
504 XmlAttributes("Command", "call ninja.exe -C $(OutDir) $(ProjectName)")); | 509 "call ninja.exe -C $(OutDir) " + ninja_target)); |
505 } | 510 } |
506 | 511 |
507 { | 512 { |
508 scoped_ptr<XmlElementWriter> clean = | 513 scoped_ptr<XmlElementWriter> clean = |
509 project.SubElement("Target", XmlAttributes("Name", "Clean")); | 514 project.SubElement("Target", XmlAttributes("Name", "Clean")); |
510 clean->SubElement( | 515 clean->SubElement( |
511 "Exec", | 516 "Exec", |
512 XmlAttributes("Command", | 517 XmlAttributes("Command", |
513 "call ninja.exe -C $(OutDir) -tclean $(ProjectName)")); | 518 "call ninja.exe -C $(OutDir) -tclean " + ninja_target)); |
514 } | 519 } |
515 | 520 |
516 return true; | 521 return true; |
517 } | 522 } |
518 | 523 |
519 void VisualStudioWriter::WriteFiltersFileContents(std::ostream& out, | 524 void VisualStudioWriter::WriteFiltersFileContents(std::ostream& out, |
520 const Target* target) { | 525 const Target* target) { |
521 out << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << std::endl; | 526 out << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << std::endl; |
522 XmlElementWriter project( | 527 XmlElementWriter project( |
523 out, "Project", | 528 out, "Project", |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 base::CompareCase::SENSITIVE)) { | 749 base::CompareCase::SENSITIVE)) { |
745 folder->parent_folder = parents.back(); | 750 folder->parent_folder = parents.back(); |
746 break; | 751 break; |
747 } else { | 752 } else { |
748 parents.pop_back(); | 753 parents.pop_back(); |
749 } | 754 } |
750 } | 755 } |
751 parents.push_back(folder); | 756 parents.push_back(folder); |
752 } | 757 } |
753 } | 758 } |
| 759 |
| 760 std::string VisualStudioWriter::GetNinjaTarget(const Target* target) { |
| 761 std::ostringstream ninja_target_out; |
| 762 DCHECK(!target->dependency_output_file().value().empty()); |
| 763 ninja_path_output_.WriteFile(ninja_target_out, |
| 764 target->dependency_output_file()); |
| 765 return ninja_target_out.str(); |
| 766 } |
OLD | NEW |