diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 7c6033b5dcedfb7e01396b9d78f024787b91e7f8..c741d535441038d06a701f05d0077a2c644d819f 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 89e0458aed737902aada42fe586411dcd337be4d..ed8f4ae54f8a3d9dbf3f0b2454fb71091521195f 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 <coreplugin/icore.h> - #include <QtCore/QDir> #include <QtDebug> @@ -58,11 +56,13 @@ ToolChain::ToolChainType GCCEToolChain::type() const QList<HeaderPath> 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 b367a21a9f70e68687c7bb59076b86d16e79d831..7fd0b718b085db0e83512b8a3d3ee84519e6bb69 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 0000000000000000000000000000000000000000..459d8835bfcbb44775a8fb18d989dc5dc2c4be97 --- /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<HeaderPath> 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<const Qt4Project *>(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<RVCTToolChain *>(other)->m_deviceId + && m_deviceName == static_cast<RVCTToolChain *>(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 0000000000000000000000000000000000000000..8c82cfb32d8474cd20757f131b2734afcf641b84 --- /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 <projectexplorer/toolchain.h> + +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<ProjectExplorer::HeaderPath> 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<ProjectExplorer::HeaderPath> 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 13a145aedb29ba4b9fb7f374ed4672bdd16b5ec9..0141f4e39aa04cc5ce52fe6ee5ef9ce57fc16d99 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<Qt4Project*>(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 614a86c4215a3d02753c95a3e797f4f282517012..831357e8d2949f79b0ab06a937f39482b29f44f0 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 3704771bcd9a3ea1e421c76bb81105f8d8fcc77c..963e18777c242cda9799ea07748c997a94661af6 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 54fdded94feac2f17bb935b701a0e89990bd9f89..3c31917f4e755caaa3f565e28e47b3c43e746a3f 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 <coreplugin/icore.h> @@ -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<GCCEToolChain *>(m_toolChain)->setProject(this); + } else if (m_toolChain && (m_toolChain->type() == ToolChain::RVCT_ARMV5 + || m_toolChain->type() == ToolChain::RVCT_ARMV6)) { + static_cast<RVCTToolChain *>(m_toolChain)->setProject(this); } #endif } diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 8196631d0b6ce162531441d6675c18224619d5c5..7630d826624c149d94125b08d12d0255582dac50 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 06aee2bd5b33fe3dfb26d1913800121d2b62aa35..df24a8c15c6219aee164cca676a0bd4a249b8632 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<Qt4Project*>(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 9357c50a4faaf37a368e0bc1bd896dd1eb635adf..07e5a33bea03d4ee9ac2b90f03f42008f13a00e0 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"<<mkspec(); @@ -1087,7 +1090,10 @@ QList<ProjectExplorer::ToolChain::ToolChainType> 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;