summaryrefslogtreecommitdiff
path: root/src/plugins/baremetal
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/baremetal')
-rw-r--r--src/plugins/baremetal/CMakeLists.txt1
-rw-r--r--src/plugins/baremetal/baremetal.pro2
-rw-r--r--src/plugins/baremetal/baremetal.qbs1
-rw-r--r--src/plugins/baremetal/baremetaldebugsupport.cpp46
-rw-r--r--src/plugins/baremetal/baremetaldebugsupport.h2
-rw-r--r--src/plugins/baremetal/baremetaldevice.cpp27
-rw-r--r--src/plugins/baremetal/baremetaldevice.h6
-rw-r--r--src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp25
-rw-r--r--src/plugins/baremetal/baremetaldeviceconfigurationwidget.h7
-rw-r--r--src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp7
-rw-r--r--src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h2
-rw-r--r--src/plugins/baremetal/baremetalplugin.cpp19
-rw-r--r--src/plugins/baremetal/defaultgdbserverprovider.cpp87
-rw-r--r--src/plugins/baremetal/defaultgdbserverprovider.h21
-rw-r--r--src/plugins/baremetal/gdbserverprovider.cpp73
-rw-r--r--src/plugins/baremetal/gdbserverprovider.h20
-rw-r--r--src/plugins/baremetal/gdbserverproviderchooser.cpp2
-rw-r--r--src/plugins/baremetal/gdbserverproviderssettingspage.cpp3
-rw-r--r--src/plugins/baremetal/gdbserverproviderssettingspage.h2
-rw-r--r--src/plugins/baremetal/iarewtoolchain.cpp59
-rw-r--r--src/plugins/baremetal/iarewtoolchain.h7
-rw-r--r--src/plugins/baremetal/keiltoolchain.cpp28
-rw-r--r--src/plugins/baremetal/keiltoolchain.h8
-rw-r--r--src/plugins/baremetal/openocdgdbserverprovider.cpp39
-rw-r--r--src/plugins/baremetal/openocdgdbserverprovider.h7
-rw-r--r--src/plugins/baremetal/sdcctoolchain.cpp98
-rw-r--r--src/plugins/baremetal/sdcctoolchain.h8
-rw-r--r--src/plugins/baremetal/stlinkutilgdbserverprovider.cpp36
-rw-r--r--src/plugins/baremetal/stlinkutilgdbserverprovider.h5
29 files changed, 282 insertions, 366 deletions
diff --git a/src/plugins/baremetal/CMakeLists.txt b/src/plugins/baremetal/CMakeLists.txt
index f9d9bc0dc5..0a811d37b9 100644
--- a/src/plugins/baremetal/CMakeLists.txt
+++ b/src/plugins/baremetal/CMakeLists.txt
@@ -10,7 +10,6 @@ add_qtc_plugin(BareMetal
baremetaldeviceconfigurationwidget.cpp baremetaldeviceconfigurationwidget.h
baremetaldeviceconfigurationwizard.cpp baremetaldeviceconfigurationwizard.h
baremetaldeviceconfigurationwizardpages.cpp baremetaldeviceconfigurationwizardpages.h
- baremetalgdbcommandsdeploystep.cpp baremetalgdbcommandsdeploystep.h
baremetalplugin.cpp baremetalplugin.h
baremetalrunconfiguration.cpp baremetalrunconfiguration.h
defaultgdbserverprovider.cpp defaultgdbserverprovider.h
diff --git a/src/plugins/baremetal/baremetal.pro b/src/plugins/baremetal/baremetal.pro
index ac49b0041f..76cd5ac308 100644
--- a/src/plugins/baremetal/baremetal.pro
+++ b/src/plugins/baremetal/baremetal.pro
@@ -7,7 +7,6 @@ SOURCES += baremetalplugin.cpp \
baremetalcustomrunconfiguration.cpp\
baremetaldevice.cpp \
baremetalrunconfiguration.cpp \
- baremetalgdbcommandsdeploystep.cpp \
baremetaldeviceconfigurationwizardpages.cpp \
baremetaldeviceconfigurationwizard.cpp \
baremetaldeviceconfigurationwidget.cpp \
@@ -32,7 +31,6 @@ HEADERS += baremetalplugin.h \
baremetalcustomrunconfiguration.h \
baremetaldevice.h \
baremetalrunconfiguration.h \
- baremetalgdbcommandsdeploystep.h \
baremetaldeviceconfigurationwidget.h \
baremetaldeviceconfigurationwizard.h \
baremetaldeviceconfigurationwizardpages.h \
diff --git a/src/plugins/baremetal/baremetal.qbs b/src/plugins/baremetal/baremetal.qbs
index 018c2dc23b..b50db5769e 100644
--- a/src/plugins/baremetal/baremetal.qbs
+++ b/src/plugins/baremetal/baremetal.qbs
@@ -20,7 +20,6 @@ QtcPlugin {
"baremetaldeviceconfigurationwidget.cpp", "baremetaldeviceconfigurationwidget.h",
"baremetaldeviceconfigurationwizard.cpp", "baremetaldeviceconfigurationwizard.h",
"baremetaldeviceconfigurationwizardpages.cpp", "baremetaldeviceconfigurationwizardpages.h",
- "baremetalgdbcommandsdeploystep.cpp", "baremetalgdbcommandsdeploystep.h",
"baremetalplugin.cpp", "baremetalplugin.h",
"baremetalrunconfiguration.cpp", "baremetalrunconfiguration.h",
"baremetaldebugsupport.cpp", "baremetaldebugsupport.h",
diff --git a/src/plugins/baremetal/baremetaldebugsupport.cpp b/src/plugins/baremetal/baremetaldebugsupport.cpp
index cda24139df..a8f20e197a 100644
--- a/src/plugins/baremetal/baremetaldebugsupport.cpp
+++ b/src/plugins/baremetal/baremetaldebugsupport.cpp
@@ -25,7 +25,6 @@
#include "baremetaldebugsupport.h"
#include "baremetaldevice.h"
-#include "baremetalgdbcommandsdeploystep.h"
#include "gdbserverprovider.h"
#include "gdbserverprovidermanager.h"
@@ -48,12 +47,25 @@
using namespace Debugger;
using namespace ProjectExplorer;
+using namespace Utils;
namespace BareMetal {
namespace Internal {
// BareMetalDebugSupport
+class BareMetalGdbServer : public SimpleTargetRunner
+{
+public:
+ BareMetalGdbServer(RunControl *runControl, const Runnable &runnable)
+ : SimpleTargetRunner(runControl)
+ {
+ setId("BareMetalGdbServer");
+ // Baremetal's GDB servers are launched on the host, not on the target.
+ setStarter([this, runnable] { doStart(runnable, {}); });
+ }
+};
+
BareMetalDebugSupport::BareMetalDebugSupport(RunControl *runControl)
: Debugger::DebuggerRunTool(runControl)
{
@@ -75,9 +87,8 @@ BareMetalDebugSupport::BareMetalDebugSupport(RunControl *runControl)
r.setCommandLine(p->command());
// Command arguments are in host OS style as the bare metal's GDB servers are launched
// on the host, not on that target.
- m_gdbServer = new SimpleTargetRunner(runControl);
- m_gdbServer->setRunnable(r);
- addStartDependency(m_gdbServer);
+ auto gdbServer = new BareMetalGdbServer(runControl, r);
+ addStartDependency(gdbServer);
}
}
@@ -86,40 +97,21 @@ void BareMetalDebugSupport::start()
const auto exeAspect = runControl()->aspect<ExecutableAspect>();
QTC_ASSERT(exeAspect, reportFailure(); return);
- const QString bin = exeAspect->executable().toString();
+ const FilePath bin = exeAspect->executable();
if (bin.isEmpty()) {
reportFailure(tr("Cannot debug: Local executable is not set."));
return;
}
- if (!QFile::exists(bin)) {
- reportFailure(tr("Cannot debug: Could not find executable for \"%1\".").arg(bin));
+ if (!bin.exists()) {
+ reportFailure(tr("Cannot debug: Could not find executable for \"%1\".").arg(bin.toString()));
return;
}
- const Target *target = runControl()->target();
- QTC_ASSERT(target, reportFailure(); return);
-
const auto dev = qSharedPointerCast<const BareMetalDevice>(device());
QTC_ASSERT(dev, reportFailure(); return);
const GdbServerProvider *p = GdbServerProviderManager::findProvider(dev->gdbServerProviderId());
QTC_ASSERT(p, reportFailure(); return);
-#if 0
- // Currently baremetal plugin does not provide way to configure deployments steps
- // FIXME: Should it?
- QString commands;
- if (const BuildConfiguration *bc = target->activeBuildConfiguration()) {
- if (BuildStepList *bsl = bc->stepList(BareMetalGdbCommandsDeployStep::stepId())) {
- for (const BareMetalGdbCommandsDeployStep *bs : bsl->allOfType<BareMetalGdbCommandsDeployStep>()) {
- if (!commands.endsWith("\n"))
- commands.append("\n");
- commands.append(bs->gdbCommands());
- }
- }
- }
- setCommandsAfterConnect(commands);
-#endif
-
Runnable inferior;
inferior.executable = bin;
if (const auto aspect = runControl()->aspect<ArgumentsAspect>())
@@ -129,7 +121,7 @@ void BareMetalDebugSupport::start()
setStartMode(AttachToRemoteServer);
setCommandsAfterConnect(p->initCommands()); // .. and here?
setCommandsForReset(p->resetCommands());
- setRemoteChannel(p->channel());
+ setRemoteChannel(p->channelString());
setUseContinueInsteadOfRun(true);
setUseExtendedRemote(p->useExtendedRemote());
diff --git a/src/plugins/baremetal/baremetaldebugsupport.h b/src/plugins/baremetal/baremetaldebugsupport.h
index 3a59343a9e..cfc31017fb 100644
--- a/src/plugins/baremetal/baremetaldebugsupport.h
+++ b/src/plugins/baremetal/baremetaldebugsupport.h
@@ -41,8 +41,6 @@ public:
private:
void start() final;
-
- ProjectExplorer::SimpleTargetRunner *m_gdbServer = nullptr;
};
} // namespace Internal
diff --git a/src/plugins/baremetal/baremetaldevice.cpp b/src/plugins/baremetal/baremetaldevice.cpp
index 340ca1a229..d9901ccc58 100644
--- a/src/plugins/baremetal/baremetaldevice.cpp
+++ b/src/plugins/baremetal/baremetaldevice.cpp
@@ -50,12 +50,24 @@ const char gdbServerProviderIdKeyC[] = "GdbServerProviderId";
// BareMetalDevice
+BareMetalDevice::BareMetalDevice()
+{
+ setDisplayType(QCoreApplication::translate("BareMetal::Internal::BareMetalDevice", "Bare Metal"));
+ setDefaultDisplayName(defaultDisplayName());
+ setOsType(Utils::OsTypeOther);
+}
+
BareMetalDevice::~BareMetalDevice()
{
if (GdbServerProvider *provider = GdbServerProviderManager::findProvider(m_gdbServerProviderId))
provider->unregisterDevice(this);
}
+QString BareMetalDevice::defaultDisplayName()
+{
+ return QCoreApplication::translate("BareMetal::Internal::BareMetalDevice", "Bare Metal Device");
+}
+
QString BareMetalDevice::gdbServerProviderId() const
{
return m_gdbServerProviderId;
@@ -90,7 +102,7 @@ void BareMetalDevice::providerUpdated(GdbServerProvider *provider)
void BareMetalDevice::setChannelByServerProvider(GdbServerProvider *provider)
{
QTC_ASSERT(provider, return);
- const QString channel = provider->channel();
+ const QString channel = provider->channelString();
const int colon = channel.indexOf(QLatin1Char(':'));
if (colon < 0)
return;
@@ -111,9 +123,8 @@ void BareMetalDevice::fromMap(const QVariantMap &map)
} else {
const QSsh::SshConnectionParameters sshParams = sshParameters();
const auto newProvider = new DefaultGdbServerProvider;
+ newProvider->setChannel(sshParams.url);
newProvider->setDisplayName(name);
- newProvider->m_host = sshParams.host();
- newProvider->m_port = sshParams.port();
if (GdbServerProviderManager::registerProvider(newProvider))
gdbServerProvider = newProvider->id();
else
@@ -135,21 +146,11 @@ DeviceProcessSignalOperation::Ptr BareMetalDevice::signalOperation() const
return DeviceProcessSignalOperation::Ptr();
}
-QString BareMetalDevice::displayType() const
-{
- return QCoreApplication::translate("BareMetal::Internal::BareMetalDevice", "Bare Metal");
-}
-
IDeviceWidget *BareMetalDevice::createWidget()
{
return new BareMetalDeviceConfigurationWidget(sharedFromThis());
}
-Utils::OsType BareMetalDevice::osType() const
-{
- return Utils::OsTypeOther;
-}
-
DeviceProcess *BareMetalDevice::createProcess(QObject *parent) const
{
return new GdbServerProviderProcess(sharedFromThis(), parent);
diff --git a/src/plugins/baremetal/baremetaldevice.h b/src/plugins/baremetal/baremetaldevice.h
index b4d1b3afce..eda3f957f2 100644
--- a/src/plugins/baremetal/baremetaldevice.h
+++ b/src/plugins/baremetal/baremetaldevice.h
@@ -45,9 +45,9 @@ public:
static Ptr create() { return Ptr(new BareMetalDevice); }
~BareMetalDevice() final;
- QString displayType() const final;
+ static QString defaultDisplayName();
+
ProjectExplorer::IDeviceWidget *createWidget() final;
- Utils::OsType osType() const final;
ProjectExplorer::DeviceProcessSignalOperation::Ptr signalOperation() const final;
@@ -63,7 +63,7 @@ public:
QVariantMap toMap() const final;
private:
- explicit BareMetalDevice() = default;
+ BareMetalDevice();
void setChannelByServerProvider(GdbServerProvider *provider);
QString m_gdbServerProviderId;
diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp
index a528bd4b8e..26257ef128 100644
--- a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp
+++ b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp
@@ -30,6 +30,7 @@
#include "gdbserverprovider.h"
#include "gdbserverproviderchooser.h"
+#include <utils/pathchooser.h>
#include <utils/qtcassert.h>
#include <QFormLayout>
@@ -40,8 +41,8 @@ namespace Internal {
// BareMetalDeviceConfigurationWidget
BareMetalDeviceConfigurationWidget::BareMetalDeviceConfigurationWidget(
- const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent)
- : IDeviceWidget(deviceConfig, parent)
+ const ProjectExplorer::IDevice::Ptr &deviceConfig)
+ : IDeviceWidget(deviceConfig)
{
const auto dev = qSharedPointerCast<const BareMetalDevice>(device());
QTC_ASSERT(dev, return);
@@ -56,6 +57,19 @@ BareMetalDeviceConfigurationWidget::BareMetalDeviceConfigurationWidget(
connect(m_gdbServerProviderChooser, &GdbServerProviderChooser::providerChanged,
this, &BareMetalDeviceConfigurationWidget::gdbServerProviderChanged);
+
+ m_peripheralDescriptionFileChooser = new Utils::PathChooser(this);
+ m_peripheralDescriptionFileChooser->setExpectedKind(Utils::PathChooser::File);
+ m_peripheralDescriptionFileChooser->setPromptDialogFilter(
+ tr("Peripheral description files (*.svd)"));
+ m_peripheralDescriptionFileChooser->setPromptDialogTitle(
+ tr("Select Peripheral Description File"));
+ m_peripheralDescriptionFileChooser->setPath(dev->peripheralDescriptionFilePath());
+ formLayout->addRow(tr("Peripheral description file:"),
+ m_peripheralDescriptionFileChooser);
+
+ connect(m_peripheralDescriptionFileChooser, &Utils::PathChooser::pathChanged,
+ this, &BareMetalDeviceConfigurationWidget::peripheralDescriptionFileChanged);
}
void BareMetalDeviceConfigurationWidget::gdbServerProviderChanged()
@@ -65,6 +79,13 @@ void BareMetalDeviceConfigurationWidget::gdbServerProviderChanged()
dev->setGdbServerProviderId(m_gdbServerProviderChooser->currentProviderId());
}
+void BareMetalDeviceConfigurationWidget::peripheralDescriptionFileChanged()
+{
+ const auto dev = qSharedPointerCast<BareMetalDevice>(device());
+ QTC_ASSERT(dev, return);
+ dev->setPeripheralDescriptionFilePath(m_peripheralDescriptionFileChooser->path());
+}
+
void BareMetalDeviceConfigurationWidget::updateDeviceFromUi()
{
gdbServerProviderChanged();
diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h
index ad8017f53f..abf0c3f3e1 100644
--- a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h
+++ b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h
@@ -28,6 +28,8 @@
#include <projectexplorer/devicesupport/idevicewidget.h>
+namespace Utils { class PathChooser; }
+
namespace BareMetal {
namespace Internal {
@@ -41,14 +43,15 @@ class BareMetalDeviceConfigurationWidget final
Q_OBJECT
public:
- explicit BareMetalDeviceConfigurationWidget(
- const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent = nullptr);
+ explicit BareMetalDeviceConfigurationWidget(const ProjectExplorer::IDevice::Ptr &deviceConfig);
private:
void gdbServerProviderChanged();
+ void peripheralDescriptionFileChanged();
void updateDeviceFromUi() final;
GdbServerProviderChooser *m_gdbServerProviderChooser = nullptr;
+ Utils::PathChooser *m_peripheralDescriptionFileChooser = nullptr;
};
} // namespace Internal
diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp
index 4e0e69b4f8..53634ec239 100644
--- a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp
+++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp
@@ -62,7 +62,7 @@ BareMetalDeviceConfigurationWizardSetupPage::BareMetalDeviceConfigurationWizardS
void BareMetalDeviceConfigurationWizardSetupPage::initializePage()
{
- m_nameLineEdit->setText(defaultConfigurationName());
+ m_nameLineEdit->setText(BareMetalDevice::defaultDisplayName());
}
bool BareMetalDeviceConfigurationWizardSetupPage::isComplete() const
@@ -80,10 +80,5 @@ QString BareMetalDeviceConfigurationWizardSetupPage::gdbServerProviderId() const
return m_gdbServerProviderChooser->currentProviderId();
}
-QString BareMetalDeviceConfigurationWizardSetupPage::defaultConfigurationName() const
-{
- return tr("Bare Metal Device");
-}
-
} // namespace Internal
} // namespace BareMetal
diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h
index 27ac808108..05f16ba290 100644
--- a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h
+++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h
@@ -51,8 +51,6 @@ public:
QString configurationName() const;
QString gdbServerProviderId() const;
- virtual QString defaultConfigurationName() const;
-
private:
QLineEdit *m_nameLineEdit = nullptr;
GdbServerProviderChooser *m_gdbServerProviderChooser = nullptr;
diff --git a/src/plugins/baremetal/baremetalplugin.cpp b/src/plugins/baremetal/baremetalplugin.cpp
index 0ce4c51835..d45367ac7d 100644
--- a/src/plugins/baremetal/baremetalplugin.cpp
+++ b/src/plugins/baremetal/baremetalplugin.cpp
@@ -63,6 +63,12 @@ public:
BareMetalCustomRunConfigurationFactory customRunConfigurationFactory;
GdbServerProvidersSettingsPage gdbServerProviderSettinsPage;
GdbServerProviderManager gdbServerProviderManager;
+
+ RunWorkerFactory runWorkerFactory{
+ RunWorkerFactory::make<BareMetalDebugSupport>(),
+ {ProjectExplorer::Constants::NORMAL_RUN_MODE, ProjectExplorer::Constants::DEBUG_RUN_MODE},
+ {runConfigurationFactory.id(), customRunConfigurationFactory.id()}
+ };
};
// BareMetalPlugin
@@ -78,19 +84,6 @@ bool BareMetalPlugin::initialize(const QStringList &arguments, QString *errorStr
Q_UNUSED(errorString)
d = new BareMetalPluginPrivate;
-
- auto constraint = [](RunConfiguration *runConfig) {
- const QByteArray idStr = runConfig->id().name();
- const bool res = idStr.startsWith(BareMetalRunConfiguration::IdPrefix)
- || idStr == BareMetalCustomRunConfiguration::Id;
- return res;
- };
-
- RunControl::registerWorker<BareMetalDebugSupport>
- (ProjectExplorer::Constants::NORMAL_RUN_MODE, constraint);
- RunControl::registerWorker<BareMetalDebugSupport>
- (ProjectExplorer::Constants::DEBUG_RUN_MODE, constraint);
-
return true;
}
diff --git a/src/plugins/baremetal/defaultgdbserverprovider.cpp b/src/plugins/baremetal/defaultgdbserverprovider.cpp
index 49d126479d..189e64524b 100644
--- a/src/plugins/baremetal/defaultgdbserverprovider.cpp
+++ b/src/plugins/baremetal/defaultgdbserverprovider.cpp
@@ -38,62 +38,14 @@
namespace BareMetal {
namespace Internal {
-static const char hostKeyC[] = "BareMetal.DefaultGdbServerProvider.Host";
-static const char portKeyC[] = "BareMetal.DefaultGdbServerProvider.Port";
-
// DefaultGdbServerProvider
DefaultGdbServerProvider::DefaultGdbServerProvider()
: GdbServerProvider(QLatin1String(Constants::DEFAULT_PROVIDER_ID))
{
-}
-
-DefaultGdbServerProvider::DefaultGdbServerProvider(const DefaultGdbServerProvider &other) = default;
-
-quint16 DefaultGdbServerProvider::port() const
-{
- return m_port;
-}
-
-void DefaultGdbServerProvider::setPort(const quint16 &port)
-{
- m_port = port;
-}
-
-QString DefaultGdbServerProvider::host() const
-{
- return m_host;
-}
-
-void DefaultGdbServerProvider::setHost(const QString &host)
-{
- if (m_host == host)
- return;
- m_host = host;
- providerUpdated();
-}
-
-QString DefaultGdbServerProvider::typeDisplayName() const
-{
- return DefaultGdbServerProviderFactory::tr("Default");
-}
-
-QString DefaultGdbServerProvider::channel() const
-{
- // Just return as "host:port" form.
- if (m_port == 0)
- return m_host;
- return m_host + QLatin1Char(':') + QString::number(m_port);
-}
-
-bool DefaultGdbServerProvider::isValid() const
-{
- if (!GdbServerProvider::isValid())
- return false;
-
- if (m_host.isEmpty())
- return false;
- return true;
+ setDefaultChannel("localhost", 3333);
+ setSettingsKeyBase("BareMetal.DefaultGdbServerProvider");
+ setTypeDisplayName(DefaultGdbServerProviderFactory::tr("Default"));
}
GdbServerProvider *DefaultGdbServerProvider::clone() const
@@ -101,33 +53,6 @@ GdbServerProvider *DefaultGdbServerProvider::clone() const
return new DefaultGdbServerProvider(*this);
}
-QVariantMap DefaultGdbServerProvider::toMap() const
-{
- auto data = GdbServerProvider::toMap();
- data.insert(QLatin1String(hostKeyC), m_host);
- data.insert(QLatin1String(portKeyC), m_port);
- return data;
-}
-
-bool DefaultGdbServerProvider::fromMap(const QVariantMap &data)
-{
- if (!GdbServerProvider::fromMap(data))
- return false;
-
- m_host = data.value(QLatin1String(hostKeyC)).toString();
- m_port = data.value(QLatin1String(portKeyC)).toInt();
- return true;
-}
-
-bool DefaultGdbServerProvider::operator==(const GdbServerProvider &other) const
-{
- if (!GdbServerProvider::operator==(other))
- return false;
-
- const auto p = static_cast<const DefaultGdbServerProvider *>(&other);
- return m_host == p->m_host && m_port == p->m_port;
-}
-
GdbServerProviderConfigWidget *DefaultGdbServerProvider::configurationWidget()
{
return new DefaultGdbServerProviderConfigWidget(this);
@@ -206,8 +131,7 @@ void DefaultGdbServerProviderConfigWidget::applyImpl()
auto p = static_cast<DefaultGdbServerProvider *>(provider());
Q_ASSERT(p);
- p->setHost(m_hostWidget->host());
- p->setPort(m_hostWidget->port());
+ p->setChannel(m_hostWidget->channel());
p->setUseExtendedRemote(m_useExtendedRemoteCheckBox->isChecked());
p->setInitCommands(m_initCommandsTextEdit->toPlainText());
p->setResetCommands(m_resetCommandsTextEdit->toPlainText());
@@ -224,8 +148,7 @@ void DefaultGdbServerProviderConfigWidget::setFromProvider()
Q_ASSERT(p);
const QSignalBlocker blocker(this);
- m_hostWidget->setHost(p->m_host);
- m_hostWidget->setPort(p->m_port);
+ m_hostWidget->setChannel(p->channel());
m_useExtendedRemoteCheckBox->setChecked(p->useExtendedRemote());
m_initCommandsTextEdit->setPlainText(p->initCommands());
m_resetCommandsTextEdit->setPlainText(p->resetCommands());
diff --git a/src/plugins/baremetal/defaultgdbserverprovider.h b/src/plugins/baremetal/defaultgdbserverprovider.h
index 82b7e78160..8beb9b7b77 100644
--- a/src/plugins/baremetal/defaultgdbserverprovider.h
+++ b/src/plugins/baremetal/defaultgdbserverprovider.h
@@ -38,32 +38,11 @@ class DefaultGdbServerProviderFactory;
class DefaultGdbServerProvider final : public GdbServerProvider
{
public:
- QString typeDisplayName() const final;
-
- QVariantMap toMap() const final;
- bool fromMap(const QVariantMap &data) final;
-
- bool operator==(const GdbServerProvider &) const final;
-
GdbServerProviderConfigWidget *configurationWidget() final;
GdbServerProvider *clone() const final;
- QString channel() const final;
-
- bool isValid() const final;
-
- QString host() const;
- void setHost(const QString &host);
-
- quint16 port() const;
- void setPort(const quint16 &port);
-
private:
explicit DefaultGdbServerProvider();
- explicit DefaultGdbServerProvider(const DefaultGdbServerProvider &);
-
- QString m_host = QLatin1String("localhost");
- quint16 m_port = 3333;
friend class DefaultGdbServerProviderConfigWidget;
friend class DefaultGdbServerProviderFactory;
diff --git a/src/plugins/baremetal/gdbserverprovider.cpp b/src/plugins/baremetal/gdbserverprovider.cpp
index 520e8fb30f..a916146c38 100644
--- a/src/plugins/baremetal/gdbserverprovider.cpp
+++ b/src/plugins/baremetal/gdbserverprovider.cpp
@@ -49,6 +49,9 @@ const char initCommandsKeyC[] = "BareMetal.GdbServerProvider.InitCommands";
const char resetCommandsKeyC[] = "BareMetal.GdbServerProvider.ResetCommands";
const char useExtendedRemoteKeyC[] = "BareMetal.GdbServerProvider.UseExtendedRemote";
+const char hostKeySuffixC[] = ".Host";
+const char portKeySuffixC[] = ".Port";
+
static QString createId(const QString &id)
{
QString newId = id.left(id.indexOf(QLatin1Char(':')));
@@ -128,6 +131,11 @@ bool GdbServerProvider::useExtendedRemote() const
return m_useExtendedRemote;
}
+QString GdbServerProvider::typeDisplayName() const
+{
+ return m_typeDisplayName;
+}
+
void GdbServerProvider::setUseExtendedRemote(bool useExtendedRemote)
{
m_useExtendedRemote = useExtendedRemote;
@@ -143,6 +151,22 @@ void GdbServerProvider::setResetCommands(const QString &cmds)
m_resetCommands = cmds;
}
+void GdbServerProvider::setChannel(const QUrl &channel)
+{
+ m_channel = channel;
+}
+
+void GdbServerProvider::setDefaultChannel(const QString &host, int port)
+{
+ m_channel.setHost(host);
+ m_channel.setPort(port);
+}
+
+QUrl GdbServerProvider::channel() const
+{
+ return m_channel;
+}
+
Utils::CommandLine GdbServerProvider::command() const
{
return {};
@@ -158,12 +182,21 @@ bool GdbServerProvider::operator==(const GdbServerProvider &other) const
// We ignore displayname
return thisId == otherId
+ && m_channel == other.m_channel
&& m_startupMode == other.m_startupMode
&& m_initCommands == other.m_initCommands
&& m_resetCommands == other.m_resetCommands
&& m_useExtendedRemote == other.m_useExtendedRemote;
}
+QString GdbServerProvider::channelString() const
+{
+ // Just return as "host:port" form.
+ if (m_channel.port() <= 0)
+ return m_channel.host();
+ return m_channel.host() + ':' + QString::number(m_channel.port());
+}
+
QVariantMap GdbServerProvider::toMap() const
{
return {
@@ -173,12 +206,14 @@ QVariantMap GdbServerProvider::toMap() const
{QLatin1String(initCommandsKeyC), m_initCommands},
{QLatin1String(resetCommandsKeyC), m_resetCommands},
{QLatin1String(useExtendedRemoteKeyC), m_useExtendedRemote},
+ {m_settingsBase + hostKeySuffixC, m_channel.host()},
+ {m_settingsBase + portKeySuffixC, m_channel.port()},
};
}
bool GdbServerProvider::isValid() const
{
- return !channel().isNull();
+ return !channelString().isEmpty();
}
bool GdbServerProvider::canStartupMode(StartupMode m) const
@@ -211,9 +246,22 @@ bool GdbServerProvider::fromMap(const QVariantMap &data)
m_initCommands = data.value(QLatin1String(initCommandsKeyC)).toString();
m_resetCommands = data.value(QLatin1String(resetCommandsKeyC)).toString();
m_useExtendedRemote = data.value(QLatin1String(useExtendedRemoteKeyC)).toBool();
+ m_channel.setHost(data.value(m_settingsBase + hostKeySuffixC).toString());
+ m_channel.setPort(data.value(m_settingsBase + portKeySuffixC).toInt());
+
return true;
}
+void GdbServerProvider::setTypeDisplayName(const QString &typeDisplayName)
+{
+ m_typeDisplayName = typeDisplayName;
+}
+
+void GdbServerProvider::setSettingsKeyBase(const QString &settingsBase)
+{
+ m_settingsBase = settingsBase;
+}
+
// GdbServerProviderFactory
QString GdbServerProviderFactory::id() const
@@ -410,26 +458,19 @@ HostWidget::HostWidget(QWidget *parent)
this, &HostWidget::dataChanged);
}
-void HostWidget::setHost(const QString &host)
-{
- const QSignalBlocker blocker(this);
- m_hostLineEdit->setText(host);
-}
-
-QString HostWidget::host() const
-{
- return m_hostLineEdit->text();
-}
-
-void HostWidget::setPort(const quint16 &port)
+void HostWidget::setChannel(const QUrl &channel)
{
const QSignalBlocker blocker(this);
- m_portSpinBox->setValue(port);
+ m_hostLineEdit->setText(channel.host());
+ m_portSpinBox->setValue(channel.port());
}
-quint16 HostWidget::port() const
+QUrl HostWidget::channel() const
{
- return m_portSpinBox->value();
+ QUrl url;
+ url.setHost(m_hostLineEdit->text());
+ url.setPort(m_portSpinBox->value());
+ return url;
}
} // namespace Internal
diff --git a/src/plugins/baremetal/gdbserverprovider.h b/src/plugins/baremetal/gdbserverprovider.h
index 8d91408a2e..5a6bc246a5 100644
--- a/src/plugins/baremetal/gdbserverprovider.h
+++ b/src/plugins/baremetal/gdbserverprovider.h
@@ -72,14 +72,13 @@ public:
QString initCommands() const;
QString resetCommands() const;
bool useExtendedRemote() const;
+ QString typeDisplayName() const;
virtual bool operator==(const GdbServerProvider &) const;
- virtual QString typeDisplayName() const = 0;
-
virtual GdbServerProviderConfigWidget *configurationWidget() = 0;
- virtual QString channel() const = 0;
+ virtual QString channelString() const;
virtual GdbServerProvider *clone() const = 0;
virtual QVariantMap toMap() const;
@@ -92,6 +91,10 @@ public:
void registerDevice(BareMetalDevice *);
void unregisterDevice(BareMetalDevice *);
+ QUrl channel() const;
+ void setChannel(const QUrl &channelString);
+ void setDefaultChannel(const QString &host, int port);
+
protected:
explicit GdbServerProvider(const QString &id);
explicit GdbServerProvider(const GdbServerProvider &);
@@ -100,6 +103,8 @@ protected:
void setInitCommands(const QString &);
void setResetCommands(const QString &);
void setUseExtendedRemote(bool);
+ void setSettingsKeyBase(const QString &settingsBase);
+ void setTypeDisplayName(const QString &typeDisplayName);
void providerUpdated();
@@ -107,7 +112,10 @@ protected:
private:
QString m_id;
+ QString m_settingsBase;
mutable QString m_displayName;
+ QString m_typeDisplayName;
+ QUrl m_channel;
StartupMode m_startupMode = NoStartup;
QString m_initCommands;
QString m_resetCommands;
@@ -195,10 +203,8 @@ class HostWidget final : public QWidget
public:
explicit HostWidget(QWidget *parent = nullptr);
- void setHost(const QString &host);
- QString host() const;
- void setPort(const quint16 &port);
- quint16 port() const;
+ void setChannel(const QUrl &host);
+ QUrl channel() const;
signals:
void dataChanged();
diff --git a/src/plugins/baremetal/gdbserverproviderchooser.cpp b/src/plugins/baremetal/gdbserverproviderchooser.cpp
index 764a9ee0cd..768c2d205f 100644
--- a/src/plugins/baremetal/gdbserverproviderchooser.cpp
+++ b/src/plugins/baremetal/gdbserverproviderchooser.cpp
@@ -87,7 +87,7 @@ void GdbServerProviderChooser::manageButtonClicked()
void GdbServerProviderChooser::currentIndexChanged(int index)
{
- Q_UNUSED(index);
+ Q_UNUSED(index)
emit providerChanged();
}
diff --git a/src/plugins/baremetal/gdbserverproviderssettingspage.cpp b/src/plugins/baremetal/gdbserverproviderssettingspage.cpp
index b538ebce33..fb78ef713e 100644
--- a/src/plugins/baremetal/gdbserverproviderssettingspage.cpp
+++ b/src/plugins/baremetal/gdbserverproviderssettingspage.cpp
@@ -406,8 +406,7 @@ QModelIndex GdbServerProvidersSettingsWidget::currentIndex() const
}
-GdbServerProvidersSettingsPage::GdbServerProvidersSettingsPage(QObject *parent)
- : Core::IOptionsPage(parent)
+GdbServerProvidersSettingsPage::GdbServerProvidersSettingsPage()
{
setId(Constants::GDB_PROVIDERS_SETTINGS_ID);
setDisplayName(tr("Bare Metal"));
diff --git a/src/plugins/baremetal/gdbserverproviderssettingspage.h b/src/plugins/baremetal/gdbserverproviderssettingspage.h
index a68515526e..c41389b307 100644
--- a/src/plugins/baremetal/gdbserverproviderssettingspage.h
+++ b/src/plugins/baremetal/gdbserverproviderssettingspage.h
@@ -87,7 +87,7 @@ class GdbServerProvidersSettingsPage final : public Core::IOptionsPage
Q_OBJECT
public:
- explicit GdbServerProvidersSettingsPage(QObject *parent = nullptr);
+ GdbServerProvidersSettingsPage();
private:
QWidget *widget() final;
diff --git a/src/plugins/baremetal/iarewtoolchain.cpp b/src/plugins/baremetal/iarewtoolchain.cpp
index c0684f008c..75dbee8cb5 100644
--- a/src/plugins/baremetal/iarewtoolchain.cpp
+++ b/src/plugins/baremetal/iarewtoolchain.cpp
@@ -71,8 +71,10 @@ static QString cppLanguageOption(const FilePath &compiler)
const QString baseName = compiler.toFileInfo().baseName();
if (baseName == "iccarm")
return QString("--c++");
- if (baseName == "icc8051" || baseName == "iccavr")
+ if (baseName == "icc8051" || baseName == "iccavr"
+ || baseName == "iccstm8" || baseName == "icc430") {
return QString("--ec++");
+ }
return {};
}
@@ -95,17 +97,16 @@ static Macros dumpPredefinedMacros(const FilePath &compiler, const Core::Id lang
cpp.setEnvironment(env);
cpp.setTimeoutS(10);
- QStringList arguments;
- arguments.push_back(fakeIn.fileName());
+ CommandLine cmd(compiler, {fakeIn.fileName()});
if (languageId == ProjectExplorer::Constants::CXX_LANGUAGE_ID)
- arguments.push_back(cppLanguageOption(compiler));
- arguments.push_back("--predef_macros");
- arguments.push_back(outpath);
+ cmd.addArg(cppLanguageOption(compiler));
+ cmd.addArg("--predef_macros");
+ cmd.addArg(outpath);
- const SynchronousProcessResponse response = cpp.runBlocking(compiler.toString(), arguments);
+ const SynchronousProcessResponse response = cpp.runBlocking(cmd);
if (response.result != SynchronousProcessResponse::Finished
|| response.exitCode != 0) {
- qWarning() << response.exitMessage(compiler.toString(), 10);
+ qWarning() << response.exitMessage(cmd.toUserOutput(), 10);
return {};
}
@@ -141,16 +142,14 @@ static HeaderPaths dumpHeaderPaths(const FilePath &compiler, const Core::Id lang
cpp.setEnvironment(env);
cpp.setTimeoutS(10);
- QStringList arguments;
- arguments.push_back(fakeIn.fileName());
+ CommandLine cmd(compiler, {fakeIn.fileName()});
if (languageId == ProjectExplorer::Constants::CXX_LANGUAGE_ID)
- arguments.push_back(cppLanguageOption(compiler));
- arguments.push_back("--preinclude");
- arguments.push_back(".");
+ cmd.addArg(cppLanguageOption(compiler));
+ cmd.addArg("--preinclude");
+ cmd.addArg(".");
// Note: Response should retutn an error, just don't check on errors.
- const SynchronousProcessResponse response = cpp.runBlocking(compiler.toString(),
- arguments);
+ const SynchronousProcessResponse response = cpp.runBlocking(cmd);
HeaderPaths headerPaths;
@@ -192,6 +191,10 @@ static Abi::Architecture guessArchitecture(const Macros &macros)
return Abi::Architecture::Mcs51Architecture;
if (macro.key == "__ICCAVR__")
return Abi::Architecture::AvrArchitecture;
+ if (macro.key == "__ICCSTM8__")
+ return Abi::Architecture::Stm8Architecture;
+ if (macro.key == "__ICC430__")
+ return Abi::Architecture::Msp430Architecture;
}
return Abi::Architecture::UnknownArchitecture;
}
@@ -208,10 +211,13 @@ static unsigned char guessWordWidth(const Macros &macros)
static Abi::BinaryFormat guessFormat(Abi::Architecture arch)
{
- if (arch == Abi::Architecture::ArmArchitecture)
+ if (arch == Abi::Architecture::ArmArchitecture
+ || arch == Abi::Architecture::Stm8Architecture) {
return Abi::BinaryFormat::ElfFormat;
+ }
if (arch == Abi::Architecture::Mcs51Architecture
- || arch == Abi::Architecture::AvrArchitecture) {
+ || arch == Abi::Architecture::AvrArchitecture
+ || arch == Abi::Architecture::Msp430Architecture) {
return Abi::BinaryFormat::UbrofFormat;
}
return Abi::BinaryFormat::UnknownFormat;
@@ -237,11 +243,8 @@ static QString buildDisplayName(Abi::Architecture arch, Core::Id language,
IarToolChain::IarToolChain() :
ToolChain(Constants::IAREW_TOOLCHAIN_TYPEID)
-{ }
-
-QString IarToolChain::typeDisplayName() const
{
- return Internal::IarToolChainFactory::tr("IAREW");
+ setTypeDisplayName(Internal::IarToolChainFactory::tr("IAREW"));
}
void IarToolChain::setTargetAbi(const Abi &abi)
@@ -300,11 +303,12 @@ Utils::LanguageExtensions IarToolChain::languageExtensions(const QStringList &)
WarningFlags IarToolChain::warningFlags(const QStringList &cxxflags) const
{
- Q_UNUSED(cxxflags);
+ Q_UNUSED(cxxflags)
return WarningFlags::Default;
}
-ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner() const
+ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner(
+ const Environment &) const
{
Environment env = Environment::systemEnvironment();
addToEnvironment(env);
@@ -328,9 +332,10 @@ ToolChain::BuiltInHeaderPathsRunner IarToolChain::createBuiltInHeaderPathsRunner
}
HeaderPaths IarToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
- const FilePath &fileName) const
+ const FilePath &fileName,
+ const Environment &env) const
{
- return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
+ return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
}
void IarToolChain::addToEnvironment(Environment &env) const
@@ -430,6 +435,8 @@ QList<ToolChain *> IarToolChainFactory::autoDetect(const QList<ToolChain *> &alr
{{"EWARM"}, {"\\arm\\bin\\iccarm.exe"}},
{{"EWAVR"}, {"\\avr\\bin\\iccavr.exe"}},
{{"EW8051"}, {"\\8051\\bin\\icc8051.exe"}},
+ {{"EWSTM8"}, {"\\stm8\\bin\\iccstm8.exe"}},
+ {{"EW430"}, {"\\430\\bin\\icc430.exe"}},
};
QSettings registry(kRegistryNode, QSettings::NativeFormat);
@@ -447,7 +454,7 @@ QList<ToolChain *> IarToolChainFactory::autoDetect(const QList<ToolChain *> &alr
if (!compilerPath.isEmpty()) {
// Build full compiler path.
compilerPath += entry.subExePath;
- const FileName fn = FileName::fromString(compilerPath);
+ const FilePath fn = FilePath::fromString(compilerPath);
if (compilerExists(fn)) {
// Note: threeLevelKey is a guessed toolchain version.
candidates.push_back({fn, threeLevelKey});
diff --git a/src/plugins/baremetal/iarewtoolchain.h b/src/plugins/baremetal/iarewtoolchain.h
index 019c9e7185..0ad3dd6ddc 100644
--- a/src/plugins/baremetal/iarewtoolchain.h
+++ b/src/plugins/baremetal/iarewtoolchain.h
@@ -52,8 +52,6 @@ class IarToolChain final : public ProjectExplorer::ToolChain
Q_DECLARE_TR_FUNCTIONS(IarToolChain)
public:
- QString typeDisplayName() const final;
-
void setTargetAbi(const ProjectExplorer::Abi &abi);
ProjectExplorer::Abi targetAbi() const final;
@@ -65,9 +63,10 @@ public:
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
- BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const final;
+ BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &) const final;
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
- const Utils::FilePath &) const final;
+ const Utils::FilePath &,
+ const Utils::Environment &env) const final;
void addToEnvironment(Utils::Environment &env) const final;
ProjectExplorer::IOutputParser *outputParser() const final;
diff --git a/src/plugins/baremetal/keiltoolchain.cpp b/src/plugins/baremetal/keiltoolchain.cpp
index 303efa3440..eb6afe8e0e 100644
--- a/src/plugins/baremetal/keiltoolchain.cpp
+++ b/src/plugins/baremetal/keiltoolchain.cpp
@@ -102,13 +102,12 @@ static Macros dumpC51PredefinedMacros(const FilePath &compiler, const QStringLis
cpp.setEnvironment(env);
cpp.setTimeoutS(10);
- QStringList arguments;
- arguments.push_back(fakeIn.fileName());
+ const CommandLine cmd(compiler, {fakeIn.fileName()});
- const SynchronousProcessResponse response = cpp.runBlocking(compiler.toString(), arguments);
+ const SynchronousProcessResponse response = cpp.runBlocking(cmd);
if (response.result != SynchronousProcessResponse::Finished
|| response.exitCode != 0) {
- qWarning() << response.exitMessage(compiler.toString(), 10);
+ qWarning() << response.exitMessage(cmd.toUserOutput(), 10);
return {};
}
@@ -131,11 +130,9 @@ static Macros dumpArmPredefinedMacros(const FilePath &compiler, const QStringLis
cpp.setEnvironment(env);
cpp.setTimeoutS(10);
- QStringList arguments;
- arguments.push_back("-E");
- arguments.push_back("--list-macros");
+ const CommandLine cmd(compiler, {"-E", "--list-macros"});
- const SynchronousProcessResponse response = cpp.runBlocking(compiler.toString(), arguments);
+ const SynchronousProcessResponse response = cpp.runBlocking(cmd);
if (response.result != SynchronousProcessResponse::Finished
|| response.exitCode != 0) {
qWarning() << response.exitMessage(compiler.toString(), 10);
@@ -241,11 +238,8 @@ static QString buildDisplayName(Abi::Architecture arch, Core::Id language,
KeilToolchain::KeilToolchain() :
ToolChain(Constants::KEIL_TOOLCHAIN_TYPEID)
-{ }
-
-QString KeilToolchain::typeDisplayName() const
{
- return Internal::KeilToolchainFactory::tr("KEIL");
+ setTypeDisplayName(Internal::KeilToolchainFactory::tr("KEIL"));
}
void KeilToolchain::setTargetAbi(const Abi &abi)
@@ -300,11 +294,12 @@ Utils::LanguageExtensions KeilToolchain::languageExtensions(const QStringList &)
WarningFlags KeilToolchain::warningFlags(const QStringList &cxxflags) const
{
- Q_UNUSED(cxxflags);
+ Q_UNUSED(cxxflags)
return WarningFlags::Default;
}
-ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunner() const
+ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunner(
+ const Environment &) const
{
const Utils::FilePath compilerCommand = m_compilerCommand;
@@ -323,9 +318,10 @@ ToolChain::BuiltInHeaderPathsRunner KeilToolchain::createBuiltInHeaderPathsRunne
}
HeaderPaths KeilToolchain::builtInHeaderPaths(const QStringList &cxxFlags,
- const FilePath &fileName) const
+ const FilePath &fileName,
+ const Environment &env) const
{
- return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
+ return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
}
void KeilToolchain::addToEnvironment(Environment &env) const
diff --git a/src/plugins/baremetal/keiltoolchain.h b/src/plugins/baremetal/keiltoolchain.h
index 5ccf9e05ff..b3ea5717b6 100644
--- a/src/plugins/baremetal/keiltoolchain.h
+++ b/src/plugins/baremetal/keiltoolchain.h
@@ -52,8 +52,6 @@ class KeilToolchain final : public ProjectExplorer::ToolChain
Q_DECLARE_TR_FUNCTIONS(KeilToolchain)
public:
- QString typeDisplayName() const final;
-
void setTargetAbi(const ProjectExplorer::Abi &abi);
ProjectExplorer::Abi targetAbi() const final;
@@ -65,9 +63,11 @@ public:
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
- BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const final;
+ BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
+ const Utils::Environment &) const final;
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
- const Utils::FilePath &) const final;
+ const Utils::FilePath &,
+ const Utils::Environment &env) const final;
void addToEnvironment(Utils::Environment &env) const final;
ProjectExplorer::IOutputParser *outputParser() const final;
diff --git a/src/plugins/baremetal/openocdgdbserverprovider.cpp b/src/plugins/baremetal/openocdgdbserverprovider.cpp
index b7044defe0..04b1b88cc5 100644
--- a/src/plugins/baremetal/openocdgdbserverprovider.cpp
+++ b/src/plugins/baremetal/openocdgdbserverprovider.cpp
@@ -46,8 +46,6 @@ using namespace Utils;
namespace BareMetal {
namespace Internal {
-const char hostKeyC[] = "BareMetal.OpenOcdGdbServerProvider.Host";
-const char portKeyC[] = "BareMetal.OpenOcdGdbServerProvider.Port";
const char executableFileKeyC[] = "BareMetal.OpenOcdGdbServerProvider.ExecutableFile";
const char rootScriptsDirKeyC[] = "BareMetal.OpenOcdGdbServerProvider.RootScriptsDir";
const char configurationFileKeyC[] = "BareMetal.OpenOcdGdbServerProvider.ConfigurationPath";
@@ -60,11 +58,11 @@ OpenOcdGdbServerProvider::OpenOcdGdbServerProvider()
{
setInitCommands(defaultInitCommands());
setResetCommands(defaultResetCommands());
+ setDefaultChannel("localhost", 3333);
+ setSettingsKeyBase("BareMetal.OpenOcdGdbServerProvider");
+ setTypeDisplayName(OpenOcdGdbServerProviderFactory::tr("OpenOCD"));
}
-OpenOcdGdbServerProvider::OpenOcdGdbServerProvider(
- const OpenOcdGdbServerProvider &other) = default;
-
QString OpenOcdGdbServerProvider::defaultInitCommands()
{
return QLatin1String("set remote hardware-breakpoint-limit 6\n"
@@ -79,19 +77,14 @@ QString OpenOcdGdbServerProvider::defaultResetCommands()
return QLatin1String("monitor reset halt\n");
}
-QString OpenOcdGdbServerProvider::typeDisplayName() const
-{
- return OpenOcdGdbServerProviderFactory::tr("OpenOCD");
-}
-
-QString OpenOcdGdbServerProvider::channel() const
+QString OpenOcdGdbServerProvider::channelString() const
{
switch (startupMode()) {
case NoStartup:
// fallback
case StartupOnNetwork:
// Just return as "host:port" form.
- return m_host + QLatin1Char(':') + QString::number(m_port);
+ return GdbServerProvider::channelString();
case StartupOnPipe: {
// In the pipe mode need to add quotes to each item of arguments;
// otherwise running will be stuck.
@@ -112,13 +105,13 @@ QString OpenOcdGdbServerProvider::channel() const
CommandLine OpenOcdGdbServerProvider::command() const
{
- CommandLine cmd{m_executableFile, {}};
+ CommandLine cmd{m_executableFile};
cmd.addArg("-c");
if (startupMode() == StartupOnPipe)
cmd.addArg("gdb_port pipe");
else
- cmd.addArg("gdb_port " + QString::number(m_port));
+ cmd.addArg("gdb_port " + QString::number(channel().port()));
if (!m_rootScriptsDir.isEmpty())
cmd.addArgs({"-s", m_rootScriptsDir});
@@ -127,7 +120,7 @@ CommandLine OpenOcdGdbServerProvider::command() const
cmd.addArgs({"-f", m_configurationFile});
if (!m_additionalArguments.isEmpty())
- cmd.addArgs(m_additionalArguments);
+ cmd.addArgs(m_additionalArguments, CommandLine::Raw);
return cmd;
}
@@ -145,7 +138,7 @@ bool OpenOcdGdbServerProvider::isValid() const
const StartupMode m = startupMode();
if (m == NoStartup || m == StartupOnNetwork) {
- if (m_host.isEmpty())
+ if (channel().host().isEmpty())
return false;
}
@@ -165,8 +158,6 @@ GdbServerProvider *OpenOcdGdbServerProvider::clone() const
QVariantMap OpenOcdGdbServerProvider::toMap() const
{
QVariantMap data = GdbServerProvider::toMap();
- data.insert(QLatin1String(hostKeyC), m_host);
- data.insert(QLatin1String(portKeyC), m_port);
data.insert(QLatin1String(executableFileKeyC), m_executableFile.toVariant());
data.insert(QLatin1String(rootScriptsDirKeyC), m_rootScriptsDir);
data.insert(QLatin1String(configurationFileKeyC), m_configurationFile);
@@ -179,8 +170,6 @@ bool OpenOcdGdbServerProvider::fromMap(const QVariantMap &data)
if (!GdbServerProvider::fromMap(data))
return false;
- m_host = data.value(QLatin1String(hostKeyC)).toString();
- m_port = data.value(QLatin1String(portKeyC)).toInt();
m_executableFile = FilePath::fromVariant(data.value(QLatin1String(executableFileKeyC)));
m_rootScriptsDir = data.value(QLatin1String(rootScriptsDirKeyC)).toString();
m_configurationFile = data.value(QLatin1String(configurationFileKeyC)).toString();
@@ -194,9 +183,7 @@ bool OpenOcdGdbServerProvider::operator==(const GdbServerProvider &other) const
return false;
const auto p = static_cast<const OpenOcdGdbServerProvider *>(&other);
- return m_host == p->m_host
- && m_port == p->m_port
- && m_executableFile == p->m_executableFile
+ return m_executableFile == p->m_executableFile
&& m_rootScriptsDir == p->m_rootScriptsDir
&& m_configurationFile == p->m_configurationFile
&& m_additionalArguments == p->m_additionalArguments;
@@ -320,8 +307,7 @@ void OpenOcdGdbServerProviderConfigWidget::applyImpl()
const auto p = static_cast<OpenOcdGdbServerProvider *>(provider());
Q_ASSERT(p);
- p->m_host = m_hostWidget->host();
- p->m_port = m_hostWidget->port();
+ p->setChannel(m_hostWidget->channel());
p->m_executableFile = m_executableFileChooser->fileName();
p->m_rootScriptsDir = m_rootScriptsDirChooser->fileName().toString();
p->m_configurationFile = m_configurationFileChooser->fileName().toString();
@@ -342,8 +328,7 @@ void OpenOcdGdbServerProviderConfigWidget::setFromProvider()
const QSignalBlocker blocker(this);
startupModeChanged();
- m_hostWidget->setHost(p->m_host);
- m_hostWidget->setPort(p->m_port);
+ m_hostWidget->setChannel(p->channel());
m_executableFileChooser->setFileName(p->m_executableFile);
m_rootScriptsDirChooser->setFileName(Utils::FilePath::fromString(p->m_rootScriptsDir));
m_configurationFileChooser->setFileName(Utils::FilePath::fromString(p->m_configurationFile));
diff --git a/src/plugins/baremetal/openocdgdbserverprovider.h b/src/plugins/baremetal/openocdgdbserverprovider.h
index 229b12bf61..ceb5329c37 100644
--- a/src/plugins/baremetal/openocdgdbserverprovider.h
+++ b/src/plugins/baremetal/openocdgdbserverprovider.h
@@ -40,8 +40,6 @@ class OpenOcdGdbServerProviderFactory;
class OpenOcdGdbServerProvider final : public GdbServerProvider
{
public:
- QString typeDisplayName() const final;
-
QVariantMap toMap() const final;
bool fromMap(const QVariantMap &data) final;
@@ -50,7 +48,7 @@ public:
GdbServerProviderConfigWidget *configurationWidget() final;
GdbServerProvider *clone() const final;
- QString channel() const final;
+ QString channelString() const final;
Utils::CommandLine command() const final;
bool canStartupMode(StartupMode mode) const final;
@@ -58,13 +56,10 @@ public:
private:
explicit OpenOcdGdbServerProvider();
- explicit OpenOcdGdbServerProvider(const OpenOcdGdbServerProvider &);
static QString defaultInitCommands();
static QString defaultResetCommands();
- QString m_host = QLatin1String("localhost");
- quint16 m_port = 3333;
Utils::FilePath m_executableFile = Utils::FilePath::fromString("openocd");
QString m_rootScriptsDir;
QString m_configurationFile;
diff --git a/src/plugins/baremetal/sdcctoolchain.cpp b/src/plugins/baremetal/sdcctoolchain.cpp
index b839a68fe8..199d8ef0aa 100644
--- a/src/plugins/baremetal/sdcctoolchain.cpp
+++ b/src/plugins/baremetal/sdcctoolchain.cpp
@@ -72,6 +72,8 @@ static QString compilerTargetFlag(const Abi &abi)
switch (abi.architecture()) {
case Abi::Architecture::Mcs51Architecture:
return QString("-mmcs51");
+ case Abi::Architecture::Stm8Architecture:
+ return QString("-mstm8");
default:
return {};
}
@@ -92,13 +94,9 @@ static Macros dumpPredefinedMacros(const FilePath &compiler, const QStringList &
cpp.setEnvironment(env);
cpp.setTimeoutS(10);
- QStringList arguments;
- arguments.push_back(compilerTargetFlag(abi));
- arguments.push_back("-dM");
- arguments.push_back("-E");
- arguments.push_back(fakeIn.fileName());
+ const CommandLine cmd(compiler, {compilerTargetFlag(abi), "-dM", "-E", fakeIn.fileName()});
- const SynchronousProcessResponse response = cpp.runBlocking(compiler.toString(), arguments);
+ const SynchronousProcessResponse response = cpp.runBlocking(cmd);
if (response.result != SynchronousProcessResponse::Finished
|| response.exitCode != 0) {
qWarning() << response.exitMessage(compiler.toString(), 10);
@@ -119,11 +117,9 @@ static HeaderPaths dumpHeaderPaths(const FilePath &compiler, const QStringList &
cpp.setEnvironment(env);
cpp.setTimeoutS(10);
- QStringList arguments;
- arguments.push_back(compilerTargetFlag(abi));
- arguments.push_back("--print-search-dirs");
+ const CommandLine cmd(compiler, {compilerTargetFlag(abi), "--print-search-dirs"});
- const SynchronousProcessResponse response = cpp.runBlocking(compiler.toString(), arguments);
+ const SynchronousProcessResponse response = cpp.runBlocking(cmd);
if (response.result != SynchronousProcessResponse::Finished
|| response.exitCode != 0) {
qWarning() << response.exitMessage(compiler.toString(), 10);
@@ -175,6 +171,8 @@ static Abi::Architecture guessArchitecture(const Macros &macros)
for (const Macro &macro : macros) {
if (macro.key == "__SDCC_mcs51")
return Abi::Architecture::Mcs51Architecture;
+ if (macro.key == "__SDCC_stm8")
+ return Abi::Architecture::Stm8Architecture;
}
return Abi::Architecture::UnknownArchitecture;
}
@@ -218,11 +216,8 @@ static Utils::FilePath compilerPathFromEnvironment(const QString &compilerName)
SdccToolChain::SdccToolChain() :
ToolChain(Constants::SDCC_TOOLCHAIN_TYPEID)
-{ }
-
-QString SdccToolChain::typeDisplayName() const
{
- return Internal::SdccToolChainFactory::tr("SDCC");
+ setTypeDisplayName(Internal::SdccToolChainFactory::tr("SDCC"));
}
void SdccToolChain::setTargetAbi(const Abi &abi)
@@ -279,38 +274,29 @@ Utils::LanguageExtensions SdccToolChain::languageExtensions(const QStringList &)
WarningFlags SdccToolChain::warningFlags(const QStringList &cxxflags) const
{
- Q_UNUSED(cxxflags);
+ Q_UNUSED(cxxflags)
return WarningFlags::Default;
}
-ToolChain::BuiltInHeaderPathsRunner SdccToolChain::createBuiltInHeaderPathsRunner() const
+ToolChain::BuiltInHeaderPathsRunner SdccToolChain::createBuiltInHeaderPathsRunner(
+ const Environment &) const
{
Environment env = Environment::systemEnvironment();
addToEnvironment(env);
const Utils::FilePath compilerCommand = m_compilerCommand;
- const Core::Id languageId = language();
const Abi abi = m_targetAbi;
- HeaderPathsCache headerPaths = headerPathsCache();
-
- return [env, compilerCommand, headerPaths, languageId, abi](const QStringList &flags,
- const QString &fileName,
- const QString &) {
- Q_UNUSED(flags)
- Q_UNUSED(fileName)
-
- const HeaderPaths paths = dumpHeaderPaths(compilerCommand, env.toStringList(), abi);
- headerPaths->insert({}, paths);
-
- return paths;
+ return [env, compilerCommand, abi](const QStringList &, const QString &, const QString &) {
+ return dumpHeaderPaths(compilerCommand, env.toStringList(), abi);
};
}
HeaderPaths SdccToolChain::builtInHeaderPaths(const QStringList &cxxFlags,
- const FilePath &fileName) const
+ const FilePath &fileName,
+ const Environment &env) const
{
- return createBuiltInHeaderPathsRunner()(cxxFlags, fileName.toString(), "");
+ return createBuiltInHeaderPathsRunner(env)(cxxFlags, fileName.toString(), "");
}
void SdccToolChain::addToEnvironment(Environment &env) const
@@ -461,21 +447,41 @@ QList<ToolChain *> SdccToolChainFactory::autoDetectToolchain(
const Candidate &candidate, Core::Id language) const
{
const auto env = Environment::systemEnvironment();
- const Macros macros = dumpPredefinedMacros(candidate.compilerPath, env.toStringList(), {});
- if (macros.isEmpty())
- return {};
- const Abi abi = guessAbi(macros);
-
- const auto tc = new SdccToolChain;
- tc->setDetection(ToolChain::AutoDetection);
- tc->setLanguage(language);
- tc->setCompilerCommand(candidate.compilerPath);
- tc->setTargetAbi(abi);
- tc->setDisplayName(buildDisplayName(abi.architecture(), language, candidate.compilerVersion));
-
- const auto languageVersion = ToolChain::languageVersion(language, macros);
- tc->predefinedMacrosCache()->insert({}, {macros, languageVersion});
- return {tc};
+
+ // Table of supported ABI's by SDCC compiler.
+ const Abi knownAbis[] = {
+ {Abi::Mcs51Architecture},
+ {Abi::Stm8Architecture}
+ };
+
+ QList<ToolChain *> tcs;
+
+ // Probe each ABI from the table, because the SDCC compiler
+ // can be compiled with or without the specified architecture.
+ for (const auto &knownAbi : knownAbis) {
+ const Macros macros = dumpPredefinedMacros(candidate.compilerPath,
+ env.toStringList(), knownAbi);
+ if (macros.isEmpty())
+ continue;
+ const Abi abi = guessAbi(macros);
+ if (knownAbi.architecture() != abi.architecture())
+ continue;
+
+ const auto tc = new SdccToolChain;
+ tc->setDetection(ToolChain::AutoDetection);
+ tc->setLanguage(language);
+ tc->setCompilerCommand(candidate.compilerPath);
+ tc->setTargetAbi(abi);
+ tc->setDisplayName(buildDisplayName(abi.architecture(), language,
+ candidate.compilerVersion));
+
+ const auto languageVersion = ToolChain::languageVersion(language, macros);
+ tc->predefinedMacrosCache()->insert({}, {macros, languageVersion});
+
+ tcs.push_back(tc);
+ }
+
+ return tcs;
}
// SdccToolChainConfigWidget
diff --git a/src/plugins/baremetal/sdcctoolchain.h b/src/plugins/baremetal/sdcctoolchain.h
index 15ed599524..58fd92e0d5 100644
--- a/src/plugins/baremetal/sdcctoolchain.h
+++ b/src/plugins/baremetal/sdcctoolchain.h
@@ -52,8 +52,6 @@ class SdccToolChain final : public ProjectExplorer::ToolChain
Q_DECLARE_TR_FUNCTIONS(SdccToolChain)
public:
- QString typeDisplayName() const final;
-
void setTargetAbi(const ProjectExplorer::Abi &abi);
ProjectExplorer::Abi targetAbi() const final;
@@ -65,9 +63,11 @@ public:
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const final;
ProjectExplorer::WarningFlags warningFlags(const QStringList &cxxflags) const final;
- BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner() const final;
+ BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
+ const Utils::Environment &) const final;
ProjectExplorer::HeaderPaths builtInHeaderPaths(const QStringList &cxxFlags,
- const Utils::FilePath &) const final;
+ const Utils::FilePath &,
+ const Utils::Environment &env) const final;
void addToEnvironment(Utils::Environment &env) const final;
ProjectExplorer::IOutputParser *outputParser() const final;
diff --git a/src/plugins/baremetal/stlinkutilgdbserverprovider.cpp b/src/plugins/baremetal/stlinkutilgdbserverprovider.cpp
index 552f890c80..35e83322e3 100644
--- a/src/plugins/baremetal/stlinkutilgdbserverprovider.cpp
+++ b/src/plugins/baremetal/stlinkutilgdbserverprovider.cpp
@@ -47,8 +47,6 @@ using namespace Utils;
namespace BareMetal {
namespace Internal {
-const char hostKeyC[] = "BareMetal.StLinkUtilGdbServerProvider.Host";
-const char portKeyC[] = "BareMetal.StLinkUtilGdbServerProvider.Port";
const char executableFileKeyC[] = "BareMetal.StLinkUtilGdbServerProvider.ExecutableFile";
const char verboseLevelKeyC[] = "BareMetal.StLinkUtilGdbServerProvider.VerboseLevel";
const char extendedModeKeyC[] = "BareMetal.StLinkUtilGdbServerProvider.ExtendedMode";
@@ -62,13 +60,14 @@ StLinkUtilGdbServerProvider::StLinkUtilGdbServerProvider()
{
setInitCommands(defaultInitCommands());
setResetCommands(defaultResetCommands());
+ setDefaultChannel("localhost", 4242);
+ setSettingsKeyBase("BareMetal.StLinkUtilGdbServerProvider");
+ setTypeDisplayName(StLinkUtilGdbServerProviderFactory::tr("ST-LINK Utility"));
}
StLinkUtilGdbServerProvider::StLinkUtilGdbServerProvider(
const StLinkUtilGdbServerProvider &other)
: GdbServerProvider(other)
- , m_host(other.m_host)
- , m_port(other.m_port)
, m_executableFile(other.m_executableFile)
, m_verboseLevel(0)
, m_extendedMode(false)
@@ -87,19 +86,14 @@ QString StLinkUtilGdbServerProvider::defaultResetCommands()
return {};
}
-QString StLinkUtilGdbServerProvider::typeDisplayName() const
-{
- return StLinkUtilGdbServerProviderFactory::tr("ST-LINK Utility");
-}
-
-QString StLinkUtilGdbServerProvider::channel() const
+QString StLinkUtilGdbServerProvider::channelString() const
{
switch (startupMode()) {
case NoStartup:
// fallback
case StartupOnNetwork:
// Just return as "host:port" form.
- return m_host + QLatin1Char(':') + QString::number(m_port);
+ return GdbServerProvider::channelString();
case StartupOnPipe:
// Unsupported mode
return {};
@@ -119,7 +113,7 @@ CommandLine StLinkUtilGdbServerProvider::command() const
cmd.addArg("--no-reset");
cmd.addArg("--stlink_version=" + QString::number(m_transport));
- cmd.addArg("--listen_port=" + QString::number(m_port));
+ cmd.addArg("--listen_port=" + QString::number(channel().port()));
cmd.addArg("--verbose=" + QString::number(m_verboseLevel));
return cmd;
@@ -138,7 +132,7 @@ bool StLinkUtilGdbServerProvider::isValid() const
const StartupMode m = startupMode();
if (m == NoStartup || m == StartupOnNetwork) {
- if (m_host.isEmpty())
+ if (channel().host().isEmpty())
return false;
}
@@ -158,8 +152,6 @@ GdbServerProvider *StLinkUtilGdbServerProvider::clone() const
QVariantMap StLinkUtilGdbServerProvider::toMap() const
{
QVariantMap data = GdbServerProvider::toMap();
- data.insert(QLatin1String(hostKeyC), m_host);
- data.insert(QLatin1String(portKeyC), m_port);
data.insert(QLatin1String(executableFileKeyC), m_executableFile.toVariant());
data.insert(QLatin1String(verboseLevelKeyC), m_verboseLevel);
data.insert(QLatin1String(extendedModeKeyC), m_extendedMode);
@@ -173,9 +165,7 @@ bool StLinkUtilGdbServerProvider::fromMap(const QVariantMap &data)
if (!GdbServerProvider::fromMap(data))
return false;
- m_host = data.value(QLatin1String(hostKeyC)).toString();
- m_port = data.value(QLatin1String(portKeyC)).toInt();
- m_executableFile = FileName::fromVariant(data.value(QLatin1String(executableFileKeyC)));
+ m_executableFile = FilePath::fromVariant(data.value(QLatin1String(executableFileKeyC)));
m_verboseLevel = data.value(QLatin1String(verboseLevelKeyC)).toInt();
m_extendedMode = data.value(QLatin1String(extendedModeKeyC)).toBool();
m_resetBoard = data.value(QLatin1String(resetBoardKeyC)).toBool();
@@ -190,9 +180,7 @@ bool StLinkUtilGdbServerProvider::operator==(const GdbServerProvider &other) con
return false;
const auto p = static_cast<const StLinkUtilGdbServerProvider *>(&other);
- return m_host == p->m_host
- && m_port == p->m_port
- && m_executableFile == p->m_executableFile
+ return m_executableFile == p->m_executableFile
&& m_verboseLevel == p->m_verboseLevel
&& m_extendedMode == p->m_extendedMode
&& m_resetBoard == p->m_resetBoard
@@ -329,8 +317,7 @@ void StLinkUtilGdbServerProviderConfigWidget::applyImpl()
const auto p = static_cast<StLinkUtilGdbServerProvider *>(provider());
Q_ASSERT(p);
- p->m_host = m_hostWidget->host();
- p->m_port = m_hostWidget->port();
+ p->setChannel(m_hostWidget->channel());
p->m_executableFile = m_executableFileChooser->fileName();
p->m_verboseLevel = m_verboseLevelSpinBox->value();
p->m_extendedMode = m_extendedModeCheckBox->isChecked();
@@ -387,8 +374,7 @@ void StLinkUtilGdbServerProviderConfigWidget::setFromProvider()
const QSignalBlocker blocker(this);
startupModeChanged();
- m_hostWidget->setHost(p->m_host);
- m_hostWidget->setPort(p->m_port);
+ m_hostWidget->setChannel(p->channel());
m_executableFileChooser->setFileName(p->m_executableFile);
m_verboseLevelSpinBox->setValue(p->m_verboseLevel);
m_extendedModeCheckBox->setChecked(p->m_extendedMode);
diff --git a/src/plugins/baremetal/stlinkutilgdbserverprovider.h b/src/plugins/baremetal/stlinkutilgdbserverprovider.h
index 18b75ad405..5416cb5b8b 100644
--- a/src/plugins/baremetal/stlinkutilgdbserverprovider.h
+++ b/src/plugins/baremetal/stlinkutilgdbserverprovider.h
@@ -45,7 +45,6 @@ class StLinkUtilGdbServerProvider final : public GdbServerProvider
{
public:
enum TransportLayer { ScsiOverUsb = 1, RawUsb = 2 };
- QString typeDisplayName() const final;
QVariantMap toMap() const final;
bool fromMap(const QVariantMap &data) final;
@@ -55,7 +54,7 @@ public:
GdbServerProviderConfigWidget *configurationWidget() final;
GdbServerProvider *clone() const final;
- QString channel() const final;
+ QString channelString() const final;
Utils::CommandLine command() const final;
bool canStartupMode(StartupMode mode) const final;
@@ -68,8 +67,6 @@ private:
static QString defaultInitCommands();
static QString defaultResetCommands();
- QString m_host = QLatin1String("localhost");
- quint16 m_port = 4242;
Utils::FilePath m_executableFile = Utils::FilePath::fromString("st-util");
int m_verboseLevel = 0; // 0..99
bool m_extendedMode = false; // Listening for connections after disconnect