diff --git a/src/plugins/baremetal/baremetaldebugsupport.cpp b/src/plugins/baremetal/baremetaldebugsupport.cpp index b6d85ae4bc2..1777ce612bf 100644 --- a/src/plugins/baremetal/baremetaldebugsupport.cpp +++ b/src/plugins/baremetal/baremetaldebugsupport.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -124,7 +125,8 @@ void BareMetalDebugSupport::start() StandardRunnable inferior; inferior.executable = bin; - inferior.commandLineArguments = rc->arguments(); + if (auto aspect = rc->extraAspect()) + inferior.commandLineArguments = aspect->arguments(); setInferior(inferior); setSymbolFile(bin); setStartMode(AttachToRemoteServer); diff --git a/src/plugins/baremetal/baremetalrunconfiguration.cpp b/src/plugins/baremetal/baremetalrunconfiguration.cpp index a4435ffd4e5..6d517b48f59 100644 --- a/src/plugins/baremetal/baremetalrunconfiguration.cpp +++ b/src/plugins/baremetal/baremetalrunconfiguration.cpp @@ -58,7 +58,13 @@ BareMetalRunConfiguration::BareMetalRunConfiguration(Target *target) QString BareMetalRunConfiguration::extraId() const { - return m_projectFilePath; + return m_buildKey; +} + +void BareMetalRunConfiguration::doAdditionalSetup(const RunConfigurationCreationInfo &info) +{ + m_buildKey = info.buildKey; + setDefaultDisplayName(info.displayName); } QWidget *BareMetalRunConfiguration::createConfigurationWidget() @@ -85,30 +91,15 @@ bool BareMetalRunConfiguration::fromMap(const QVariantMap &map) return false; m_workingDirectory = map.value(QLatin1String(WorkingDirectoryKey)).toString(); - m_projectFilePath = ProjectExplorer::idFromMap(map).suffixAfter(id()); + m_buildKey = ProjectExplorer::idFromMap(map).suffixAfter(id()); - setDefaultDisplayName(defaultDisplayName()); return true; } -QString BareMetalRunConfiguration::defaultDisplayName() -{ - if (!m_projectFilePath.isEmpty()) - //: %1 is the name of the project run via hardware debugger - return tr("%1 (via GDB server or hardware debugger)").arg(QFileInfo(m_projectFilePath).fileName()); - //: Bare Metal run configuration default run name - return tr("Run on GDB server or hardware debugger"); -} - QString BareMetalRunConfiguration::localExecutableFilePath() const { - const QString targetName = QFileInfo(m_projectFilePath).fileName(); - return target()->applicationTargets().targetFilePath(targetName).toString(); -} - -QString BareMetalRunConfiguration::arguments() const -{ - return extraAspect()->arguments(); + const BuildTargetInfo bti = target()->applicationTargets().buildTargetInfo(m_buildKey); + return bti.targetFilePath.toString(); } QString BareMetalRunConfiguration::workingDirectory() const @@ -121,19 +112,10 @@ void BareMetalRunConfiguration::setWorkingDirectory(const QString &wd) m_workingDirectory = wd; } -QString BareMetalRunConfiguration::projectFilePath() const -{ - return m_projectFilePath; -} - QString BareMetalRunConfiguration::buildSystemTarget() const { - const BuildTargetInfoList targets = target()->applicationTargets(); - const Utils::FileName projectFilePath = Utils::FileName::fromString(QFileInfo(m_projectFilePath).path()); - const QString targetName = QFileInfo(m_projectFilePath).fileName(); - auto bst = std::find_if(targets.list.constBegin(), targets.list.constEnd(), - [&projectFilePath,&targetName](const BuildTargetInfo &bti) { return bti.projectFilePath == projectFilePath && bti.targetName == targetName; }); - return (bst == targets.list.constEnd()) ? QString() : bst->targetName; + const BuildTargetInfo bti = target()->applicationTargets().buildTargetInfo(m_buildKey); + return bti.targetName; } void BareMetalRunConfiguration::handleBuildSystemDataUpdated() diff --git a/src/plugins/baremetal/baremetalrunconfiguration.h b/src/plugins/baremetal/baremetalrunconfiguration.h index 94b0ec6c834..7380bdb185f 100644 --- a/src/plugins/baremetal/baremetalrunconfiguration.h +++ b/src/plugins/baremetal/baremetalrunconfiguration.h @@ -47,14 +47,11 @@ public: Utils::OutputFormatter *createOutputFormatter() const override; virtual QString localExecutableFilePath() const; - QString arguments() const; QString workingDirectory() const; void setWorkingDirectory(const QString &wd); QVariantMap toMap() const override; - QString projectFilePath() const; - QString buildSystemTarget() const final; static const char *IdPrefix; @@ -66,13 +63,12 @@ signals: protected: bool fromMap(const QVariantMap &map) override; QString extraId() const final; - - QString defaultDisplayName(); + void doAdditionalSetup(const ProjectExplorer::RunConfigurationCreationInfo &) final; private: void handleBuildSystemDataUpdated(); - QString m_projectFilePath; + QString m_buildKey; QString m_workingDirectory; }; diff --git a/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp b/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp index 2e88979ca9e..cb054c02e40 100644 --- a/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp +++ b/src/plugins/baremetal/baremetalrunconfigurationfactory.cpp @@ -43,6 +43,7 @@ namespace Internal { BareMetalRunConfigurationFactory::BareMetalRunConfigurationFactory() { registerRunConfiguration(BareMetalRunConfiguration::IdPrefix); + setDecorateDisplayNames(true); addSupportedTargetDeviceType(BareMetal::Constants::BareMetalOsType); } @@ -52,6 +53,7 @@ BareMetalCustomRunConfigurationFactory::BareMetalCustomRunConfigurationFactory() FixedRunConfigurationFactory(BareMetalCustomRunConfiguration::tr("Custom Executable"), true) { registerRunConfiguration("BareMetal.CustomRunConfig"); + setDecorateDisplayNames(true); addSupportedTargetDeviceType(BareMetal::Constants::BareMetalOsType); } diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index bf92088dfaf..10c23082a39 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -477,6 +477,8 @@ RunConfigurationFactory::availableCreators(Target *parent) const QString displayName = ti.displayName; if (displayName.isEmpty()) displayName = decoratedTargetName(ti.targetName, parent); + else if (m_decorateDisplayNames) + displayName = decoratedTargetName(displayName, parent); RunConfigurationCreationInfo rci(this, m_runConfigBaseId, ti.targetName, displayName); rci.creationMode = ti.isQtcRunnable || !hasAnyQtcRunnable ? RunConfigurationCreationInfo::AlwaysCreate @@ -503,6 +505,11 @@ void RunConfigurationFactory::addSupportedTargetDeviceType(Core::Id id) m_supportedTargetDeviceTypes.append(id); } +void RunConfigurationFactory::setDecorateDisplayNames(bool on) +{ + m_decorateDisplayNames = on; +} + void RunConfigurationFactory::addSupportedProjectType(Core::Id id) { m_supportedProjectTypes.append(id); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index cbbe52d7293..259804d7cac 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -346,6 +346,7 @@ protected: void addSupportedProjectType(Core::Id id); void setSupportedTargetDeviceTypes(const QList &ids); void addSupportedTargetDeviceType(Core::Id id); + void setDecorateDisplayNames(bool on); private: friend class RunConfigurationCreationInfo; @@ -353,6 +354,7 @@ private: Core::Id m_runConfigBaseId; QList m_supportedProjectTypes; QList m_supportedTargetDeviceTypes; + bool m_decorateDisplayNames = false; }; class PROJECTEXPLORER_EXPORT FixedRunConfigurationFactory : public RunConfigurationFactory