/**************************************************************************** ** ** 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 #include namespace McuSupport::Internal::Legacy { McuTargetFactory::McuTargetFactory(const QHash &toolchainCreators, const QHash &toolchainFiles, const QHash &vendorPkgs, const SettingsHandler::Ptr &settingsHandler) : toolchainCreators(toolchainCreators) , toolchainFiles(toolchainFiles) , vendorPkgs(vendorPkgs) , settingsHandler(settingsHandler) {} QPair McuTargetFactory::createTargets(const McuTargetDescription &desc, const Utils::FilePath &qtForMcuPath) { QHash boardSdkPkgs; QHash freeRTOSPkgs; Targets mcuTargets; Packages packages; McuToolChainPackagePtr toolchainPackage = getToolchainCompiler(desc.toolchain); McuPackagePtr toolchainFilePackage = getToolchainFile(qtForMcuPath, desc.toolchain.id); for (int colorDepth : desc.platform.colorDepths) { Packages required3rdPartyPkgs; // Desktop toolchains don't need any additional settings if (toolchainPackage && !toolchainPackage->isDesktopToolchain() && toolchainPackage->toolchainType() != McuToolChainPackage::ToolChainType::Unsupported) { required3rdPartyPkgs.insert(toolchainPackage); } // Add setting specific to platform IDE. if (vendorPkgs.contains(desc.platform.vendor)) { required3rdPartyPkgs.insert(vendorPkgs.value(desc.platform.vendor)); } // Board SDK specific settings Utils::FilePath boardSdkDefaultPath; if (!desc.boardSdk.envVar.isEmpty()) { if (!boardSdkPkgs.contains(desc.boardSdk.envVar)) { McuPackagePtr boardSdkPkg{Legacy::createBoardSdkPackage(settingsHandler, desc)}; boardSdkPkgs.insert(desc.boardSdk.envVar, boardSdkPkg); } McuPackagePtr boardSdkPkg{boardSdkPkgs.value(desc.boardSdk.envVar)}; boardSdkDefaultPath = boardSdkPkg->defaultPath(); required3rdPartyPkgs.insert(boardSdkPkg); } // Free RTOS specific settings. if (!desc.freeRTOS.envVar.isEmpty()) { if (!freeRTOSPkgs.contains(desc.freeRTOS.envVar)) { freeRTOSPkgs .insert(desc.freeRTOS.envVar, McuPackagePtr{ Legacy::createFreeRTOSSourcesPackage(settingsHandler, desc.freeRTOS.envVar, boardSdkDefaultPath, desc.freeRTOS.boardSdkSubDir)}); } required3rdPartyPkgs.insert(freeRTOSPkgs.value(desc.freeRTOS.envVar)); } packages.unite(required3rdPartyPkgs); const McuTarget::Platform platform( {desc.platform.id, desc.platform.name, desc.platform.vendor}); mcuTargets.append(McuTargetPtr{new McuTarget{QVersionNumber::fromString(desc.qulVersion), platform, deduceOperatingSystem(desc), required3rdPartyPkgs, toolchainPackage, toolchainFilePackage, colorDepth}}); } return {mcuTargets, packages}; } McuAbstractTargetFactory::AdditionalPackages McuTargetFactory::getAdditionalPackages() const { return {{}, vendorPkgs}; } McuToolChainPackagePtr McuTargetFactory::getToolchainCompiler( const McuTargetDescription::Toolchain &desc) const { auto compilerCreator = toolchainCreators.value(desc.id, [this](const QStringList & /*versions*/) { return McuToolChainPackagePtr{Legacy::createUnsupportedToolChainPackage(settingsHandler)}; }); McuToolChainPackagePtr toolchainPackage = compilerCreator(desc.versions); return toolchainPackage; } McuPackagePtr McuTargetFactory::getToolchainFile(const Utils::FilePath &qtForMCUSdkPath, const QString &toolchainName) const { if (McuPackagePtr toolchainFile = toolchainFiles.value(toolchainName); toolchainFile) { return toolchainFile; } else { return McuPackagePtr{ Legacy::createUnsupportedToolChainFilePackage(settingsHandler, qtForMCUSdkPath)}; } } } // namespace McuSupport::Internal::Legacy