Commit d5263270 authored by Brad King's avatar Brad King Committed by Kitware Robot
Browse files

Merge topic 'ninja-intel-depfile'

a624a3e1 Ninja: Use deps=gcc for Intel Compiler on Windows
f4f3b6b9 Ninja: Detect when ninja is new enough to support a multi-line depfile
699cd032

 Ninja: Drop unnecessary deptype customization infrastructure
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !2893
parents 29368abd a624a3e1
Pipeline #129088 passed with stage
in 0 seconds
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>")
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>")
......@@ -454,6 +454,7 @@ cmGlobalNinjaGenerator::cmGlobalNinjaGenerator(cmake* cm)
, NinjaSupportsConsolePool(false)
, NinjaSupportsImplicitOuts(false)
, NinjaSupportsManifestRestat(false)
, NinjaSupportsMultilineDepfile(false)
, NinjaSupportsDyndeps(0)
{
#ifdef _WIN32
......@@ -581,6 +582,9 @@ void cmGlobalNinjaGenerator::CheckNinjaFeatures()
this->NinjaSupportsManifestRestat = !cmSystemTools::VersionCompare(
cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
RequiredNinjaVersionForManifestRestat().c_str());
this->NinjaSupportsMultilineDepfile = !cmSystemTools::VersionCompare(
cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
RequiredNinjaVersionForMultilineDepfile().c_str());
{
// Our ninja branch adds ".dyndep-#" to its version number,
// where '#' is a feature-specific version number. Extract it.
......@@ -1478,6 +1482,11 @@ bool cmGlobalNinjaGenerator::SupportsManifestRestat() const
return this->NinjaSupportsManifestRestat;
}
bool cmGlobalNinjaGenerator::SupportsMultilineDepfile() const
{
return this->NinjaSupportsMultilineDepfile;
}
void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os)
{
WriteRule(*this->RulesFileStream, "CLEAN", ninjaCmd() + " -t clean",
......
......@@ -345,9 +345,14 @@ public:
static std::string RequiredNinjaVersionForConsolePool() { return "1.5"; }
static std::string RequiredNinjaVersionForImplicitOuts() { return "1.7"; }
static std::string RequiredNinjaVersionForManifestRestat() { return "1.8"; }
static std::string RequiredNinjaVersionForMultilineDepfile()
{
return "1.9";
}
bool SupportsConsolePool() const;
bool SupportsImplicitOuts() const;
bool SupportsManifestRestat() const;
bool SupportsMultilineDepfile() const;
std::string NinjaOutputPath(std::string const& path) const;
bool HasOutputPathPrefix() const { return !this->OutputPathPrefix.empty(); }
......@@ -461,6 +466,7 @@ private:
bool NinjaSupportsConsolePool;
bool NinjaSupportsImplicitOuts;
bool NinjaSupportsManifestRestat;
bool NinjaSupportsMultilineDepfile;
unsigned long NinjaSupportsDyndeps;
private:
......
......@@ -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
......@@ -630,10 +650,6 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang)
}
} else {
deptype = "gcc";
const char* langdeptype = mf->GetDefinition("CMAKE_NINJA_DEPTYPE_" + lang);
if (langdeptype) {
deptype = langdeptype;
}
depfile = "$DEP_FILE";
const std::string flagsName = "CMAKE_DEPFILE_FLAGS_" + lang;
std::string depfileFlags = mf->GetSafeDefinition(flagsName);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment