OSDN Git Service

Some predefined macros for rvct.
authorcon <qtc-committer@nokia.com>
Mon, 10 Aug 2009 15:05:03 +0000 (17:05 +0200)
committercon <qtc-committer@nokia.com>
Mon, 10 Aug 2009 15:23:10 +0000 (17:23 +0200)
src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp
src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h

index 459d883..c19ea55 100644 (file)
@@ -36,7 +36,8 @@ using namespace Qt4ProjectManager::Internal;
 
 RVCTToolChain::RVCTToolChain(S60Devices::Device device, ToolChain::ToolChainType type,
                              const QString &makeTargetBase)
-    : m_deviceId(device.id),
+    : m_versionUpToDate(false),
+    m_deviceId(device.id),
     m_deviceName(device.name),
     m_deviceRoot(device.epocRoot),
     m_type(type),
@@ -49,10 +50,57 @@ ToolChain::ToolChainType RVCTToolChain::type() const
     return m_type;
 }
 
+void RVCTToolChain::updateVersion()
+{
+    if (m_versionUpToDate)
+        return;
+    m_versionUpToDate = true;
+    m_major = 0;
+    m_minor = 0;
+    m_build = 0;
+    QProcess armcc;
+    ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
+    addToEnvironment(env);
+    armcc.setEnvironment(env.toStringList());
+    armcc.start("armcc", QStringList());
+    armcc.closeWriteChannel();
+    armcc.waitForFinished();
+    QString versionLine = armcc.readAllStandardOutput();
+    versionLine += armcc.readAllStandardError();
+    QRegExp versionRegExp("RVCT(\\d*)\\.(\\d*).*\\[Build.(\\d*)\\]",
+        Qt::CaseInsensitive);
+    if (versionRegExp.indexIn(versionLine) != -1) {
+        m_major = versionRegExp.cap(1).toInt();
+       m_minor = versionRegExp.cap(2).toInt();
+       m_build = versionRegExp.cap(3).toInt();
+    }
+}
+
 QByteArray RVCTToolChain::predefinedMacros()
 {
-    //TODO
-    return QByteArray();
+    // see http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205f/Babbacdb.html
+    updateVersion();
+    QByteArray ba = QString::fromLocal8Bit(
+        "#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"
+        ).arg(m_major, 1, 10, QLatin1Char('0'))
+        .arg(m_minor, 1, 10, QLatin1Char('0'))
+        .arg("0")
+        .arg(m_build, 3, 10, QLatin1Char('0')).toLocal8Bit();
+    return ba;
 }
 
 QList<HeaderPath> RVCTToolChain::systemHeaderPaths()
index 8c82cfb..f133300 100644 (file)
@@ -55,6 +55,12 @@ protected:
     bool equals(ToolChain *other) const;
 
 private:
+    void updateVersion();
+
+    bool m_versionUpToDate;
+    int m_major;
+    int m_minor;
+    int m_build;
     QString m_deviceId;
     QString m_deviceName;
     QString m_deviceRoot;