diff options
-rwxr-xr-x | scripts/deployqt.py | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/msvctoolchain.cpp | 37 | ||||
-rw-r--r-- | src/plugins/projectexplorer/msvctoolchain.h | 2 |
3 files changed, 34 insertions, 7 deletions
diff --git a/scripts/deployqt.py b/scripts/deployqt.py index 35c664b37e..f7891f4e79 100755 --- a/scripts/deployqt.py +++ b/scripts/deployqt.py @@ -220,6 +220,8 @@ def deploy_libclang(install_dir, llvm_install_dir, chrpath_bin): os.path.join(install_dir, 'bin'))) deployinfo.append((os.path.join(llvm_install_dir, 'bin', 'clang.exe'), clangbindirtarget)) + deployinfo.append((os.path.join(llvm_install_dir, 'bin', 'clang-cl.exe'), + clangbindirtarget)) resourcetarget = os.path.join(clanglibdirtarget, 'clang') else: libsources = glob(os.path.join(llvm_install_dir, 'lib', 'libclang.so*')) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 7fe8ee1098..95b6bcbdaf 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -30,6 +30,8 @@ #include "taskhub.h" #include "toolchainmanager.h" +#include <coreplugin/icore.h> + #include <utils/algorithm.h> #include <utils/hostosinfo.h> #include <utils/optional.h> @@ -877,7 +879,7 @@ static const MsvcToolChain *selectMsvcToolChain(const QString &clangClPath, } static QList<ToolChain *> detectClangClToolChainInPath( - const QString &clangClPath, const QList<ToolChain *> &alreadyKnown) + const QString &clangClPath, const QList<ToolChain *> &alreadyKnown, bool isDefault = false) { QList<ToolChain *> res; const unsigned char wordWidth = Utils::is64BitWindowsBinary(clangClPath) ? 64 : 32; @@ -891,9 +893,10 @@ static QList<ToolChain *> detectClangClToolChainInPath( Utils::Environment systemEnvironment = Utils::Environment::systemEnvironment(); const Abi targetAbi = toolChain->targetAbi(); - const QString name = QStringLiteral("LLVM ") + QString::number(wordWidth) - + QStringLiteral("bit based on ") - + Abi::toString(targetAbi.osFlavor()).toUpper(); + const QString name = QString("%1LLVM %2 bit based on %3") + .arg(QLatin1String(isDefault ? "Default " : "")) + .arg(wordWidth) + .arg(Abi::toString(targetAbi.osFlavor()).toUpper()); for (auto language: {Constants::C_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID}) { ClangClToolChain *tc = static_cast<ClangClToolChain *>( Utils::findOrDefault( @@ -1050,6 +1053,15 @@ void ClangClToolChain::resetMsvcToolChain(const MsvcToolChain *base) setVarsBatArg(base->varsBatArg()); } +bool ClangClToolChain::operator ==(const ToolChain &other) const +{ + if (!MsvcToolChain::operator ==(other)) + return false; + + const auto *clangClTc = static_cast<const ClangClToolChain *>(&other); + return m_clangPath == clangClTc->m_clangPath; +} + // -------------------------------------------------------------------------- // MsvcToolChainFactory // -------------------------------------------------------------------------- @@ -1242,20 +1254,31 @@ QList<ToolChain *> ClangClToolChainFactory::autoDetect(const QList<ToolChain *> #endif QList<ToolChain *> results; + QList<ToolChain *> known = alreadyKnown; + + QString qtCreatorsClang = Core::ICore::clangExecutable(CLANG_BINDIR); + if (!qtCreatorsClang.isEmpty()) { + qtCreatorsClang = Utils::FileName::fromString(qtCreatorsClang).parentDir() + .appendPath("clang-cl.exe").toString(); + results.append(detectClangClToolChainInPath(qtCreatorsClang, alreadyKnown, true)); + known.append(results); + } + const QSettings registry(QLatin1String(registryNode), QSettings::NativeFormat); if (registry.status() == QSettings::NoError) { const QString path = QDir::cleanPath(registry.value(QStringLiteral(".")).toString()); const QString clangClPath = compilerFromPath(path); if (!path.isEmpty()) { - results.append(detectClangClToolChainInPath(clangClPath, alreadyKnown)); - return results; + results.append(detectClangClToolChainInPath(clangClPath, known)); + known.append(results); } } const Utils::Environment systemEnvironment = Utils::Environment::systemEnvironment(); const Utils::FileName clangClPath = systemEnvironment.searchInPath("clang-cl"); if (!clangClPath.isEmpty()) - results.append(detectClangClToolChainInPath(clangClPath.toString(), alreadyKnown)); + results.append(detectClangClToolChainInPath(clangClPath.toString(), known)); + return results; } diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 9bbf36757c..8510cece09 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -134,6 +134,8 @@ public: void setClangPath(const QString &path) { m_clangPath = path; } void resetMsvcToolChain(const MsvcToolChain *base = nullptr); + + bool operator ==(const ToolChain &) const override; private: QString m_clangPath; }; |