diff options
author | Brad King <brad.king@kitware.com> | 2019-01-30 19:25:56 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2019-01-30 19:59:23 (GMT) |
commit | a624a3e1b3105e94ad30722e3053679a3b7d5b7e (patch) | |
tree | c7edfd0cb497d2a4140fd09b7e5488ba1fffa9f5 | |
parent | f4f3b6b9af13366b16ce5a3be7af6c2b68c8be09 (diff) | |
download | CMake-a624a3e1b3105e94ad30722e3053679a3b7d5b7e.zip CMake-a624a3e1b3105e94ad30722e3053679a3b7d5b7e.tar.gz CMake-a624a3e1b3105e94ad30722e3053679a3b7d5b7e.tar.bz2 |
Ninja: Use deps=gcc for Intel Compiler on Windows
Ninja 1.9 supports the depfile format generated by this compiler.
Use `deps = gcc` when the version of Ninja is new enough.
Unfortunately the Intel Compiler for Windows does not properly
escape spaces in paths written to a depfile so if there is a
space in the path we must still fall back to `deps = msvc`.
Fixes: #18855
-rw-r--r-- | Modules/Platform/Windows-Intel-C.cmake | 2 | ||||
-rw-r--r-- | Modules/Platform/Windows-Intel-CXX.cmake | 2 | ||||
-rw-r--r-- | Source/cmNinjaTargetGenerator.cxx | 24 |
3 files changed, 26 insertions, 2 deletions
diff --git a/Modules/Platform/Windows-Intel-C.cmake b/Modules/Platform/Windows-Intel-C.cmake index 767fec5..06d8f50 100644 --- a/Modules/Platform/Windows-Intel-C.cmake +++ b/Modules/Platform/Windows-Intel-C.cmake @@ -1,2 +1,4 @@ include(Platform/Windows-Intel) __windows_compiler_intel(C) +set(CMAKE_NINJA_DEPTYPE_C intel) # special value handled by CMake +set(CMAKE_DEPFILE_FLAGS_C "-QMMD -QMT <OBJECT> -QMF <DEPFILE>") diff --git a/Modules/Platform/Windows-Intel-CXX.cmake b/Modules/Platform/Windows-Intel-CXX.cmake index 84cd303..666de6e 100644 --- a/Modules/Platform/Windows-Intel-CXX.cmake +++ b/Modules/Platform/Windows-Intel-CXX.cmake @@ -1,3 +1,5 @@ include(Platform/Windows-Intel) set(_COMPILE_CXX " /TP") __windows_compiler_intel(CXX) +set(CMAKE_NINJA_DEPTYPE_CXX intel) # special value handled by CMake +set(CMAKE_DEPFILE_FLAGS_CXX "-QMMD -QMT <OBJECT> -QMF <DEPFILE>") diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index c85a6f7..c29c657 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -173,8 +173,28 @@ void cmNinjaTargetGenerator::AddIncludeFlags(std::string& languageFlags, bool cmNinjaTargetGenerator::NeedDepTypeMSVC(const std::string& lang) const { - return (this->GetMakefile()->GetSafeDefinition("CMAKE_NINJA_DEPTYPE_" + - lang) == "msvc"); + std::string const& deptype = + this->GetMakefile()->GetSafeDefinition("CMAKE_NINJA_DEPTYPE_" + lang); + if (deptype == "msvc") { + return true; + } + if (deptype == "intel") { + // Ninja does not really define "intel", but we use it to switch based + // on whether this environment supports "gcc" or "msvc" deptype. + if (!this->GetGlobalGenerator()->SupportsMultilineDepfile()) { + // This ninja version is too old to support the Intel depfile format. + // Fall back to msvc deptype. + return true; + } + if ((this->Makefile->GetHomeDirectory().find(' ') != std::string::npos) || + (this->Makefile->GetHomeOutputDirectory().find(' ') != + std::string::npos)) { + // The Intel compiler does not properly escape spaces in a depfile. + // Fall back to msvc deptype. + return true; + } + } + return false; } // TODO: Refactor with |