McuSupport: Create a Qul-Desktop kit

First, hacky step towards supporting the "Qt" target. Such a target now
gets created with correct environment variables and CMake options.

Device type is for now Desktop, but portale thinks we will have a Qul/
Desktop target at some point.

Compiler and Qt version are randomly preselected and certainly need to
be adjusted by the user (for now).

Change-Id: Ie3f6a6e3ce1a46c35687e20a7550ff51b6b1b7c7
Reviewed-by: Aurindam Jana <aurindam.jana@qt.io>
This commit is contained in:
Alessandro Portale
2019-11-02 06:19:51 +01:00
committed by Aurindam Jana
parent 2c112a51c3
commit 7d14132c8c
3 changed files with 47 additions and 21 deletions

View File

@@ -199,9 +199,10 @@ void PackageOptions::updateStatus()
}
BoardOptions::BoardOptions(const QString &model, const QString &toolChainFileName,
const QVector<PackageOptions*> &packages)
const QString &qulPlatform, const QVector<PackageOptions*> &packages)
: m_model(model)
, m_toolChainFile(toolChainFileName)
, m_qulPlatform(qulPlatform)
, m_packages(packages)
{
}
@@ -216,6 +217,11 @@ QString BoardOptions::toolChainFile() const
return m_toolChainFile;
}
QString BoardOptions::qulPlatform() const
{
return m_qulPlatform;
}
QVector<PackageOptions *> BoardOptions::packages() const
{
return m_packages;
@@ -342,15 +348,18 @@ McuSupportOptions::McuSupportOptions(QObject *parent)
qulPackage};
auto nxpPackages = {armGccPackage, evkbImxrt1050SdkPackage, seggerJLinkPackage,
qulPackage};
auto desktopPackages = {qulPackage};
packages = {armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage,
evkbImxrt1050SdkPackage, seggerJLinkPackage, qulPackage};
boards.append(new BoardOptions(
"stm32f7508", "CMake/stm32f7508-discovery.cmake", stmPackages));
"stm32f7508", "CMake/stm32f7508-discovery.cmake", "", stmPackages));
boards.append(new BoardOptions(
"stm32f769i", "CMake/stm32f769i-discovery.cmake", stmPackages));
"stm32f769i", "CMake/stm32f769i-discovery.cmake", "", stmPackages));
boards.append(new BoardOptions(
"evkbimxrt1050", "CMake/evkbimxrt1050-toolchain.cmake", nxpPackages));
"evkbimxrt1050", "CMake/evkbimxrt1050-toolchain.cmake", "", nxpPackages));
boards.append(new BoardOptions(
"Desktop", "", "Qt", desktopPackages));
for (auto package : packages)
connect(package, &PackageOptions::changed, [this](){
@@ -400,6 +409,11 @@ static ProjectExplorer::ToolChain* armGccToolchain(const Utils::FilePath &path,
return toolChain;
}
static bool isDesktop(const BoardOptions* board)
{
return board->qulPlatform() == "Qt";
}
static void setKitProperties(ProjectExplorer::Kit *k, const BoardOptions* board)
{
using namespace ProjectExplorer;
@@ -407,11 +421,12 @@ static void setKitProperties(ProjectExplorer::Kit *k, const BoardOptions* board)
k->setUnexpandedDisplayName("Qt MCU - " + board->model());
k->setValue(Constants::KIT_BOARD_MODEL_KEY, board->model());
k->setAutoDetected(false);
k->setIrrelevantAspects({
SysRootKitAspect::id(),
if (!isDesktop(board)) {
k->setIrrelevantAspects({SysRootKitAspect::id(),
"QtSupport.QtInformation" // QtKitAspect::id()
});
}
}
static void setKitToolchains(ProjectExplorer::Kit *k, const QString &armGccPath)
{
@@ -483,9 +498,15 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const BoardOptions* boar
using namespace CMakeProjectManager;
CMakeConfig config = CMakeConfigurationKitAspect::configuration(k);
if (!board->toolChainFile().isEmpty())
config.append(CMakeConfigItem("CMAKE_TOOLCHAIN_FILE",
("%{CurrentBuild:Env:Qul_DIR}/" +
board->toolChainFile()).toUtf8()));
if (!board->qulPlatform().isEmpty())
config.append(CMakeConfigItem("QUL_PLATFORM",
board->qulPlatform().toUtf8()));
if (isDesktop(board)) // TODO: Hack! Implement color depth variants of all targets
config.append(CMakeConfigItem("QUL_COLOR_DEPTH", "32"));
CMakeConfigurationKitAspect::setConfiguration(k, config);
if (Utils::HostOsInfo::isWindowsHost())
CMakeGeneratorKitAspect::setGenerator(k, "NMake Makefiles JOM");
@@ -504,9 +525,11 @@ ProjectExplorer::Kit *McuSupportOptions::kit(const BoardOptions* board)
KitGuard kitGuard(k);
setKitProperties(k, board);
if (!isDesktop(board)) {
setKitToolchains(k, armGccPath);
setKitDebugger(k, armGccPath);
setKitDevice(k);
}
setKitEnvironment(k, board);
setKitCMakeOptions(k, board);

View File

@@ -101,16 +101,19 @@ class BoardOptions : public QObject
Q_OBJECT
public:
BoardOptions(const QString &model, const QString &toolChainFile,
BoardOptions(const QString &model, const QString &toolChainFile, const QString &qulPlatform,
const QVector<PackageOptions *> &packages);
QString model() const;
QString toolChainFile() const;
QString qulPlatform() const;
QVector<PackageOptions *> packages() const;
private:
const QString m_model;
const QString m_toolChainFile;
const QString m_qulPlatform;
const QVector<PackageOptions*> m_packages;
};

View File

@@ -108,14 +108,14 @@ void McuSupportOptionsWidget::updateStatus()
{
const QVector<BoardOptions*> validBoards = m_options->validBoards();
m_statusLabel->setText(validBoards.isEmpty()
? McuSupportOptionsPage::tr("No devices and kits can currently be generated. "
"Select a board and provide the package paths. "
"Afterwards, press Apply to generate device and kit for "
? McuSupportOptionsPage::tr("No kits can currently be generated. "
"Select a target and provide the package paths. "
"Afterwards, press Apply to generate a kit for "
"your board.")
: McuSupportOptionsPage::tr("Devices and kits for the following boards can be generated: "
: McuSupportOptionsPage::tr("Kits for the following targets can be generated: "
"%1 "
"Press Apply to generate device and kit for "
"your board.").arg(ulOfBoardModels(validBoards)));
"Press Apply to generate a kit for "
"your target.").arg(ulOfBoardModels(validBoards)));
}
void McuSupportOptionsWidget::showBoardPackages(int boardIndex)