Index: tools/gn/ninja_binary_target_writer.cc |
diff --git a/tools/gn/ninja_binary_target_writer.cc b/tools/gn/ninja_binary_target_writer.cc |
index a62f8725838ad1faf7ac01c64b07db95d3c44ccb..4a923c3bde018909c27a41ff26f9f5dd54679e82 100644 |
--- a/tools/gn/ninja_binary_target_writer.cc |
+++ b/tools/gn/ninja_binary_target_writer.cc |
@@ -103,14 +103,15 @@ const char* GetPCHLangSuffixForToolType(Toolchain::ToolType type) { |
} |
} |
-std::string GetWindowsPCHObjectExtension(Toolchain::ToolType tool_type) { |
+std::string GetWindowsPCHObjectExtension(Toolchain::ToolType tool_type, |
+ const std::string& obj_extension) { |
const char* lang_suffix = GetPCHLangSuffixForToolType(tool_type); |
std::string result = "."; |
// For MSVC, annotate the obj files with the language type. For example: |
- // obj/foo/target_name.precompile.o -> |
- // obj/foo/target_name.precompile.cc.o |
+ // obj/foo/target_name.precompile.obj -> |
+ // obj/foo/target_name.precompile.cc.obj |
result += lang_suffix; |
- result += ".o"; |
+ result += obj_extension; |
return result; |
} |
@@ -182,7 +183,8 @@ void GetPCHOutputFiles(const Target* target, |
Tool::PrecompiledHeaderType header_type = tool->precompiled_header_type(); |
switch (header_type) { |
case Tool::PCH_MSVC: |
- output_extension = GetWindowsPCHObjectExtension(tool_type); |
+ output_extension = GetWindowsPCHObjectExtension( |
+ tool_type, output_value.substr(extension_offset - 1)); |
break; |
case Tool::PCH_GCC: |
output_extension = GetGCCPCHOutputExtension(tool_type); |
@@ -621,7 +623,7 @@ void NinjaBinaryTargetWriter::WriteSources( |
if (tool_type != Toolchain::TYPE_NONE) { |
// Only include PCH deps that correspond to the tool type, for instance, |
- // do not specify target_name.precompile.cc.o (a CXX PCH file) as a dep |
+ // do not specify target_name.precompile.cc.obj (a CXX PCH file) as a dep |
// for the output of a C tool type. |
// |
// This makes the assumption that pch_deps only contains pch output files |
@@ -631,9 +633,13 @@ void NinjaBinaryTargetWriter::WriteSources( |
if (tool->precompiled_header_type() != Tool::PCH_NONE) { |
for (const auto& dep : pch_deps) { |
const std::string& output_value = dep.value(); |
+ size_t extension_offset = FindExtensionOffset(output_value); |
+ if (extension_offset == std::string::npos) |
+ continue; |
std::string output_extension; |
if (tool->precompiled_header_type() == Tool::PCH_MSVC) { |
- output_extension = GetWindowsPCHObjectExtension(tool_type); |
+ output_extension = GetWindowsPCHObjectExtension( |
+ tool_type, output_value.substr(extension_offset - 1)); |
} else if (tool->precompiled_header_type() == Tool::PCH_GCC) { |
output_extension = GetGCCPCHOutputExtension(tool_type); |
} |