diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index db9cc517c266441ca06204cf122d45b74f48a411..71c762c3708c8375adad87c74eaa124c9235e0b0 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -100,7 +100,9 @@ QStringList ToolChain::supportedToolChains() return QStringList() << QLatin1String("gcc") << QLatin1String("mingw") << QLatin1String("msvc") - << QLatin1String("wince"); + << QLatin1String("wince") + << QLatin1String("winscw") + << QLatin1String("gcce"); } QString ToolChain::toolChainName(ToolChainType tc) diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 89993d821d9ff5bcb64343f36306e33bd2b2203f..bf303df876dffc1522db9e9925932087a7811c5c 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -75,6 +75,7 @@ public: WINCE, #ifdef QTCREATOR_WITH_S60 WINSCW, + GCCE, #endif OTHER, UNKNOWN, @@ -86,6 +87,7 @@ public: virtual void addToEnvironment(ProjectExplorer::Environment &env) = 0; virtual ToolChainType type() const = 0; virtual QString makeCommand() const = 0; + virtual QString defaultMakeTarget() const = 0; ToolChain(); virtual ~ToolChain(); @@ -115,6 +117,7 @@ public: virtual void addToEnvironment(ProjectExplorer::Environment &env); virtual ToolChainType type() const; virtual QString makeCommand() const; + virtual QString defaultMakeTarget() const { return ""; } protected: virtual bool equals(ToolChain *other) const; @@ -148,6 +151,7 @@ public: virtual void addToEnvironment(ProjectExplorer::Environment &env); virtual ToolChainType type() const; virtual QString makeCommand() const; + virtual QString defaultMakeTarget() const { return ""; } protected: virtual bool equals(ToolChain *other) const; QString m_name; diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 018f07a41a46a79bb4bc855c8b1e4953054643a6..39da3103b6fea9e42db298fb3e1b15ac39c9dff5 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -68,7 +68,8 @@ bool MakeStep::init(const QString &name) workingDirectory = QFileInfo(project()->file()->fileName()).absolutePath(); setWorkingDirectory(name, workingDirectory); - QString makeCmd = qobject_cast<Qt4Project *>(project())->makeCommand(name); + Qt4Project *qt4project = qobject_cast<Qt4Project *>(project()); + QString makeCmd = qt4project->makeCommand(name); if (!value(name, "makeCmd").toString().isEmpty()) makeCmd = value(name, "makeCmd").toString(); if (!QFileInfo(makeCmd).isAbsolute()) { @@ -92,6 +93,7 @@ bool MakeStep::init(const QString &name) } } else { args = value(name, "makeargs").toStringList(); + args << qt4project->defaultMakeTarget(name); } // -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e87728e5054ddb387bafbe074cb9c16021b40c86 --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp @@ -0,0 +1,59 @@ +#include "gccetoolchain.h" + +#include <coreplugin/icore.h> + +#include <QtCore/QDir> +#include <QtDebug> + +using namespace ProjectExplorer; +using namespace Qt4ProjectManager::Internal; + +GCCEToolChain::GCCEToolChain(S60Devices::Device device) + : m_deviceId(device.id), + m_deviceName(device.name), + m_deviceRoot(device.epocRoot) +{ + +} + +ToolChain::ToolChainType GCCEToolChain::type() const +{ + return ToolChain::GCCE; +} + +QByteArray GCCEToolChain::predefinedMacros() +{ + // TODO + return m_predefinedMacros; +} + +QList<HeaderPath> GCCEToolChain::systemHeaderPaths() +{ + // TODO + return m_systemHeaderPaths; +} + +void GCCEToolChain::addToEnvironment(ProjectExplorer::Environment &env) +{ + env.prependOrSetPath(QString("%1\\epoc32\\tools").arg(m_deviceRoot)); // e.g. make.exe + env.prependOrSetPath(QString("%1\\epoc32\\gcc\\bin").arg(m_deviceRoot)); // e.g. gcc.exe + env.set("EPOCDEVICE", QString("%1:%2").arg(m_deviceId, m_deviceName)); + env.set("EPOCROOT", S60Devices::cleanedRootPath(m_deviceRoot)); +} + +QString GCCEToolChain::makeCommand() const +{ + return "make"; +} + +QString GCCEToolChain::defaultMakeTarget() const +{ + return "debug-gcce"; +} + +bool GCCEToolChain::equals(ToolChain *other) const +{ + return (other->type() == type() + && m_deviceId == static_cast<GCCEToolChain *>(other)->m_deviceId + && m_deviceName == static_cast<GCCEToolChain *>(other)->m_deviceName); +} diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h new file mode 100644 index 0000000000000000000000000000000000000000..36f1159a5c198730270a754f3d959f2d02b6934d --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h @@ -0,0 +1,36 @@ +#ifndef GCCETOOLCHAIN_H +#define GCCETOOLCHAIN_H + +#include "s60devices.h" + +#include <projectexplorer/toolchain.h> + +namespace Qt4ProjectManager { +namespace Internal { + +class GCCEToolChain : public ProjectExplorer::ToolChain +{ +public: + GCCEToolChain(S60Devices::Device device); + QByteArray predefinedMacros(); + QList<ProjectExplorer::HeaderPath> systemHeaderPaths(); + void addToEnvironment(ProjectExplorer::Environment &env); + ProjectExplorer::ToolChain::ToolChainType type() const; + QString makeCommand() const; + QString defaultMakeTarget() const; + +protected: + bool equals(ToolChain *other) const; + +private: + QString m_deviceId; + QString m_deviceName; + QString m_deviceRoot; + QByteArray m_predefinedMacros; + QList<ProjectExplorer::HeaderPath> m_systemHeaderPaths; +}; + +} // namespace Internal +} // namespace Qt4ProjectManager + +#endif // GCCETOOLCHAIN_H diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt index b7f0d13b75dcb765a19ab980847bd11cddeab6b1..a2e92143aa10320fdfe0c79edec242064e5c57bc 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt +++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt @@ -4,9 +4,16 @@ * QtVersion: * support the different tool chains + * gui for overriding the default make target if necessary, + make arguments --> make options + * more general "debug / release" configuration to be used in toolchain * WINSCW tool chain: * predefined macros * system includes +* GCCE tool chain: + * predefined macros + * system includes + * Run WINSCW executables diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri index e6a7fcd181f5be52d8269c4bf7736c19078f6fcb..af319a68ae61e01cac442d48c499a00655fd715d 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri +++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri @@ -5,11 +5,13 @@ SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60) SOURCES += $$PWD/s60devices.cpp \ $$PWD/s60devicespreferencepane.cpp \ $$PWD/s60manager.cpp \ - $$PWD/winscwtoolchain.cpp + $$PWD/winscwtoolchain.cpp \ + $$PWD/gccetoolchain.cpp HEADERS += $$PWD/s60devices.h \ $$PWD/s60devicespreferencepane.h \ $$PWD/s60manager.h \ - $$PWD/winscwtoolchain.h + $$PWD/winscwtoolchain.h \ + $$PWD/gccetoolchain.h FORMS += $$PWD/s60devicespreferencepane.ui OTHER_FILES += qt-s60-todo.txt } diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp index caa78d2eeb1edbea1448ef50f86acee743469cd0..139df343581294afd6a9a098d5596b1a394d3980 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp @@ -32,6 +32,7 @@ #include "s60devices.h" #include "s60devicespreferencepane.h" #include "winscwtoolchain.h" +#include "gccetoolchain.h" #include <extensionsystem/pluginmanager.h> @@ -116,3 +117,9 @@ ProjectExplorer::ToolChain *S60Manager::createWINSCWToolChain(const Qt4ProjectMa QString id = version->autodetectionSource().mid(QString(S60_AUTODETECTION_SOURCE).length()+1); return new WINSCWToolChain(m_devices->deviceForId(id), version->mwcDirectory()); } + +ProjectExplorer::ToolChain *S60Manager::createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const +{ + QString id = version->autodetectionSource().mid(QString(S60_AUTODETECTION_SOURCE).length()+1); + return new GCCEToolChain(m_devices->deviceForId(id)); +} diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.h b/src/plugins/qt4projectmanager/qt-s60/s60manager.h index 9e0ca37823b1f9d6d094587c26036a5230c678db..bed940a903c621339f93708a75ad7eebf9dd1ea3 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.h @@ -53,6 +53,7 @@ public: static S60Manager *instance(); ProjectExplorer::ToolChain *createWINSCWToolChain(const Qt4ProjectManager::QtVersion *version) const; + ProjectExplorer::ToolChain *createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const; private slots: void updateQtVersions(); diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp index 6a924b95a673d5b5f937d1a25af12e6d169c1903..fce6eb22857dc5b458512594027ec9c4708ee6a4 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.cpp @@ -4,7 +4,6 @@ using namespace ProjectExplorer; using namespace Qt4ProjectManager::Internal; WINSCWToolChain::WINSCWToolChain(S60Devices::Device device, const QString &mwcDirectory) - // TODO get rid of hardcoded carbide path : m_carbidePath(mwcDirectory), m_deviceId(device.id), m_deviceName(device.name), @@ -62,8 +61,14 @@ QString WINSCWToolChain::makeCommand() const return "make"; } +QString WINSCWToolChain::defaultMakeTarget() const +{ + return "debug-winscw"; +} + bool WINSCWToolChain::equals(ToolChain *other) const { - return (m_deviceId == static_cast<WINSCWToolChain *>(other)->m_deviceId + return (other->type() == type() + && m_deviceId == static_cast<WINSCWToolChain *>(other)->m_deviceId && m_deviceName == static_cast<WINSCWToolChain *>(other)->m_deviceName); } diff --git a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h index 835ac84bece1dd38d6582ebf2bfcd38fe43c6b72..50f81b984a1b93ab550f0ef41b4d3d7038d5f414 100644 --- a/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h +++ b/src/plugins/qt4projectmanager/qt-s60/winscwtoolchain.h @@ -17,6 +17,7 @@ public: void addToEnvironment(ProjectExplorer::Environment &env); ProjectExplorer::ToolChain::ToolChainType type() const; QString makeCommand() const; + QString defaultMakeTarget() const; protected: bool equals(ToolChain *other) const; diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index e380f9df7dfb575ab7a6c335b7e02c473d582bd3..5ec3ce2d5f18ba28633983cb21c8c9cd94e73b31 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -380,6 +380,11 @@ QString Qt4Project::makeCommand(const QString &buildConfiguration) const return qtVersion(buildConfiguration)->toolChain()->makeCommand(); } +QString Qt4Project::defaultMakeTarget(const QString &buildConfiguration) const +{ + return qtVersion(buildConfiguration)->toolChain()->defaultMakeTarget(); +} + void Qt4Project::updateCodeModel() { if (debug) diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 4a7da35289eee5ee1f0b7026760bcbdf19a01e26..aa933a849bc8e737dcc9463769f1b946bb0e4f1d 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -182,6 +182,7 @@ public: void notifyChanged(const QString &name); QString makeCommand(const QString &buildConfiguration) const; + QString defaultMakeTarget(const QString &buildConfiguration) const; // Is called by qmakestep qt4configurationwidget if the settings change // Informs all Qt4RunConfigurations that their cached values are now invalid