2022-03-09 17:29:07 +01:00
|
|
|
/****************************************************************************
|
|
|
|
|
**
|
|
|
|
|
** Copyright (C) 2022 The Qt Company Ltd.
|
|
|
|
|
** Contact: https://www.qt.io/licensing/
|
|
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator.
|
|
|
|
|
**
|
|
|
|
|
** Commercial License Usage
|
|
|
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
|
|
|
** accordance with the commercial license agreement provided with the
|
|
|
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
|
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
|
|
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
|
|
|
** information use the contact form at https://www.qt.io/contact-us.
|
|
|
|
|
**
|
|
|
|
|
** GNU General Public License Usage
|
|
|
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
|
|
|
** General Public License version 3 as published by the Free Software
|
|
|
|
|
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
|
|
|
|
** included in the packaging of this file. Please review the following
|
|
|
|
|
** information to ensure the GNU General Public License requirements will
|
|
|
|
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
|
|
|
|
**
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
#include "mcutargetfactorylegacy.h"
|
|
|
|
|
#include "mcuhelpers.h"
|
|
|
|
|
#include "mcupackage.h"
|
|
|
|
|
#include "mcusupportsdk.h"
|
|
|
|
|
#include "mcutarget.h"
|
|
|
|
|
#include "mcutargetdescription.h"
|
|
|
|
|
|
|
|
|
|
#include <utils/fileutils.h>
|
|
|
|
|
#include <QVersionNumber>
|
|
|
|
|
|
2022-06-17 17:15:17 +02:00
|
|
|
namespace McuSupport::Internal::Legacy {
|
2022-03-09 17:29:07 +01:00
|
|
|
|
2022-06-17 17:15:17 +02:00
|
|
|
McuTargetFactory::McuTargetFactory(const QHash<QString, ToolchainCompilerCreator> &toolchainCreators,
|
|
|
|
|
const QHash<QString, McuPackagePtr> &toolchainFiles,
|
|
|
|
|
const QHash<QString, McuPackagePtr> &vendorPkgs,
|
|
|
|
|
const SettingsHandler::Ptr &settingsHandler)
|
2022-04-25 19:52:29 +02:00
|
|
|
: toolchainCreators(toolchainCreators)
|
|
|
|
|
, toolchainFiles(toolchainFiles)
|
2022-04-22 11:41:33 +02:00
|
|
|
, vendorPkgs(vendorPkgs)
|
|
|
|
|
, settingsHandler(settingsHandler)
|
|
|
|
|
{}
|
|
|
|
|
|
2022-06-17 17:15:17 +02:00
|
|
|
QPair<Targets, Packages> McuTargetFactory::createTargets(const McuTargetDescription &desc,
|
|
|
|
|
const Utils::FilePath &qtForMcuPath)
|
2022-03-09 17:29:07 +01:00
|
|
|
{
|
2022-03-28 16:42:51 +02:00
|
|
|
QHash<QString, McuPackagePtr> boardSdkPkgs;
|
|
|
|
|
QHash<QString, McuPackagePtr> freeRTOSPkgs;
|
2022-03-09 17:29:07 +01:00
|
|
|
Targets mcuTargets;
|
|
|
|
|
Packages packages;
|
2022-04-25 19:52:29 +02:00
|
|
|
McuToolChainPackagePtr toolchainPackage = getToolchainCompiler(desc.toolchain);
|
|
|
|
|
McuPackagePtr toolchainFilePackage = getToolchainFile(qtForMcuPath, desc.toolchain.id);
|
2022-03-09 17:29:07 +01:00
|
|
|
for (int colorDepth : desc.platform.colorDepths) {
|
|
|
|
|
Packages required3rdPartyPkgs;
|
|
|
|
|
// Desktop toolchains don't need any additional settings
|
2022-04-25 19:52:29 +02:00
|
|
|
if (toolchainPackage && !toolchainPackage->isDesktopToolchain()
|
|
|
|
|
&& toolchainPackage->toolchainType()
|
|
|
|
|
!= McuToolChainPackage::ToolChainType::Unsupported) {
|
|
|
|
|
required3rdPartyPkgs.insert(toolchainPackage);
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Add setting specific to platform IDE.
|
|
|
|
|
if (vendorPkgs.contains(desc.platform.vendor)) {
|
2022-03-28 16:42:51 +02:00
|
|
|
required3rdPartyPkgs.insert(vendorPkgs.value(desc.platform.vendor));
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Board SDK specific settings
|
|
|
|
|
Utils::FilePath boardSdkDefaultPath;
|
|
|
|
|
if (!desc.boardSdk.envVar.isEmpty()) {
|
|
|
|
|
if (!boardSdkPkgs.contains(desc.boardSdk.envVar)) {
|
2022-06-17 17:15:17 +02:00
|
|
|
McuPackagePtr boardSdkPkg{Legacy::createBoardSdkPackage(settingsHandler, desc)};
|
2022-03-18 23:08:19 +01:00
|
|
|
boardSdkPkgs.insert(desc.boardSdk.envVar, boardSdkPkg);
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
2022-03-28 16:42:51 +02:00
|
|
|
McuPackagePtr boardSdkPkg{boardSdkPkgs.value(desc.boardSdk.envVar)};
|
2022-03-09 17:29:07 +01:00
|
|
|
boardSdkDefaultPath = boardSdkPkg->defaultPath();
|
2022-03-28 16:42:51 +02:00
|
|
|
required3rdPartyPkgs.insert(boardSdkPkg);
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Free RTOS specific settings.
|
|
|
|
|
if (!desc.freeRTOS.envVar.isEmpty()) {
|
|
|
|
|
if (!freeRTOSPkgs.contains(desc.freeRTOS.envVar)) {
|
2022-04-22 11:41:33 +02:00
|
|
|
freeRTOSPkgs
|
|
|
|
|
.insert(desc.freeRTOS.envVar,
|
|
|
|
|
McuPackagePtr{
|
2022-06-17 17:15:17 +02:00
|
|
|
Legacy::createFreeRTOSSourcesPackage(settingsHandler,
|
|
|
|
|
desc.freeRTOS.envVar,
|
|
|
|
|
boardSdkDefaultPath,
|
|
|
|
|
desc.freeRTOS.boardSdkSubDir)});
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
2022-03-28 16:42:51 +02:00
|
|
|
required3rdPartyPkgs.insert(freeRTOSPkgs.value(desc.freeRTOS.envVar));
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
|
|
|
|
|
2022-03-28 16:42:51 +02:00
|
|
|
packages.unite(required3rdPartyPkgs);
|
2022-03-09 17:29:07 +01:00
|
|
|
const McuTarget::Platform platform(
|
|
|
|
|
{desc.platform.id, desc.platform.name, desc.platform.vendor});
|
2022-03-23 13:24:02 +01:00
|
|
|
mcuTargets.append(McuTargetPtr{new McuTarget{QVersionNumber::fromString(desc.qulVersion),
|
|
|
|
|
platform,
|
|
|
|
|
deduceOperatingSystem(desc),
|
|
|
|
|
required3rdPartyPkgs,
|
2022-04-25 19:52:29 +02:00
|
|
|
toolchainPackage,
|
|
|
|
|
toolchainFilePackage,
|
2022-03-23 13:24:02 +01:00
|
|
|
colorDepth}});
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
|
|
|
|
return {mcuTargets, packages};
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-17 17:15:17 +02:00
|
|
|
McuAbstractTargetFactory::AdditionalPackages McuTargetFactory::getAdditionalPackages() const
|
2022-03-09 17:29:07 +01:00
|
|
|
{
|
2022-04-25 19:52:29 +02:00
|
|
|
return {{}, vendorPkgs};
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-17 17:15:17 +02:00
|
|
|
McuToolChainPackagePtr McuTargetFactory::getToolchainCompiler(
|
|
|
|
|
const McuTargetDescription::Toolchain &desc) const
|
2022-04-25 19:52:29 +02:00
|
|
|
{
|
2022-06-07 20:58:42 +02:00
|
|
|
auto compilerCreator = toolchainCreators.value(desc.id, [this](const QStringList & /*versions*/) {
|
2022-06-17 17:15:17 +02:00
|
|
|
return McuToolChainPackagePtr{Legacy::createUnsupportedToolChainPackage(settingsHandler)};
|
2022-04-25 19:52:29 +02:00
|
|
|
});
|
2022-06-07 20:58:42 +02:00
|
|
|
McuToolChainPackagePtr toolchainPackage = compilerCreator(desc.versions);
|
2022-04-25 19:52:29 +02:00
|
|
|
return toolchainPackage;
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-17 17:15:17 +02:00
|
|
|
McuPackagePtr McuTargetFactory::getToolchainFile(const Utils::FilePath &qtForMCUSdkPath,
|
|
|
|
|
const QString &toolchainName) const
|
2022-04-25 19:52:29 +02:00
|
|
|
{
|
|
|
|
|
if (McuPackagePtr toolchainFile = toolchainFiles.value(toolchainName); toolchainFile) {
|
|
|
|
|
return toolchainFile;
|
|
|
|
|
} else {
|
|
|
|
|
return McuPackagePtr{
|
2022-06-17 17:15:17 +02:00
|
|
|
Legacy::createUnsupportedToolChainFilePackage(settingsHandler, qtForMCUSdkPath)};
|
2022-04-25 19:52:29 +02:00
|
|
|
}
|
2022-03-09 17:29:07 +01:00
|
|
|
}
|
2022-06-17 17:15:17 +02:00
|
|
|
} // namespace McuSupport::Internal::Legacy
|