From fe92b40f458b88cfbe399d70f600d16a5720f2da Mon Sep 17 00:00:00 2001 From: con Date: Wed, 5 Aug 2009 17:06:52 +0200 Subject: Start on rvct support. It works, except that the code model doesn't get the rvct include directories and defines yet. And you need to have everything for rvct set up in your environment. --- src/plugins/projectexplorer/toolchain.h | 2 + .../qt4projectmanager/qt-s60/gccetoolchain.cpp | 14 +-- src/plugins/qt4projectmanager/qt-s60/qt-s60.pri | 12 +-- .../qt4projectmanager/qt-s60/rvcttoolchain.cpp | 106 +++++++++++++++++++++ .../qt4projectmanager/qt-s60/rvcttoolchain.h | 71 ++++++++++++++ .../qt-s60/s60devicerunconfiguration.cpp | 2 +- .../qt4projectmanager/qt-s60/s60manager.cpp | 18 ++++ src/plugins/qt4projectmanager/qt-s60/s60manager.h | 2 + src/plugins/qt4projectmanager/qt4project.cpp | 4 + .../qt4projectmanager/qt4projectconfigwidget.cpp | 20 ++-- .../qt4projectmanager/qt4runconfiguration.cpp | 5 +- src/plugins/qt4projectmanager/qtversionmanager.cpp | 8 +- 12 files changed, 241 insertions(+), 23 deletions(-) create mode 100644 src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp create mode 100644 src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h (limited to 'src/plugins') diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 7c6033b5dc..c741d53544 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -77,6 +77,8 @@ public: #ifdef QTCREATOR_WITH_S60 WINSCW = 5, GCCE = 6, + RVCT_ARMV5 = 7, + RVCT_ARMV6 = 8, #endif OTHER = 200, UNKNOWN = 201, diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp index 89e0458aed..ed8f4ae54f 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp @@ -30,8 +30,6 @@ #include "gccetoolchain.h" #include "qt4project.h" -#include - #include #include @@ -58,11 +56,13 @@ ToolChain::ToolChainType GCCEToolChain::type() const QList GCCEToolChain::systemHeaderPaths() { - GccToolChain::systemHeaderPaths(); - m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); - m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); - m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis\\sys").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); - m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\variant").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + if (m_systemHeaderPaths.isEmpty()) { + GccToolChain::systemHeaderPaths(); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis\\sys").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\variant").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + } return m_systemHeaderPaths; } diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri index b367a21a9f..7fd0b718b0 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri +++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri @@ -1,5 +1,5 @@ SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60) -!isEmpty(SUPPORT_QT_S60) { +!isEmpty(SUPPORT_QT_S60) { message("Adding experimental support for Qt/S60 applications.") DEFINES += QTCREATOR_WITH_S60 SOURCES += $$PWD/s60devices.cpp \ @@ -9,7 +9,8 @@ SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60) $$PWD/gccetoolchain.cpp \ $$PWD/s60emulatorrunconfiguration.cpp \ $$PWD/s60devicerunconfiguration.cpp \ - $$PWD/serialdevicelister.cpp + $$PWD/serialdevicelister.cpp \ + $$PWD/rvcttoolchain.cpp HEADERS += $$PWD/s60devices.h \ $$PWD/s60devicespreferencepane.h \ $$PWD/s60manager.h \ @@ -17,10 +18,9 @@ SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60) $$PWD/gccetoolchain.h \ $$PWD/s60emulatorrunconfiguration.h \ $$PWD/s60devicerunconfiguration.h \ - $$PWD/serialdevicelister.h + $$PWD/serialdevicelister.h \ + $$PWD/rvcttoolchain.h FORMS += $$PWD/s60devicespreferencepane.ui OTHER_FILES += $$PWD/qt-s60-todo.txt - - include($$PWD/../../../../tests/manual/trk/trklauncher.pri) || error("could not include trklauncher.pri") - # LIBS += -lUser32 -lSetupApi + include($$PWD/../../../../tests/manual/trk/trklauncher.pri)||error("could not include trklauncher.pri") } diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp new file mode 100644 index 0000000000..459d8835bf --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.cpp @@ -0,0 +1,106 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#include "rvcttoolchain.h" + +#include "qt4project.h" + +using namespace ProjectExplorer; +using namespace Qt4ProjectManager::Internal; + +RVCTToolChain::RVCTToolChain(S60Devices::Device device, ToolChain::ToolChainType type, + const QString &makeTargetBase) + : m_deviceId(device.id), + m_deviceName(device.name), + m_deviceRoot(device.epocRoot), + m_type(type), + m_makeTargetBase(makeTargetBase) +{ +} + +ToolChain::ToolChainType RVCTToolChain::type() const +{ + return m_type; +} + +QByteArray RVCTToolChain::predefinedMacros() +{ + //TODO + return QByteArray(); +} + +QList RVCTToolChain::systemHeaderPaths() +{ + if (m_systemHeaderPaths.isEmpty()) { + //TODO system header paths (from environment variables?) + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\stdapis\\sys").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + m_systemHeaderPaths.append(HeaderPath(QString("%1\\epoc32\\include\\variant").arg(m_deviceRoot), HeaderPath::GlobalHeaderPath)); + } + return m_systemHeaderPaths; +} + +void RVCTToolChain::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 RVCTToolChain::makeCommand() const +{ + return "make"; +} + +QString RVCTToolChain::defaultMakeTarget() const +{ + const Qt4Project *qt4project = qobject_cast(m_project); + if (qt4project) { + if (!(QtVersion::QmakeBuildConfig(qt4project->value( + qt4project->activeBuildConfiguration(), + "buildConfiguration").toInt()) & QtVersion::DebugBuild)) { + return QString::fromLocal8Bit("release-%1").arg(m_makeTargetBase); + } + } + return QString::fromLocal8Bit("debug-%1").arg(m_makeTargetBase); +} + +bool RVCTToolChain::equals(ToolChain *other) const +{ + return (other->type() == type() + && m_deviceId == static_cast(other)->m_deviceId + && m_deviceName == static_cast(other)->m_deviceName); +} + +void RVCTToolChain::setProject(const ProjectExplorer::Project *project) +{ + m_project = project; +} diff --git a/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h new file mode 100644 index 0000000000..8c82cfb32d --- /dev/null +++ b/src/plugins/qt4projectmanager/qt-s60/rvcttoolchain.h @@ -0,0 +1,71 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ + +#ifndef RVCTTOOLCHAIN_H +#define RVCTTOOLCHAIN_H + +#include "s60devices.h" + +#include + +namespace Qt4ProjectManager { +namespace Internal { + +class RVCTToolChain : public ProjectExplorer::ToolChain +{ +public: + RVCTToolChain(S60Devices::Device device, ProjectExplorer::ToolChain::ToolChainType type, + const QString &makeTargetBase); + virtual QByteArray predefinedMacros(); + QList systemHeaderPaths(); + void addToEnvironment(ProjectExplorer::Environment &env); + ProjectExplorer::ToolChain::ToolChainType type() const; + QString makeCommand() const; + QString defaultMakeTarget() const; + + void setProject(const ProjectExplorer::Project *project); + +protected: + bool equals(ToolChain *other) const; + +private: + QString m_deviceId; + QString m_deviceName; + QString m_deviceRoot; + const ProjectExplorer::Project *m_project; + ProjectExplorer::ToolChain::ToolChainType m_type; + QString m_makeTargetBase; + QByteArray m_predefinedMacros; + QList m_systemHeaderPaths; +}; + +} // namespace Internal +} // namespace Qt4ProjectManager + +#endif // RVCTTOOLCHAIN_H diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index 13a145aedb..0141f4e39a 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -82,7 +82,7 @@ bool S60DeviceRunConfiguration::isEnabled() const Qt4Project *pro = qobject_cast(project()); QTC_ASSERT(pro, return false); ToolChain::ToolChainType type = pro->toolChainType(pro->activeBuildConfiguration()); - return type == ToolChain::GCCE; //TODO || type == ToolChain::ARMV5 + return type == ToolChain::GCCE || type == ToolChain::RVCT_ARMV5 || type == ToolChain::RVCT_ARMV6; } QWidget *S60DeviceRunConfiguration::configurationWidget() diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp index 614a86c421..831357e8d2 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp @@ -33,6 +33,7 @@ #include "s60devicespreferencepane.h" #include "winscwtoolchain.h" #include "gccetoolchain.h" +#include "rvcttoolchain.h" #include "s60emulatorrunconfiguration.h" #include "s60Devicerunconfiguration.h" @@ -156,6 +157,23 @@ ProjectExplorer::ToolChain *S60Manager::createGCCEToolChain(const Qt4ProjectMana return new GCCEToolChain(deviceForQtVersion(version)); } +ProjectExplorer::ToolChain *S60Manager::createRVCTToolChain(const Qt4ProjectManager::QtVersion *version, + ProjectExplorer::ToolChain::ToolChainType type) const +{ + QString makeTargetBase; + switch (type) { + case ProjectExplorer::ToolChain::RVCT_ARMV5: + makeTargetBase = "armv5"; + break; + case ProjectExplorer::ToolChain::RVCT_ARMV6: + makeTargetBase = "armv6"; + break; + default: + makeTargetBase = "InternalError"; + } + return new RVCTToolChain(deviceForQtVersion(version), type, makeTargetBase); +} + S60Devices::Device S60Manager::deviceForQtVersion(const Qt4ProjectManager::QtVersion *version) const { S60Devices::Device device; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.h b/src/plugins/qt4projectmanager/qt-s60/s60manager.h index 3704771bcd..963e18777c 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.h @@ -58,6 +58,8 @@ public: ProjectExplorer::ToolChain *createWINSCWToolChain(const Qt4ProjectManager::QtVersion *version) const; ProjectExplorer::ToolChain *createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const; + ProjectExplorer::ToolChain *createRVCTToolChain(const Qt4ProjectManager::QtVersion *version, + ProjectExplorer::ToolChain::ToolChainType type) const; S60Devices *devices() const { return m_devices; } S60Devices::Device deviceForQtVersion(const Qt4ProjectManager::QtVersion *version) const; diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 54fdded94f..3c31917f4e 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -45,6 +45,7 @@ #ifdef QTCREATOR_WITH_S60 #include "qt-s60/gccetoolchain.h" +#include "qt-s60/rvcttoolchain.h" #endif #include @@ -406,6 +407,9 @@ void Qt4Project::updateToolChain(const QString &buildConfiguration) const #ifdef QTCREATOR_WITH_S60 if (m_toolChain && m_toolChain->type() == ToolChain::GCCE) { static_cast(m_toolChain)->setProject(this); + } else if (m_toolChain && (m_toolChain->type() == ToolChain::RVCT_ARMV5 + || m_toolChain->type() == ToolChain::RVCT_ARMV6)) { + static_cast(m_toolChain)->setProject(this); } #endif } diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 8196631d0b..7630d82662 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -324,26 +324,32 @@ void Qt4ProjectConfigWidget::updateToolChainCombo() foreach (ProjectExplorer::ToolChain::ToolChainType toolchain, toolchains) { switch (toolchain) { case ProjectExplorer::ToolChain::GCC: - m_ui->toolChainComboBox->addItem(tr("gcc"), qVariantFromValue(ProjectExplorer::ToolChain::GCC)); + m_ui->toolChainComboBox->addItem(tr("gcc"), qVariantFromValue(toolchain)); break; case ProjectExplorer::ToolChain::LinuxICC: - m_ui->toolChainComboBox->addItem(tr("icc"), qVariantFromValue(ProjectExplorer::ToolChain::LinuxICC)); + m_ui->toolChainComboBox->addItem(tr("icc"), qVariantFromValue(toolchain)); break; case ProjectExplorer::ToolChain::MinGW: - m_ui->toolChainComboBox->addItem(tr("mingw"), qVariantFromValue(ProjectExplorer::ToolChain::MinGW)); + m_ui->toolChainComboBox->addItem(tr("mingw"), qVariantFromValue(toolchain)); break; case ProjectExplorer::ToolChain::MSVC: - m_ui->toolChainComboBox->addItem(tr("msvc"), qVariantFromValue(ProjectExplorer::ToolChain::MSVC)); + m_ui->toolChainComboBox->addItem(tr("msvc"), qVariantFromValue(toolchain)); break; case ProjectExplorer::ToolChain::WINCE: - m_ui->toolChainComboBox->addItem(tr("wince"), qVariantFromValue(ProjectExplorer::ToolChain::WINCE)); + m_ui->toolChainComboBox->addItem(tr("wince"), qVariantFromValue(toolchain)); break; #ifdef QTCREATOR_WITH_S60 case ProjectExplorer::ToolChain::WINSCW: - m_ui->toolChainComboBox->addItem(tr("winscw"), qVariantFromValue(ProjectExplorer::ToolChain::WINSCW)); + m_ui->toolChainComboBox->addItem(tr("winscw"), qVariantFromValue(toolchain)); break; case ProjectExplorer::ToolChain::GCCE: - m_ui->toolChainComboBox->addItem(tr("gcce"), qVariantFromValue(ProjectExplorer::ToolChain::GCCE)); + m_ui->toolChainComboBox->addItem(tr("gcce"), qVariantFromValue(toolchain)); + break; + case ProjectExplorer::ToolChain::RVCT_ARMV5: + m_ui->toolChainComboBox->addItem(tr("rvct - armv5"), qVariantFromValue(toolchain)); + break; + case ProjectExplorer::ToolChain::RVCT_ARMV6: + m_ui->toolChainComboBox->addItem(tr("rvct - armv6"), qVariantFromValue(toolchain)); break; #endif case ProjectExplorer::ToolChain::OTHER: diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 06aee2bd5b..df24a8c15c 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -100,7 +100,10 @@ bool Qt4RunConfiguration::isEnabled() const Qt4Project *pro = qobject_cast(project()); QTC_ASSERT(pro, return false); ProjectExplorer::ToolChain::ToolChainType type = pro->toolChainType(pro->activeBuildConfiguration()); - return type != ProjectExplorer::ToolChain::WINSCW && type != ProjectExplorer::ToolChain::GCCE; + return type != ProjectExplorer::ToolChain::WINSCW + && type != ProjectExplorer::ToolChain::GCCE + && type != ProjectExplorer::ToolChain::RVCT_ARMV5 + && type != ProjectExplorer::ToolChain::RVCT_ARMV6; #else return true; #endif diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index 9357c50a4f..07e5a33bea 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -997,6 +997,9 @@ ProjectExplorer::ToolChain *QtVersion::createToolChain(ProjectExplorer::ToolChai tempToolchain = S60Manager::instance()->createWINSCWToolChain(this); } else if (type == ProjectExplorer::ToolChain::GCCE) { tempToolchain = S60Manager::instance()->createGCCEToolChain(this); + } else if (type == ProjectExplorer::ToolChain::RVCT_ARMV5 + || type == ProjectExplorer::ToolChain::RVCT_ARMV6) { + tempToolchain = S60Manager::instance()->createRVCTToolChain(this, type); #endif } else { qDebug()<<"Could not create ToolChain for"< QtVersion::possibleToolChainTyp toolChains << ProjectExplorer::ToolChain::LinuxICC; #ifdef QTCREATOR_WITH_S60 else if (spec.contains("symbian-abld")) - toolChains << ProjectExplorer::ToolChain::GCCE << ProjectExplorer::ToolChain::WINSCW; + toolChains << ProjectExplorer::ToolChain::GCCE + << ProjectExplorer::ToolChain::RVCT_ARMV5 + << ProjectExplorer::ToolChain::RVCT_ARMV6 + << ProjectExplorer::ToolChain::WINSCW; #endif else toolChains << ProjectExplorer::ToolChain::GCC; -- cgit v1.2.1