ProjectExplorer: Merge LinuxIccToolChain into GccToolChain

Change-Id: I181a98f534c6f3006f750f99190b2f81a3f5a13b
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2023-09-05 09:55:42 +02:00
parent f71c89d44a
commit 90050c05f3
2 changed files with 45 additions and 77 deletions

View File

@@ -47,6 +47,18 @@ using namespace Utils;
namespace ProjectExplorer {
namespace Internal {
static const QStringList languageOption(Id languageId)
{
if (languageId == Constants::C_LANGUAGE_ID)
return {"-x", "c"};
return {"-x", "c++"};
}
const QStringList gccPredefinedMacrosOptions(Id languageId)
{
return languageOption(languageId) + QStringList({"-E", "-dM"});
}
class TargetTripleWidget;
class GccToolChainConfigWidget : public ToolChainConfigWidget
{
@@ -296,7 +308,9 @@ GccToolChain::GccToolChain(Utils::Id typeId, SubType subType)
setTypeDisplayName(Tr::tr("GCC"));
setTargetAbiKey(targetAbiKeyC);
setCompilerCommandKey("ProjectExplorer.GccToolChain.Path");
if (m_subType == MinGW) {
if (m_subType == LinuxIcc) {
setTypeDisplayName(Tr::tr("ICC"));
} else if (m_subType == MinGW) {
setTypeDisplayName(Tr::tr("MinGW"));
} else if (m_subType == Clang) {
setTypeDisplayName(Tr::tr("Clang"));
@@ -551,6 +565,23 @@ LanguageExtensions GccToolChain::languageExtensions(const QStringList &cxxflags)
if (m_subType == Clang && cxxflags.contains("-fborland-extensions"))
extensions |= LanguageExtension::Borland;
if (m_subType == LinuxIcc) {
// and "-fms-dialect[=ver]" instead of "-fms-extensions".
// see UNIX manual for "icc"
// FIXME: This copy seems unneeded.
QStringList copy = cxxflags;
copy.removeAll("-fopenmp");
copy.removeAll("-fms-extensions");
if (cxxflags.contains("-openmp"))
extensions |= LanguageExtension::OpenMP;
if (cxxflags.contains("-fms-dialect")
|| cxxflags.contains("-fms-dialect=8")
|| cxxflags.contains("-fms-dialect=9")
|| cxxflags.contains("-fms-dialect=10"))
extensions |= LanguageExtension::Microsoft;
}
return extensions;
}
@@ -763,6 +794,9 @@ void GccToolChain::addToEnvironment(Environment &env) const
QStringList GccToolChain::suggestedMkspecList() const
{
if (m_subType == LinuxIcc)
return {QString("linux-icc-%1").arg(targetAbi().wordWidth())};
if (m_subType == MinGW) {
if (HostOsInfo::isWindowsHost())
return {"win32-g++"};
@@ -850,6 +884,9 @@ FilePath GccToolChain::makeCommand(const Environment &environment) const
QList<OutputLineParser *> GccToolChain::createOutputParsers() const
{
if (m_subType == LinuxIcc)
return LinuxIccParser::iccParserSuite();
if (m_subType == Clang)
return ClangParser::clangParserSuite();
@@ -1906,48 +1943,6 @@ Toolchains MingwToolChainFactory::detectForImport(const ToolChainDescription &tc
return {};
}
// --------------------------------------------------------------------------
// LinuxIccToolChain
// --------------------------------------------------------------------------
LinuxIccToolChain::LinuxIccToolChain() :
GccToolChain(Constants::LINUXICC_TOOLCHAIN_TYPEID)
{
setTypeDisplayName(Tr::tr("ICC"));
}
/**
* Similar to \a GccToolchain::languageExtensions, but uses "-openmp" instead of
* "-fopenmp" and "-fms-dialect[=ver]" instead of "-fms-extensions".
* @see UNIX manual for "icc"
*/
LanguageExtensions LinuxIccToolChain::languageExtensions(const QStringList &cxxflags) const
{
QStringList copy = cxxflags;
copy.removeAll("-fopenmp");
copy.removeAll("-fms-extensions");
LanguageExtensions extensions = GccToolChain::languageExtensions(cxxflags);
if (cxxflags.contains("-openmp"))
extensions |= LanguageExtension::OpenMP;
if (cxxflags.contains("-fms-dialect")
|| cxxflags.contains("-fms-dialect=8")
|| cxxflags.contains("-fms-dialect=9")
|| cxxflags.contains("-fms-dialect=10"))
extensions |= LanguageExtension::Microsoft;
return extensions;
}
QList<OutputLineParser *> LinuxIccToolChain::createOutputParsers() const
{
return LinuxIccParser::iccParserSuite();
}
QStringList LinuxIccToolChain::suggestedMkspecList() const
{
return {QString("linux-icc-%1").arg(targetAbi().wordWidth())};
}
// --------------------------------------------------------------------------
// LinuxIccToolChainFactory
// --------------------------------------------------------------------------
@@ -1957,7 +1952,9 @@ LinuxIccToolChainFactory::LinuxIccToolChainFactory()
setDisplayName(Tr::tr("ICC"));
setSupportedToolChainType(Constants::LINUXICC_TOOLCHAIN_TYPEID);
setSupportedLanguages({Constants::CXX_LANGUAGE_ID, Constants::C_LANGUAGE_ID});
setToolchainConstructor([] { return new LinuxIccToolChain; });
setToolchainConstructor([] {
return new GccToolChain(Constants::LINUXICC_TOOLCHAIN_TYPEID, GccToolChain::LinuxIcc);
});
}
Toolchains LinuxIccToolChainFactory::autoDetect(const ToolchainDetector &detector) const

View File

@@ -10,8 +10,6 @@
#include "abi.h"
#include "headerpath.h"
#include <utils/fileutils.h>
#include <functional>
#include <memory>
#include <optional>
@@ -24,28 +22,19 @@ class GccToolChainConfigWidget;
class GccToolChainFactory;
class MingwToolChainFactory;
class LinuxIccToolChainFactory;
const QStringList gccPredefinedMacrosOptions(Utils::Id languageId);
}
// --------------------------------------------------------------------------
// GccToolChain
// --------------------------------------------------------------------------
inline const QStringList languageOption(Utils::Id languageId)
{
if (languageId == Constants::C_LANGUAGE_ID)
return {"-x", "c"};
return {"-x", "c++"};
}
inline const QStringList gccPredefinedMacrosOptions(Utils::Id languageId)
{
return languageOption(languageId) + QStringList({"-E", "-dM"});
}
class PROJECTEXPLORER_EXPORT GccToolChain : public ToolChain
{
public:
enum SubType { RealGcc, Clang, MinGW };
enum SubType { RealGcc, Clang, MinGW, LinuxIcc };
GccToolChain(Utils::Id typeId, SubType subType = RealGcc);
~GccToolChain() override;
@@ -185,6 +174,7 @@ private:
friend class Internal::GccToolChainConfigWidget;
friend class Internal::GccToolChainFactory;
friend class Internal::LinuxIccToolChainFactory;
friend class Internal::MingwToolChainFactory;
friend class Internal::ClangToolChainFactory;
friend class ToolChainFactory;
@@ -198,25 +188,6 @@ private:
QMetaObject::Connection m_thisToolchainRemovedConnection;
};
// --------------------------------------------------------------------------
// LinuxIccToolChain
// --------------------------------------------------------------------------
class PROJECTEXPLORER_EXPORT LinuxIccToolChain : public GccToolChain
{
public:
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override;
QList<Utils::OutputLineParser *> createOutputParsers() const override;
QStringList suggestedMkspecList() const override;
private:
LinuxIccToolChain();
friend class Internal::LinuxIccToolChainFactory;
friend class ToolChainFactory;
};
// --------------------------------------------------------------------------
// Factories
// --------------------------------------------------------------------------