gn: Use .obj extension for pch objects on Windows. Fixes a cosmetic regression from https://codereview.chromium.org/1292983004 BUG=603902 Review URL: https://codereview.chromium.org/1893933002 Cr-Original-Commit-Position: refs/heads/master@{#387893} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: c065bd83a55626de81db52aca9bf88dbb425e904
diff --git a/tools/gn/ninja_binary_target_writer.cc b/tools/gn/ninja_binary_target_writer.cc index a62f872..4a923c3 100644 --- a/tools/gn/ninja_binary_target_writer.cc +++ b/tools/gn/ninja_binary_target_writer.cc
@@ -103,14 +103,15 @@ } } -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 @@ 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 @@ 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 @@ 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); }