OSDN Git Service

Symbian: Introduce RVCT 4 toolchain
authorTobias Hunger <tobias.hunger@nokia.com>
Fri, 26 Nov 2010 11:17:14 +0000 (12:17 +0100)
committerTobias Hunger <tobias.hunger@nokia.com>
Fri, 26 Nov 2010 14:07:39 +0000 (15:07 +0100)
Task-number: 2481

src/plugins/projectexplorer/toolchain.cpp
src/plugins/projectexplorer/toolchaintype.h
src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp
src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h
src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
src/plugins/qt4projectmanager/qt-s60/s60manager.h
src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
src/plugins/qt4projectmanager/qt4runconfiguration.cpp
src/plugins/qt4projectmanager/qtversionmanager.cpp

index 7efbd16..db61200 100644 (file)
@@ -153,6 +153,10 @@ QString ToolChain::toolChainName(ToolChainType tc)
         return QCoreApplication::translate("ToolChain", "RVCT 2 (ARMV5)");
     case ToolChain_RVCT2_ARMV6:
         return QCoreApplication::translate("ToolChain", "RVCT 2 (ARMV6)");
+    case ToolChain_RVCT4_ARMV5:
+        return QCoreApplication::translate("ToolChain", "RVCT 4 (ARMV5)");
+    case ToolChain_RVCT4_ARMV6:
+        return QCoreApplication::translate("ToolChain", "RVCT 4 (ARMV6)");
     case ToolChain_GCC_MAEMO:
         return QCoreApplication::translate("ToolChain", "GCC for Maemo");
     case ToolChain_OTHER:
index cce0324..de0347d 100644 (file)
@@ -46,7 +46,9 @@ enum ToolChainType
     ToolChain_GCC_MAEMO = 9,
     ToolChain_GCCE_GNUPOC = 10,
     ToolChain_RVCT_ARMV5_GNUPOC = 11,
-    ToolChain_LAST_VALID = 11,
+    ToolChain_RVCT4_ARMV5 = 12,
+    ToolChain_RVCT4_ARMV6 = 13,
+    ToolChain_LAST_VALID = 13,
     ToolChain_OTHER = 200,
     ToolChain_UNKNOWN = 201,
     ToolChain_INVALID = 202
index fca0f52..729b7b3 100644 (file)
@@ -44,6 +44,18 @@ using namespace Qt4ProjectManager::Internal;
 
 static const char rvctBinaryC[] = "armcc";
 
+static inline QStringList headerPathToStringList(const QList<ProjectExplorer::HeaderPath> &hl)
+{
+    QStringList rc;
+    foreach (const ProjectExplorer::HeaderPath &hp, hl)
+        rc.push_back(hp.path());
+    return rc;
+}
+
+// ==========================================================================
+// RVCTToolChain
+// ==========================================================================
+
 RVCTToolChain::RVCTToolChain(const S60Devices::Device &device, ProjectExplorer::ToolChainType type) :
     m_mixin(device),
     m_type(type),
