forked from qt-creator/qt-creator
Qnx: Add support for pure QNX configurations
This is a first patch that adds basic support to manage user's QNX configurations. Change-Id: I273939d39e4353dabc2ae3873d7d7be6b3ca9d47 Reviewed-by: Sergio Ahumada <sahumada@blackberry.com>
This commit is contained in:
committed by
Mehdi Fekari
parent
f1795d9748
commit
317fe1f447
@@ -29,23 +29,52 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "qnxconfiguration.h"
|
||||
#include "qnxqtversion.h"
|
||||
#include "qnxutils.h"
|
||||
|
||||
#include "qnxtoolchain.h"
|
||||
|
||||
#include "debugger/debuggeritem.h"
|
||||
|
||||
#include <projectexplorer/toolchainmanager.h>
|
||||
#include <projectexplorer/kit.h>
|
||||
#include <projectexplorer/kitmanager.h>
|
||||
|
||||
#include <qtsupport/baseqtversion.h>
|
||||
#include <qtsupport/qtversionmanager.h>
|
||||
#include <qtsupport/qtkitinformation.h>
|
||||
|
||||
#include <qmakeprojectmanager/qmakekitinformation.h>
|
||||
|
||||
#include <debugger/debuggeritemmanager.h>
|
||||
#include <debugger/debuggerkitinformation.h>
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QFileInfo>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
using namespace QtSupport;
|
||||
using namespace Utils;
|
||||
using namespace Debugger;
|
||||
|
||||
namespace Qnx {
|
||||
namespace Internal {
|
||||
QnxConfiguration::QnxConfiguration(const Utils::FileName &sdpEnvFile)
|
||||
: QnxBaseConfiguration(sdpEnvFile)
|
||||
{
|
||||
readInformation();
|
||||
}
|
||||
|
||||
QnxConfiguration::QnxConfiguration(const QVariantMap &data)
|
||||
: QnxBaseConfiguration(data)
|
||||
{
|
||||
readInformation();
|
||||
}
|
||||
|
||||
QString QnxConfiguration::displayName() const
|
||||
{
|
||||
return m_configName;
|
||||
}
|
||||
|
||||
bool QnxConfiguration::activate()
|
||||
@@ -64,19 +93,23 @@ bool QnxConfiguration::activate()
|
||||
}
|
||||
|
||||
// Create and register toolchain
|
||||
createToolChain(QnxArchitecture::ArmLeV7,
|
||||
tr("QCC for QNX armlev7"),
|
||||
QnxToolChain *armTc = createToolChain(ArmLeV7,
|
||||
tr("QCC for %1 (armlev7)").arg(displayName()),
|
||||
sdpPath().toString());
|
||||
createToolChain(QnxArchitecture::X86,
|
||||
tr("QCC for QNX x86"),
|
||||
QnxToolChain *x86Tc = createToolChain(X86,
|
||||
tr("QCC for %1 (x86)").arg(displayName()),
|
||||
sdpPath().toString());
|
||||
|
||||
// Create and register debuggers
|
||||
createDebuggerItem(QnxArchitecture::ArmLeV7,
|
||||
tr("Debugger for QNX armlev7"));
|
||||
QVariant armDebuggerId = createDebuggerItem(ArmLeV7,
|
||||
tr("Debugger for %1 (armlev7)").arg(displayName()));
|
||||
|
||||
createDebuggerItem(QnxArchitecture::X86,
|
||||
tr("Debugger for QNX x86"));
|
||||
QVariant x86DebuggerId = createDebuggerItem(X86,
|
||||
tr("Debugger for %1 (x86)").arg(displayName()));
|
||||
|
||||
// Create and register kits
|
||||
createKit(ArmLeV7, armTc, armDebuggerId, tr("Kit for %1 (Device)").arg(displayName()));
|
||||
createKit(X86, x86Tc, x86DebuggerId, tr("Kit for %1 (Simulator)").arg(displayName()));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -86,19 +119,34 @@ void QnxConfiguration::deactivate()
|
||||
if (!isActive())
|
||||
return;
|
||||
|
||||
QList<ProjectExplorer::ToolChain *> toolChainsToRemove;
|
||||
QList<Debugger::DebuggerItem> debuggersToRemove;
|
||||
foreach (ProjectExplorer::ToolChain *tc,
|
||||
ProjectExplorer::ToolChainManager::toolChains()) {
|
||||
if (tc->compilerCommand() == qccCompilerPath())
|
||||
ProjectExplorer::ToolChainManager::deregisterToolChain(tc);
|
||||
toolChainsToRemove.append(tc);
|
||||
}
|
||||
|
||||
foreach (Debugger::DebuggerItem debuggerItem,
|
||||
Debugger::DebuggerItemManager::debuggers()) {
|
||||
if (debuggerItem.command() == armDebuggerPath() ||
|
||||
debuggerItem.command() == x86DebuggerPath())
|
||||
Debugger::DebuggerItemManager::
|
||||
deregisterDebugger(debuggerItem.id());
|
||||
debuggersToRemove.append(debuggerItem);
|
||||
}
|
||||
|
||||
foreach (Kit *kit, KitManager::kits()) {
|
||||
if (kit->isAutoDetected()
|
||||
&& DeviceTypeKitInformation::deviceTypeId(kit) == Constants::QNX_BB_OS_TYPE
|
||||
&& toolChainsToRemove.contains(ToolChainKitInformation::toolChain(kit)))
|
||||
KitManager::deregisterKit(kit);
|
||||
}
|
||||
|
||||
foreach (ProjectExplorer::ToolChain *tc, toolChainsToRemove)
|
||||
ProjectExplorer::ToolChainManager::deregisterToolChain(tc);
|
||||
|
||||
foreach (Debugger::DebuggerItem debuggerItem, debuggersToRemove)
|
||||
Debugger::DebuggerItemManager::
|
||||
deregisterDebugger(debuggerItem.id());
|
||||
}
|
||||
|
||||
bool QnxConfiguration::isActive() const
|
||||
@@ -125,10 +173,92 @@ bool QnxConfiguration::isActive() const
|
||||
return hasToolChain && hasDebugger;
|
||||
}
|
||||
|
||||
bool QnxConfiguration::canCreateKits() const
|
||||
{
|
||||
return isValid() && (qnxQtVersion(ArmLeV7) || qnxQtVersion(X86));
|
||||
}
|
||||
|
||||
Utils::FileName QnxConfiguration::sdpPath() const
|
||||
{
|
||||
return envFile().parentDir();
|
||||
}
|
||||
|
||||
QnxQtVersion* QnxConfiguration::qnxQtVersion(QnxArchitecture arch) const
|
||||
{
|
||||
QnxQtVersion *qnxQt;
|
||||
foreach (BaseQtVersion *version,
|
||||
QtVersionManager::instance()->versions()) {
|
||||
if (version->type() == QLatin1String(Constants::QNX_QNX_QT)) {
|
||||
qnxQt = dynamic_cast<QnxQtVersion*>(version);
|
||||
if (qnxQt && qnxQt->architecture() == arch) {
|
||||
return qnxQt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
ProjectExplorer::Kit *QnxConfiguration::createKit(QnxArchitecture arch,
|
||||
QnxToolChain *toolChain,
|
||||
const QVariant &debuggerItemId,
|
||||
const QString &displayName)
|
||||
{
|
||||
QnxQtVersion *qnxQt = qnxQtVersion(arch);
|
||||
// Do not create incomplete kits if no qt qnx version found
|
||||
if (!qnxQt)
|
||||
return 0;
|
||||
|
||||
Kit *kit = new ProjectExplorer::Kit;
|
||||
|
||||
QtKitInformation::setQtVersion(kit, qnxQt);
|
||||
ToolChainKitInformation::setToolChain(kit, toolChain);
|
||||
|
||||
if (debuggerItemId.isValid())
|
||||
DebuggerKitInformation::setDebugger(kit, debuggerItemId);
|
||||
|
||||
if (arch == X86) {
|
||||
QmakeProjectManager::QmakeKitInformation::setMkspec(
|
||||
kit, FileName::fromLatin1("qnx-x86-qcc"));
|
||||
} else {
|
||||
QmakeProjectManager::QmakeKitInformation::setMkspec(
|
||||
kit, FileName::fromLatin1("qnx-armv7le-qcc"));
|
||||
}
|
||||
|
||||
DeviceTypeKitInformation::setDeviceTypeId(kit, Constants::QNX_BB_OS_TYPE);
|
||||
// TODO: Add sysroot?
|
||||
|
||||
kit->setDisplayName(displayName);
|
||||
kit->setIconPath(FileName::fromString(QLatin1String(Constants::QNX_BB_CATEGORY_ICON)));
|
||||
|
||||
kit->setAutoDetected(true);
|
||||
kit->setAutoDetectionSource(envFile().toString());
|
||||
kit->setMutable(DeviceKitInformation::id(), true);
|
||||
|
||||
kit->setSticky(ToolChainKitInformation::id(), true);
|
||||
kit->setSticky(DeviceTypeKitInformation::id(), true);
|
||||
kit->setSticky(SysRootKitInformation::id(), true);
|
||||
kit->setSticky(DebuggerKitInformation::id(), true);
|
||||
kit->setSticky(QmakeProjectManager::QmakeKitInformation::id(), true);
|
||||
|
||||
// add kit with device and qt version not sticky
|
||||
KitManager::registerKit(kit);
|
||||
return kit;
|
||||
}
|
||||
|
||||
void QnxConfiguration::readInformation()
|
||||
{
|
||||
QString qConfigPath = sdpPath().toString() + QLatin1String("/.qnx/qconfig");
|
||||
QList <ConfigInstallInformation> installInfoList = QnxUtils::installedConfigs(qConfigPath);
|
||||
if (installInfoList.isEmpty())
|
||||
return;
|
||||
|
||||
// TODO: For now (6.6) it should be one installation file. The code need to handle cases
|
||||
// where the SDP support many target/host installations (i.e many installation files).
|
||||
const ConfigInstallInformation installInfo = installInfoList.first();
|
||||
m_configName = installInfo.name;
|
||||
setVersion(QnxVersionNumber(installInfo.version));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user