summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-03-18 11:21:08 -0400
committerBrad King <brad.king@kitware.com>2023-03-18 11:52:41 -0400
commit8ebe3f92b3b270dca340ccceb34a751d213465a2 (patch)
tree9c20ab94e2cb1bac06ede880296b183992c65db3
parentf3ca199c9b26988645fe1da661687238c407c24e (diff)
downloadcmake-8ebe3f92b3b270dca340ccceb34a751d213465a2.tar.gz
cmGlobalNinjaGenerator: Detect GNU-like command-line for dyndep collator
This will help the collator choose flags and path styles for modmap files.
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx22
-rw-r--r--Source/cmNinjaTargetGenerator.cxx4
2 files changed, 20 insertions, 6 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 97366c2301..4b894c73f5 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -2820,6 +2820,10 @@ int cmcmd_cmake_ninja_dyndep(std::vector<std::string>::const_iterator argBeg,
linked_target_dirs.push_back(tdi_linked_target_dir.asString());
}
}
+ std::string const compilerId = tdi["compiler-id"].asString();
+ std::string const simulateId = tdi["compiler-simulate-id"].asString();
+ std::string const compilerFrontendVariant =
+ tdi["compiler-frontend-variant"].asString();
auto export_info = cmDyndepCollation::ParseExportInfo(tdi);
@@ -2827,14 +2831,20 @@ int cmcmd_cmake_ninja_dyndep(std::vector<std::string>::const_iterator argBeg,
cm.SetHomeDirectory(dir_top_src);
cm.SetHomeOutputDirectory(dir_top_bld);
auto ggd = cm.CreateGlobalGenerator("Ninja");
- if (!ggd ||
- !cm::static_reference_cast<cmGlobalNinjaGenerator>(ggd).WriteDyndepFile(
- dir_top_src, dir_top_bld, dir_cur_src, dir_cur_bld, arg_dd, arg_ddis,
- module_dir, linked_target_dirs, arg_lang, arg_modmapfmt,
- *export_info)) {
+ if (!ggd) {
return 1;
}
- return 0;
+ cmGlobalNinjaGenerator& gg =
+ cm::static_reference_cast<cmGlobalNinjaGenerator>(ggd);
+# ifdef _WIN32
+ gg.SetUsingGCCOnWindows(
+ DetectGCCOnWindows(compilerId, simulateId, compilerFrontendVariant));
+# endif
+ return gg.WriteDyndepFile(dir_top_src, dir_top_bld, dir_cur_src, dir_cur_bld,
+ arg_dd, arg_ddis, module_dir, linked_target_dirs,
+ arg_lang, arg_modmapfmt, *export_info)
+ ? 0
+ : 1;
}
#endif
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 13782b0fa4..5abf6093b6 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -1634,6 +1634,10 @@ void cmNinjaTargetGenerator::WriteTargetDependInfo(std::string const& lang,
tdi["language"] = lang;
tdi["compiler-id"] = this->Makefile->GetSafeDefinition(
cmStrCat("CMAKE_", lang, "_COMPILER_ID"));
+ tdi["compiler-simulate-id"] = this->Makefile->GetSafeDefinition(
+ cmStrCat("CMAKE_", lang, "_SIMULATE_ID"));
+ tdi["compiler-frontend-variant"] = this->Makefile->GetSafeDefinition(
+ cmStrCat("CMAKE_", lang, "_COMPILER_FRONTEND_VARIANT"));
std::string mod_dir;
if (lang == "Fortran") {