forked from qt-creator/qt-creator
Experimental clang-cl based toolchain: Support MSVC 2013 as well.
Search for MSVC 2013 if MSVC 2015 cannot be found since clang-cl
supports both. Amends change eb4d1584b6.
Task-number: QTBUG-50804
Task-number: QTCREATORBUG-15641
Change-Id: I0e57dfb080292020924cbcb69b87b47743775ec3
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -696,7 +696,16 @@ static void detectCppBuildTools(QList<ToolChain *> *list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect Clang-cl on top of MSVC2015.
|
static ToolChain *findMsvcToolChain(const QList<ToolChain *> &list,
|
||||||
|
unsigned char wordWidth, Abi::OSFlavor flavor)
|
||||||
|
{
|
||||||
|
return Utils::findOrDefault(list, [wordWidth, flavor] (const ToolChain *tc)
|
||||||
|
{ const Abi abi = tc->targetAbi();
|
||||||
|
return abi.osFlavor() == flavor
|
||||||
|
&& wordWidth == abi.wordWidth();} );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect Clang-cl on top of MSVC2015 or MSVC2013.
|
||||||
static void detectClangClToolChain(QList<ToolChain *> *list)
|
static void detectClangClToolChain(QList<ToolChain *> *list)
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN64
|
#ifdef Q_OS_WIN64
|
||||||
@@ -713,17 +722,19 @@ static void detectClangClToolChain(QList<ToolChain *> *list)
|
|||||||
return;
|
return;
|
||||||
const unsigned char wordWidth = Utils::is64BitWindowsBinary(path + QStringLiteral("/bin/") + QLatin1String(clangClBinary))
|
const unsigned char wordWidth = Utils::is64BitWindowsBinary(path + QStringLiteral("/bin/") + QLatin1String(clangClBinary))
|
||||||
? 64 : 32;
|
? 64 : 32;
|
||||||
const auto it = std::find_if(list->cbegin(), list->cend(),
|
const ToolChain *toolChain = findMsvcToolChain(*list, wordWidth, Abi::WindowsMsvc2015Flavor);
|
||||||
[wordWidth] (ToolChain *tc) { const Abi abi = tc->targetAbi();
|
if (!toolChain)
|
||||||
return abi.osFlavor() == Abi::WindowsMsvc2015Flavor
|
toolChain = findMsvcToolChain(*list, wordWidth, Abi::WindowsMsvc2013Flavor);
|
||||||
&& wordWidth == abi.wordWidth();} );
|
if (!toolChain) {
|
||||||
if (it == list->cend())
|
|
||||||
qWarning("Unable to find a suitable MSVC version for \"%s\".", qPrintable(QDir::toNativeSeparators(path)));
|
qWarning("Unable to find a suitable MSVC version for \"%s\".", qPrintable(QDir::toNativeSeparators(path)));
|
||||||
|
return;
|
||||||
const MsvcToolChain *msvcToolChain = static_cast<MsvcToolChain *>(*it);
|
}
|
||||||
|
const MsvcToolChain *msvcToolChain = static_cast<const MsvcToolChain *>(toolChain);
|
||||||
|
const Abi targetAbi = msvcToolChain->targetAbi();
|
||||||
const QString name = QStringLiteral("LLVM ") + QString::number(wordWidth)
|
const QString name = QStringLiteral("LLVM ") + QString::number(wordWidth)
|
||||||
+ QStringLiteral("bit based on MSVC2015");
|
+ QStringLiteral("bit based on ")
|
||||||
list->append(new ClangClToolChain(name, path, msvcToolChain->targetAbi(),
|
+ Abi::toString(targetAbi.osFlavor()).toUpper();
|
||||||
|
list->append(new ClangClToolChain(name, path, targetAbi,
|
||||||
msvcToolChain->varsBat(), msvcToolChain->varsBatArg(),
|
msvcToolChain->varsBat(), msvcToolChain->varsBatArg(),
|
||||||
ToolChain::AutoDetection));
|
ToolChain::AutoDetection));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user