@@ -54,41 +66,76 @@ RVCTToolChain::RVCTToolChain(const S60Devices::Device &device, ProjectExplorer::
 {
 }
 
-// Return the environment variable indicating the RVCT version
-// 'RVCT<major><minor>BIN'
-QByteArray RVCTToolChain::rvctBinEnvironmentVariable()
+QSet<QPair<int, int> > RVCTToolChain::configuredRvctVersions()
 {
-    static QByteArray binVar;
-    // Grep the environment list
-    if (binVar.isEmpty()) {
-        const QRegExp regex(QLatin1String("^(RVCT\\d\\dBIN)=.*$"));
-        QTC_ASSERT(regex.isValid(), return QByteArray());
-        foreach(const QString &v, QProcessEnvironment::systemEnvironment().toStringList()) {
+    static QSet<QPair<int, int> > result;
+
+    if (result.isEmpty()) {
+        QRegExp regex(QLatin1String("^RVCT(\\d)(\\d)BIN=.*$"));
+        Q_ASSERT(regex.isValid());
+        QStringList environment = QProcessEnvironment::systemEnvironment().toStringList();
+        foreach (const QString &v, environment) {
             if (regex.exactMatch(v)) {
-                binVar = regex.cap(1).toLocal8Bit();
-                break;
+                int major = regex.cap(1).toInt();
+                int minor = regex.cap(2).toInt();
+                result.insert(qMakePair(major, minor));
             }
         }
     }
-    return binVar;
+    return result;
+}
+
+QStringList RVCTToolChain::configuredEnvironment()
+{
+    updateVersion();
+
+    if (m_additionalEnvironment.isEmpty()) {
+        const QString binVarName = QString::fromLocal8Bit(rvctBinEnvironmentVariable());
+        const QString varName = binVarName.left(binVarName.count() - 3 /* BIN */);
+        QStringList environment = QProcessEnvironment::systemEnvironment().toStringList();
+        foreach (const QString &v, environment) {
+            if (v.startsWith(varName) && !v.startsWith(binVarName)) {
+                m_additionalEnvironment.append(v);
+            }
+        }
+    }
+    return m_additionalEnvironment;
+}
+
+// Return the environment variable indicating the RVCT version
+// 'RVCT<major><minor>BIN'
+QByteArray RVCTToolChain::rvctBinEnvironmentVariableForVersion(int major)
+{
+    QSet<QPair<int, int> > versions = configuredRvctVersions();
+
+    for (QSet<QPair<int, int> >::const_iterator it = versions.constBegin();
+         it != versions.constEnd(); ++it) {
+        if (it->first == major) {
+            if (it->first < 0 || it->first > 9) continue;
+            if (it->second < 0 || it->second > 9) continue;
+            QByteArray result = "RVCT..BIN";
+            result[4] = '0' + it->first;
+            result[5] = '0' + it->second;
+            return result;
+        }
+    }
+    return QByteArray();
 }
 
-// Return binary path as pointed to by RVCT<X><X>BIN
 QString RVCTToolChain::rvctBinPath()
 {
-    static QString binPath;
-    if (binPath.isEmpty()) {
+    if (m_binPath.isEmpty()) {
         const QByteArray binVar = rvctBinEnvironmentVariable();
         if (!binVar.isEmpty()) {
             const QByteArray binPathB = qgetenv(binVar);
             if (!binPathB.isEmpty()) {
                 const QFileInfo fi(QString::fromLocal8Bit(binPathB));
                 if (fi.isDir())
-                    binPath = fi.absoluteFilePath();
+                    m_binPath = fi.absoluteFilePath();
             }
         }
     }
-    return binPath;
+    return m_binPath;
 }
 
 // Return binary expanded by path or resort to PATH
@@ -121,7 +168,7 @@ void RVCTToolChain::updateVersion()
     addToEnvironment(env);
     armcc.setEnvironment(env.toStringList());
     const QString binary = rvctBinary();
-    armcc.start(rvctBinary(), QStringList());
+    armcc.start(binary, QStringList());
     if (!armcc.waitForStarted()) {
         qWarning("Unable to run rvct binary '%s' when trying to determine version.", qPrintable(binary));
         return;
@@ -143,36 +190,32 @@ void RVCTToolChain::updateVersion()
     QTC_ASSERT(versionRegExp.isValid(), return);
     if (versionRegExp.indexIn(versionLine) != -1) {
         m_major = versionRegExp.cap(1).toInt();
-       m_minor = versionRegExp.cap(2).toInt();
-       m_build = versionRegExp.cap(3).toInt();
+        m_minor = versionRegExp.cap(2).toInt();
+        m_build = versionRegExp.cap(3).toInt();
     }
 }
 
 QByteArray RVCTToolChain::predefinedMacros()
 {
-    // see http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205f/Babbacdb.html
+    // see http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205f/Babbacdb.html (version 2.2)
+    // and http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491b/BABJFEFG.html (version 4.0)
     updateVersion();
-    QByteArray ba = QString::fromLatin1(
-        "#define __arm__arm__\n"
-        "#define __ARMCC_VERSION %1%2%3%4\n"
-        "#define __ARRAY_OPERATORS\n"
-        "#define _BOOL\n"
-        "#define c_plusplus\n"
-        "#define __cplusplus\n"
-        "#define __CC_ARM\n"
-        "#define __EDG__\n"
-        "#define __STDC__\n"
-        "#define __STDC_VERSION__\n"
-        "#define __TARGET_FEATURE_DOUBLEWORD\n"
-        "#define __TARGET_FEATURE_DSPMUL\n"
-        "#define __TARGET_FEATURE_HALFWORD\n"
-        "#define __TARGET_FEATURE_THUMB\n"
-        "#define _WCHAR_T\n"
-        "#define __SYMBIAN32__\n"
-        ).arg(m_major, 1, 10, QLatin1Char('0'))
-        .arg(m_minor, 1, 10, QLatin1Char('0'))
-        .arg("0")
-        .arg(m_build, 3, 10, QLatin1Char('0')).toLatin1();
+    QByteArray ba("#define __ARRAY_OPERATORS\n"
+                  "#define _BOOL\n"
+                  "#define __cplusplus\n"
+                  "#define __CC_ARM 1\n"
+                  "#define __EDG__\n"
+                  "#define __STDC__\n"
+                  "#define __STDC_VERSION__\n"
+                  "#define __sizeof_int 4"
+                  "#define __sizeof_long 4"
+                  "#define __sizeof_ptr 4"
+                  "#define __TARGET_FEATURE_DOUBLEWORD\n"
+                  "#define __TARGET_FEATURE_DSPMUL\n"
+                  "#define __TARGET_FEATURE_HALFWORD\n"
+                  "#define __TARGET_FEATURE_THUMB\n"
+                  "#define _WCHAR_T\n"
+                  "#define __SYMBIAN32__\n");
     return ba;
 }
 
@@ -180,8 +223,7 @@ QList<HeaderPath> RVCTToolChain::systemHeaderPaths()
 {
     if (m_systemHeaderPaths.isEmpty()) {
         updateVersion();
-        Utils::Environment env = Utils::Environment::systemEnvironment();
-        QString rvctInclude = env.value(QString::fromLatin1("RVCT%1%2INC").arg(m_major).arg(m_minor));
+        QString rvctInclude = qgetenv(QString::fromLatin1("RVCT%1%2INC").arg(m_major).arg(m_minor).toLatin1());
         if (!rvctInclude.isEmpty())
             m_systemHeaderPaths.append(HeaderPath(rvctInclude, HeaderPath::GlobalHeaderPath));
         switch (m_type) {
@@ -196,17 +238,9 @@ QList<HeaderPath> RVCTToolChain::systemHeaderPaths()
     return m_systemHeaderPaths;
 }
 
-static inline QStringList headerPathToStringList(const QList<ProjectExplorer::HeaderPath> &hl)
-{
-    QStringList rc;
-    foreach(const ProjectExplorer::HeaderPath &hp, hl)
-        rc.push_back(hp.path());
-    return rc;
-}
-
 // Expand an RVCT variable, such as RVCT22BIN, by some new values
 void RVCTToolChain::addToRVCTPathVariable(const QString &postfix, const QStringList &values,
-                                  Utils::Environment &env) const
+                                          Utils::Environment &env) const
 {
     // get old values
     const QChar separator = QLatin1Char(',');
@@ -240,6 +274,17 @@ QStringList RVCTToolChain::libPaths()
 void RVCTToolChain::addToEnvironment(Utils::Environment &env)
 {
     updateVersion();
+
+    // Push additional configuration variables for the compiler through:
+    QStringList additionalVariables = configuredEnvironment();
+    foreach (const QString &var, additionalVariables) {
+        int pos = var.indexOf(QLatin1Char('='));
+        Q_ASSERT(pos >= 0);
+        const QString key = var.left(pos);
+        const QString value = var.mid(pos + 1);
+        env.set(key, value);
+    }
+
     switch (m_type) {
     case ProjectExplorer::ToolChain_RVCT_ARMV5_GNUPOC: {
         m_mixin.addGnuPocToEnvironment(&env);
@@ -250,24 +295,31 @@ void RVCTToolChain::addToEnvironment(Utils::Environment &env)
         addToRVCTPathVariable(QLatin1String("LIB"),
                               libPaths() + m_mixin.gnuPocRvctLibPaths(5, true),
                               env);
-        // Add rvct to path and set locale to 'C'
-        const QString binPath = rvctBinPath();
-        if (!binPath.isEmpty())
-            env.prependOrSetPath(binPath);
-        env.set(QLatin1String("LANG"), QString(QLatin1Char('C')));
-    }
+        }
         break;
     default:
         m_mixin.addEpocToEnvironment(&env);
         break;
     }
-    // we currently support RVCT v2.2 only:
-    env.set(QLatin1String("QT_RVCT_VERSION"), QLatin1String("2.2"));
+
+    const QString binPath = rvctBinPath();
+    env.set(rvctBinEnvironmentVariable(), QDir::toNativeSeparators(binPath));
+
+    // Add rvct to path and set locale to 'C'
+    if (!binPath.isEmpty())
+        env.prependOrSetPath(binPath);
+    env.set(QLatin1String("LANG"), QString(QLatin1Char('C')));
+
+    env.set(QLatin1String("QT_RVCT_VERSION"), QString::fromLatin1("%1.%2").arg(m_major).arg(m_minor));
 }
 
 QString RVCTToolChain::makeCommand() const
 {
+#if defined(Q_OS_WIN)
+    return QLatin1String("make.exe");
+#else
     return QLatin1String("make");
+#endif
 }
 
 ProjectExplorer::IOutputParser *RVCTToolChain::outputParser() const
@@ -275,11 +327,71 @@ ProjectExplorer::IOutputParser *RVCTToolChain::outputParser() const
     return new RvctParser;
 }
 
-bool RVCTToolChain::equals(const ToolChain *otherIn) const
+// ==========================================================================
+// RVCT2ToolChain
+// ==========================================================================
+
+RVCT2ToolChain::RVCT2ToolChain(const S60Devices::Device &device, ProjectExplorer::ToolChainType type) :
+    RVCTToolChain(device, type)
+{ }
+
+QByteArray RVCT2ToolChain::rvctBinEnvironmentVariable()
+{
+    return rvctBinEnvironmentVariableForVersion(2);
+}
+
+QByteArray RVCT2ToolChain::predefinedMacros()
+{
+    QByteArray result = RVCTToolChain::predefinedMacros();
+    result.append(QString::fromLatin1("#define __arm__arm__\n"
+                                      "#define __ARMCC_VERSION %1%2%3%4\n"
+                                      "#define c_plusplus\n"
+                                      )
+                  .arg(m_major, 1, 10, QLatin1Char('0'))
+                  .arg(m_minor, 1, 10, QLatin1Char('0'))
+                  .arg("0")
+                  .arg(m_build, 3, 10, QLatin1Char('0')).toLatin1());
+    return result;
+}
+
+bool RVCT2ToolChain::equals(const ToolChain *otherIn) const
 {
     if (otherIn->type() != type())
         return false;
-    const RVCTToolChain *other = static_cast<const RVCTToolChain *>(otherIn);
+    const RVCT2ToolChain *other = static_cast<const RVCT2ToolChain *>(otherIn);
     return other->m_mixin == m_mixin;
 }
 
+// ==========================================================================
+// RVCT4ToolChain
+// ==========================================================================
+
+RVCT4ToolChain::RVCT4ToolChain(const S60Devices::Device &device,
+                               ProjectExplorer::ToolChainType type) :
+    RVCT2ToolChain(device, type)
+{ }
+
+QByteArray RVCT4ToolChain::rvctBinEnvironmentVariable()
+{
+    return rvctBinEnvironmentVariableForVersion(4);
+}
+
+QByteArray RVCT4ToolChain::predefinedMacros()
+{
+    QByteArray result = RVCTToolChain::predefinedMacros();
+    result.append(QString::fromLatin1("#define __arm__\n"
+                                      "#define __ARMCC_VERSION %1%2%3\n")
+                  .arg(m_major, 1, 10, QLatin1Char('0'))
+                  .arg(m_minor, 1, 10, QLatin1Char('0'))
+                  .arg(m_build, 3, 10, QLatin1Char('0')).toLatin1());
+    return result;
+}
+
+
+bool RVCT4ToolChain::equals(const ToolChain *otherIn) const
+{
+    if (otherIn->type() != type())
+        return false;
+    const RVCT4ToolChain *other = static_cast<const RVCT4ToolChain *>(otherIn);
+    return other->m_mixin == m_mixin;
+}
index fcf6990..acf73aa 100644 (file)
 namespace Qt4ProjectManager {
 namespace Internal {
 
+// ==========================================================================
+// RVCTToolChain
+// ==========================================================================
+
 class RVCTToolChain : public ProjectExplorer::ToolChain
 {
 public:
     explicit RVCTToolChain(const S60Devices::Device &device,
                            ProjectExplorer::ToolChainType type);
-    virtual QByteArray predefinedMacros();
+    QByteArray predefinedMacros();
     QList<ProjectExplorer::HeaderPath> systemHeaderPaths();
     void addToEnvironment(Utils::Environment &env);
     ProjectExplorer::ToolChainType type() const;
     QString makeCommand() const;
     ProjectExplorer::IOutputParser *outputParser() const;
 
+    static QSet<QPair<int, int> > configuredRvctVersions();
+
     // Return the environment variable indicating the RVCT version
-    // 'RVCT<major><minor>BIN' and its setting
-    static QByteArray rvctBinEnvironmentVariable();
-    static QString rvctBinPath();
-    static QString rvctBinary();
+    // 'RVCT2<minor>BIN' and its setting
+    virtual QByteArray rvctBinEnvironmentVariable() = 0;
+
+    QString rvctBinPath();
+    QString rvctBinary();
 
 protected:
-    bool equals(const ToolChain *other) const;
+    bool equals(const ToolChain *other) const = 0;
 
-private:
+    QStringList configuredEnvironment();
+
+    QByteArray rvctBinEnvironmentVariableForVersion(int major);
     void addToRVCTPathVariable(const QString &postfix, const QStringList &values,
                                Utils::Environment &env) const;
-    static QStringList libPaths();
+    QStringList libPaths();
     void updateVersion();
 
+    QByteArray m_predefinedMacros;
+    QList<ProjectExplorer::HeaderPath> m_systemHeaderPaths;
+
     const S60ToolChainMixin m_mixin;
     const ProjectExplorer::ToolChainType m_type;
     bool m_versionUpToDate;
@@ -71,8 +83,44 @@ private:
     int m_minor;
     int m_build;
 
-    QByteArray m_predefinedMacros;
-    QList<ProjectExplorer::HeaderPath> m_systemHeaderPaths;
+private:
+    QString m_binPath;
+    QStringList m_additionalEnvironment;
+};
+
+// ==========================================================================
+// RVCT2ToolChain
+// ==========================================================================
+
+class RVCT2ToolChain : public RVCTToolChain
+{
+public:
+    explicit RVCT2ToolChain(const S60Devices::Device &device,
+                            ProjectExplorer::ToolChainType type);
+    QByteArray rvctBinEnvironmentVariable();
+
+    QByteArray predefinedMacros();
+
+protected:
+    bool equals(const ToolChain *other) const;
+};
+
+// ==========================================================================
+// RVCT4ToolChain
+// ==========================================================================
+
+class RVCT4ToolChain : public RVCT2ToolChain
+{
+public:
+    explicit RVCT4ToolChain(const S60Devices::Device &device,
+                            ProjectExplorer::ToolChainType type);
+
+    QByteArray rvctBinEnvironmentVariable();
+
+    QByteArray predefinedMacros();
+
+protected:
+    bool equals(const ToolChain *other) const;
 };
 
 } // namespace Internal
index d6e441d..dbd96d8 100644 (file)
@@ -244,6 +244,7 @@ QString S60DeployConfiguration::symbianPlatform() const
     case ProjectExplorer::ToolChain_GCCE_GNUPOC:
         return QLatin1String("gcce");
     case ProjectExplorer::ToolChain_RVCT2_ARMV5:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV5:
         return QLatin1String("armv5");
     default: // including ProjectExplorer::RVCT_ARMV6_GNUPOC:
         return QLatin1String("armv6");
index e0aea88..8216de7 100644 (file)
@@ -190,6 +190,8 @@ bool S60DeviceRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *c
     case ProjectExplorer::ToolChain_GCCE:
     case ProjectExplorer::ToolChain_RVCT2_ARMV5:
     case ProjectExplorer::ToolChain_RVCT2_ARMV6:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV5:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV6:
     case ProjectExplorer::ToolChain_GCCE_GNUPOC:
     case ProjectExplorer::ToolChain_RVCT_ARMV5_GNUPOC:
         return true;
@@ -282,6 +284,7 @@ static inline QString symbianPlatformForToolChain(ProjectExplorer::ToolChainType
     case ProjectExplorer::ToolChain_GCCE_GNUPOC:
         return QLatin1String("gcce");
     case ProjectExplorer::ToolChain_RVCT2_ARMV5:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV5:
         return QLatin1String("armv5");
     default: // including ProjectExplorer::RVCT_ARMV6_GNUPOC:
         break;
index 128f105..6ab58d9 100644 (file)
@@ -141,9 +141,14 @@ S60Manager::~S60Manager()
     }
 }
 
-bool S60Manager::hasRvctCompiler()
+bool S60Manager::hasRvct2Compiler()
 {
-    return !RVCTToolChain::rvctBinEnvironmentVariable().isEmpty();
+    return RVCT2ToolChain::configuredRvctVersions().contains(qMakePair(2, 2));
+}
+
+bool S60Manager::hasRvct4Compiler()
+{
+    return RVCT2ToolChain::configuredRvctVersions().contains(qMakePair(2, 2));
 }
 
 void S60Manager::addAutoReleasedObject(QObject *o)
@@ -237,7 +242,14 @@ ProjectExplorer::ToolChain *S60Manager::createRVCTToolChain(
         ProjectExplorer::ToolChainType type) const
 {
     Q_ASSERT(version);
-    return new RVCTToolChain(deviceForQtVersion(version), type);
+    if (type == ProjectExplorer::ToolChain_RVCT2_ARMV5
+            || type == ProjectExplorer::ToolChain_RVCT2_ARMV6
+            || type == ProjectExplorer::ToolChain_RVCT_ARMV5_GNUPOC)
+        return new RVCT2ToolChain(deviceForQtVersion(version), type);
+    if (type == ProjectExplorer::ToolChain_RVCT4_ARMV5
+            || type == ProjectExplorer::ToolChain_RVCT4_ARMV6)
+        return new RVCT4ToolChain(deviceForQtVersion(version), type);
+    return 0;
 }
 
 S60Devices::Device S60Manager::deviceForQtVersion(const Qt4ProjectManager::QtVersion *version) const
index 30922f9..2f1ce0a 100644 (file)
@@ -63,7 +63,8 @@ public:
     S60Devices::Device deviceForQtVersion(const Qt4ProjectManager::QtVersion *version) const;
     QString deviceIdFromDetectionSource(const QString &autoDetectionSource) const;
 
-    static bool hasRvctCompiler();
+    static bool hasRvct2Compiler();
+    static bool hasRvct4Compiler();
 
 private slots:
     void updateQtVersions();
index f05f3ae..f38491e 100644 (file)
@@ -325,8 +325,10 @@ QString Qt4BuildConfiguration::defaultMakeTarget() const
     case ProjectExplorer::ToolChain_GCCE:
         return symbianMakeTarget(buildConfig, QLatin1String("gcce"));
     case ProjectExplorer::ToolChain_RVCT2_ARMV5:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV5:
         return symbianMakeTarget(buildConfig, QLatin1String("armv5"));
     case ProjectExplorer::ToolChain_RVCT2_ARMV6:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV6:
         return symbianMakeTarget(buildConfig, QLatin1String("armv6"));
     case ProjectExplorer::ToolChain_RVCT_ARMV5_GNUPOC:
     case ProjectExplorer::ToolChain_GCCE_GNUPOC:
index 784d547..e9b05be 100644 (file)
@@ -150,7 +150,8 @@ bool Qt4RunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configu
         enabled = true;
         break;
     case ProjectExplorer::ToolChain_WINSCW:      case ProjectExplorer::ToolChain_GCCE:
-    case ProjectExplorer::ToolChain_RVCT2_ARMV5:  case ProjectExplorer::ToolChain_RVCT2_ARMV6:
+    case ProjectExplorer::ToolChain_RVCT2_ARMV5: case ProjectExplorer::ToolChain_RVCT2_ARMV6:
+    case ProjectExplorer::ToolChain_RVCT4_ARMV5: case ProjectExplorer::ToolChain_RVCT4_ARMV6:
     case ProjectExplorer::ToolChain_GCC_MAEMO:
         enabled = false;
         break;
index 0dbaa46..4684421 100644 (file)
@@ -1428,9 +1428,12 @@ void QtVersion::updateToolChainAndMkspec() const
 #    ifdef Q_OS_WIN
             m_targetIds.insert(QLatin1String(Constants::S60_DEVICE_TARGET_ID));
             m_toolChains << ToolChainPtr(s60mgr->createGCCEToolChain(this));
-            if (S60Manager::hasRvctCompiler())
+            if (S60Manager::hasRvct2Compiler())
                 m_toolChains << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain_RVCT2_ARMV5))
                              << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain_RVCT2_ARMV6));
+            if (S60Manager::hasRvct4Compiler())
+                m_toolChains << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain_RVCT4_ARMV5))
+                             << ToolChainPtr(s60mgr->createRVCTToolChain(this, ProjectExplorer::ToolChain_RVCT4_ARMV6));
             if (!mwcDirectory().isEmpty()) {
                 m_toolChains << ToolChainPtr(s60mgr->createWINSCWToolChain(this));
                 m_targetIds.insert(QLatin1String(Constants::S60_EMULATOR_TARGET_ID));
@@ -1704,6 +1707,8 @@ bool QtVersion::supportsBinaryDebuggingHelper() const
         case ProjectExplorer::ToolChain_GCCE :
         case ProjectExplorer::ToolChain_RVCT2_ARMV5:
         case ProjectExplorer::ToolChain_RVCT2_ARMV6:
+        case ProjectExplorer::ToolChain_RVCT4_ARMV5:
+        case ProjectExplorer::ToolChain_RVCT4_ARMV6:
         case ProjectExplorer::ToolChain_GCCE_GNUPOC:
         case ProjectExplorer::ToolChain_RVCT_ARMV5_GNUPOC:
         case ProjectExplorer::ToolChain_INVALID: