summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/projectexplorer/gcctoolchain.cpp97
-rw-r--r--src/plugins/projectexplorer/gcctoolchain.h21
-rw-r--r--src/plugins/projectexplorer/gcctoolchainfactories.h26
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp1
-rw-r--r--src/plugins/projectexplorer/projectexplorerconstants.h3
-rw-r--r--src/plugins/qt4projectmanager/qmakestep.cpp2
6 files changed, 148 insertions, 2 deletions
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index bf49fc16a0..ca424b91b5 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -215,7 +215,7 @@ static QList<ProjectExplorer::Abi> guessGccAbi(const QString &m)
flavor = ProjectExplorer::Abi::SymbianDeviceFlavor;
format = ProjectExplorer::Abi::ElfFormat;
width = 32;
- } else if (p == QLatin1String("mingw32")) {
+ } else if (p == QLatin1String("mingw32") || p == QLatin1String("win32")) {
arch = ProjectExplorer::Abi::X86Architecture;
os = ProjectExplorer::Abi::WindowsOS;
flavor = ProjectExplorer::Abi::WindowsMSysFlavor;
@@ -689,6 +689,93 @@ void Internal::GccToolChainConfigWidget::handleAbiChange()
emit dirty(toolChain());
}
+
+// --------------------------------------------------------------------------
+// ClangToolChain
+// --------------------------------------------------------------------------
+
+ClangToolChain::ClangToolChain(bool autodetect) :
+ GccToolChain(QLatin1String(Constants::MINGW_TOOLCHAIN_ID), autodetect)
+{ }
+
+QString ClangToolChain::typeName() const
+{
+ return Internal::ClangToolChainFactory::tr("Clang");
+}
+
+QString ClangToolChain::makeCommand() const
+{
+#if defined(Q_OS_WIN)
+ return QLatin1String("mingw32-make.exe");
+#else
+ return QLatin1String("make");
+#endif
+}
+
+QString ClangToolChain::mkspec() const
+{
+ if (targetAbi().os() == Abi::MacOS)
+ return QLatin1String("macx-llvm");
+ else if (targetAbi().os() == Abi::LinuxOS)
+ return QLatin1String("linux-llvm");
+ return QLatin1String("win32-llvm"); // Note: Not part of standard Qt yet!
+}
+
+ToolChain *ClangToolChain::clone() const
+{
+ return new ClangToolChain(*this);
+}
+
+// --------------------------------------------------------------------------
+// ClangToolChainFactory
+// --------------------------------------------------------------------------
+
+QString Internal::ClangToolChainFactory::displayName() const
+{
+ return tr("Clang");
+}
+
+QString Internal::ClangToolChainFactory::id() const
+{
+ return QLatin1String(Constants::CLANG_TOOLCHAIN_ID);
+}
+
+QList<ToolChain *> Internal::ClangToolChainFactory::autoDetect()
+{
+ Abi ha = Abi::hostAbi();
+ return autoDetectToolchains(QLatin1String("clang++"), QStringList(), ha);
+}
+
+bool Internal::ClangToolChainFactory::canCreate()
+{
+ return true;
+}
+
+ToolChain *Internal::ClangToolChainFactory::create()
+{
+ return createToolChain(false);
+}
+
+bool Internal::ClangToolChainFactory::canRestore(const QVariantMap &data)
+{
+ return idFromMap(data).startsWith(QLatin1String(Constants::CLANG_TOOLCHAIN_ID) + QLatin1Char(':'));
+}
+
+ToolChain *Internal::ClangToolChainFactory::restore(const QVariantMap &data)
+{
+ ClangToolChain *tc = new ClangToolChain(false);
+ if (tc->fromMap(data))
+ return tc;
+
+ delete tc;
+ return 0;
+}
+
+GccToolChain *Internal::ClangToolChainFactory::createToolChain(bool autoDetect)
+{
+ return new ClangToolChain(autoDetect);
+}
+
// --------------------------------------------------------------------------
// MingwToolChain
// --------------------------------------------------------------------------
@@ -915,6 +1002,14 @@ void ProjectExplorerPlugin::testGccAbiGuessing_data()
QTest::newRow("Mingw 2")
<< QString::fromLatin1("mingw32")
<< (QStringList() << QLatin1String("x86-windows-msys-pe-32bit"));
+ QTest::newRow("Clang 1: windows")
+ << QString::fromLatin1("x86_64-pc-win32")
+ << (QStringList() << QLatin1String("x86-windows-msys-pe-64bit")
+ << QLatin1String("x86-windows-msys-pe-32bit"));
+ QTest::newRow("Clang 1: linux")
+ << QString::fromLatin1("x86_64-unknown-linux-gnu")
+ << (QStringList() << QLatin1String("x86-linux-generic-elf-64bit")
+ << QLatin1String("x86-linux-generic-elf-32bit"));
QTest::newRow("Mac 1")
<< QString::fromLatin1("i686-apple-darwin10")
<< (QStringList() << QLatin1String("x86-macos-generic-mach_o-64bit")
diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h
index 6bcb5dc2a3..dfe073179c 100644
--- a/src/plugins/projectexplorer/gcctoolchain.h
+++ b/src/plugins/projectexplorer/gcctoolchain.h
@@ -41,6 +41,7 @@
namespace ProjectExplorer {
namespace Internal {
+class ClangToolChainFactory;
class GccToolChainFactory;
class MingwToolChainFactory;
class LinuxIccToolChainFactory;
@@ -108,6 +109,26 @@ private:
};
// --------------------------------------------------------------------------
+// ClangToolChain
+// --------------------------------------------------------------------------
+
+class PROJECTEXPLORER_EXPORT ClangToolChain : public GccToolChain
+{
+public:
+ QString typeName() const;
+ QString makeCommand() const;
+ QString mkspec() const;
+
+ ToolChain *clone() const;
+
+private:
+ ClangToolChain(bool autodetect);
+
+ friend class Internal::ClangToolChainFactory;
+ friend class ToolChainFactory;
+};
+
+// --------------------------------------------------------------------------
// MingwToolChain
// --------------------------------------------------------------------------
diff --git a/src/plugins/projectexplorer/gcctoolchainfactories.h b/src/plugins/projectexplorer/gcctoolchainfactories.h
index caeea3bd4e..14cdea6b94 100644
--- a/src/plugins/projectexplorer/gcctoolchainfactories.h
+++ b/src/plugins/projectexplorer/gcctoolchainfactories.h
@@ -108,6 +108,32 @@ private:
};
// --------------------------------------------------------------------------
+// ClangToolChainFactory
+// --------------------------------------------------------------------------
+
+class ClangToolChainFactory : public GccToolChainFactory
+{
+ Q_OBJECT
+
+public:
+ // Name used to display the name of the tool chain that will be created.
+ QString displayName() const;
+ QString id() const;
+
+ QList<ToolChain *> autoDetect();
+
+ bool canCreate();
+ ToolChain *create();
+
+ // Used by the ToolChainManager to restore user-generated tool chains
+ bool canRestore(const QVariantMap &data);
+ ToolChain *restore(const QVariantMap &data);
+
+protected:
+ GccToolChain *createToolChain(bool autoDetect);
+};
+
+// --------------------------------------------------------------------------
// MingwToolChainFactory
// --------------------------------------------------------------------------
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index e18139dfd7..865e5c5d82 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -313,6 +313,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
addAutoReleasedObject(new Internal::GccToolChainFactory);
addAutoReleasedObject(new Internal::LinuxIccToolChainFactory);
#endif
+ addAutoReleasedObject(new Internal::ClangToolChainFactory);
d->m_toolChainManager = new ToolChainManager(this);
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index 333e3a2284..e925406a13 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -201,9 +201,10 @@ const char * const BUILDSTEPS_DEPLOY = "ProjectExplorer.BuildSteps.Deploy";
const char * const DEFAULT_DEPLOYCONFIGURATION_ID = "ProjectExplorer.DefaultDeployConfiguration";
// ToolChain Ids
+const char * const CLANG_TOOLCHAIN_ID = "ProjectExplorer.ToolChain.Clang";
const char * const GCC_TOOLCHAIN_ID = "ProjectExplorer.ToolChain.Gcc";
-const char * const MINGW_TOOLCHAIN_ID = "ProjectExplorer.ToolChain.Mingw";
const char * const LINUXICC_TOOLCHAIN_ID = "ProjectExplorer.ToolChain.LinuxIcc";
+const char * const MINGW_TOOLCHAIN_ID = "ProjectExplorer.ToolChain.Mingw";
const char * const MSVC_TOOLCHAIN_ID = "ProjectExplorer.ToolChain.Msvc";
// Run Configuration defaults:
diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp
index 01fbf3b0e6..ca27219f0c 100644
--- a/src/plugins/qt4projectmanager/qmakestep.cpp
+++ b/src/plugins/qt4projectmanager/qmakestep.cpp
@@ -455,6 +455,8 @@ QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step)
this, SLOT(linkQmlDebuggingLibraryChanged()));
connect(step->qt4BuildConfiguration(), SIGNAL(qtVersionChanged()),
this, SLOT(qtVersionChanged()));
+ connect(step->qt4BuildConfiguration(), SIGNAL(toolChainChanged()),
+ this, SLOT(qtVersionChanged()));
connect(step->qt4BuildConfiguration(), SIGNAL(qmakeBuildConfigurationChanged()),
this, SLOT(qmakeBuildConfigChanged()));
connect(QtVersionManager::instance(), SIGNAL(qtVersionsUpdated(QString)),