McuSupport: Make RunConfiguration flash and run the app

For now with flash_*_and_bootloader, and later perhaps with an option to
flash without bootloader and without assets.

Change-Id: I861d8d4f269dcb9b57447217f78825ce232c903e
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Alessandro Portale
2019-10-07 16:22:59 +02:00
parent d5fb69c2e6
commit 3cff6f447a

View File

@@ -33,6 +33,8 @@
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/runcontrol.h> #include <projectexplorer/runcontrol.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <cmakeprojectmanager/cmakekitinformation.h>
#include <cmakeprojectmanager/cmaketool.h>
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace Utils; using namespace Utils;
@@ -42,9 +44,17 @@ namespace Internal {
static CommandLine flashAndRunCommand(Target *target) static CommandLine flashAndRunCommand(Target *target)
{ {
BuildConfiguration *bc = target->activeBuildConfiguration(); const QString projectName = target->project()->displayName();
return CommandLine(bc->environment().searchInPath("cmake"), {}); const CMakeProjectManager::CMakeTool *tool =
CMakeProjectManager::CMakeKitAspect::cmakeTool(target->kit());
return CommandLine(tool->filePath(), {
"--build",
".",
"--target",
QString("flash_%1_and_bootloader").arg(projectName)
});
} }
class FlashAndRunConfiguration : public ProjectExplorer::RunConfiguration class FlashAndRunConfiguration : public ProjectExplorer::RunConfiguration
@@ -57,6 +67,17 @@ public:
effectiveFlashAndRunCall->setLabelText(tr("Effective flash and run call:")); effectiveFlashAndRunCall->setLabelText(tr("Effective flash and run call:"));
effectiveFlashAndRunCall->setDisplayStyle(BaseStringAspect::TextEditDisplay); effectiveFlashAndRunCall->setDisplayStyle(BaseStringAspect::TextEditDisplay);
effectiveFlashAndRunCall->setReadOnly(true); effectiveFlashAndRunCall->setReadOnly(true);
auto updateConfiguration = [target, effectiveFlashAndRunCall] {
effectiveFlashAndRunCall->setValue(flashAndRunCommand(target).toUserOutput());
};
updateConfiguration();
connect(target->activeBuildConfiguration(), &BuildConfiguration::buildDirectoryChanged,
this, updateConfiguration);
connect(target->project(), &Project::displayNameChanged,
this, updateConfiguration);
} }
}; };
@@ -67,8 +88,11 @@ public:
: SimpleTargetRunner(runControl) : SimpleTargetRunner(runControl)
{ {
setStarter([this, runControl] { setStarter([this, runControl] {
CommandLine cmd = flashAndRunCommand(runControl->target()); ProjectExplorer::Target *target = runControl->target();
const CommandLine cmd = flashAndRunCommand(target);
Runnable r; Runnable r;
r.workingDirectory =
target->activeBuildConfiguration()->buildDirectory().toUserOutput();
r.setCommandLine(cmd); r.setCommandLine(cmd);
SimpleTargetRunner::doStart(r, {}); SimpleTargetRunner::doStart(r, {});
}); });