From 4b6f1c136635c48efa021a1d413ff9fe1335920b Mon Sep 17 00:00:00 2001 From: Christiaan Janssen Date: Fri, 4 Dec 2020 16:32:34 +0100 Subject: [PATCH] McuSupport: Display errors when generating kits automatically MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: QTCREATORBUG-25260 Change-Id: I5e45a56d08920886b2f654a1c98a7451e1c9dc3f Reviewed-by: Dawid Śliwa Reviewed-by: Alessandro Portale --- src/plugins/mcusupport/mcusupportoptions.cpp | 44 +++++++++++++++++--- src/plugins/mcusupport/mcusupportoptions.h | 1 + src/plugins/mcusupport/mcusupportsdk.cpp | 9 +++- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 375ed7ec4e6..29a9e1c4451 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -490,6 +490,19 @@ bool McuTarget::isValid() const }); } +void McuTarget::printPackageProblems() const +{ + for (auto package: packages()) { + package->updateStatus(); + if (package->status() != McuPackage::ValidPackage) + printMessage(QString("Error creating kit for target %1, package %2: %3").arg( + McuSupportOptions::kitName(this), + package->label(), + package->statusText()), + true); + } +} + QVersionNumber McuTarget::qulVersion() const { return m_qulVersion; @@ -699,13 +712,28 @@ static void setKitCMakeOptions(Kit *k, const McuTarget* mcuTarget, const QString config.append(CMakeConfigItem("CMAKE_CXX_COMPILER", "%{Compiler:Executable:Cxx}")); config.append(CMakeConfigItem("CMAKE_C_COMPILER", "%{Compiler:Executable:C}")); } - if (!mcuTarget->toolChainPackage()->isDesktopToolchain()) + + if (!mcuTarget->toolChainPackage()->isDesktopToolchain()) { + const FilePath cMakeToolchainFile = FilePath::fromString(qulDir + "/lib/cmake/Qul/toolchain/" + + mcuTarget->toolChainPackage()->cmakeToolChainFileName()); + config.append(CMakeConfigItem( "CMAKE_TOOLCHAIN_FILE", - (qulDir + "/lib/cmake/Qul/toolchain/" - + mcuTarget->toolChainPackage()->cmakeToolChainFileName()).toUtf8())); + cMakeToolchainFile.toString().toUtf8())); + if (!cMakeToolchainFile.exists()) { + printMessage(McuTarget::tr("Warning for target %1: missing CMake Toolchain File expected at %2.") + .arg(McuSupportOptions::kitName(mcuTarget), cMakeToolchainFile.toUserOutput()), false); + } + } + + const FilePath generatorsPath = FilePath::fromString(qulDir + "/lib/cmake/Qul/QulGenerators.cmake"); config.append(CMakeConfigItem("QUL_GENERATORS", - (qulDir + "/lib/cmake/Qul/QulGenerators.cmake").toUtf8())); + generatorsPath.toString().toUtf8())); + if (!generatorsPath.exists()) { + printMessage(McuTarget::tr("Warning for target %1: missing QulGenerators expected at %2.") + .arg(McuSupportOptions::kitName(mcuTarget), generatorsPath.toUserOutput()), false); + } + config.append(CMakeConfigItem("QUL_PLATFORM", mcuTarget->platform().name.toUtf8())); @@ -861,8 +889,12 @@ void McuSupportOptions::createAutomaticKits() Sdk::targetsAndPackages(dir, &packages, &mcuTargets); for (auto target: qAsConst(mcuTargets)) - if (target->isValid() && existingKits(target).isEmpty()) - newKit(target, qtForMCUsPackage); + if (existingKits(target).isEmpty()) { + if (target->isValid()) + newKit(target, qtForMCUsPackage); + else + target->printPackageProblems(); + } qDeleteAll(packages); qDeleteAll(mcuTargets); diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 382b0e7a803..2ab94014242 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -175,6 +175,7 @@ public: void setColorDepth(int colorDepth); int colorDepth() const; bool isValid() const; + void printPackageProblems() const; private: const QVersionNumber m_qulVersion; diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 5ae3c81ee34..75a2d115336 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -567,7 +567,7 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector *packa const McuTargetDescription desc = parseDescriptionJson(file.readAll()); if (QVersionNumber::fromString(desc.qulVersion) < McuSupportOptions::minimalQulVersion()) { auto pth = Utils::FilePath::fromString(fileInfo.filePath()); - printMessage(QObject::tr("Skipped %1 - Unsupported version \"%2\" (should be >= %3)") + printMessage(McuTarget::tr("Skipped %1 - Unsupported version \"%2\" (should be >= %3)") .arg( QDir::toNativeSeparators(pth.fileNameWithPathComponents(1)), desc.qulVersion, @@ -580,7 +580,7 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector *packa // No valid description means invalid SDK installation. if (descriptions.empty() && kitsPath(dir).exists()) { - printMessage(QObject::tr("No valid kit descriptions found at %1.").arg(kitsPath(dir).toUserOutput()), true); + printMessage(McuTarget::tr("No valid kit descriptions found at %1.").arg(kitsPath(dir).toUserOutput()), true); return; } @@ -611,6 +611,11 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector *packa desktopDescription.toolchainId = Utils::HostOsInfo::isWindowsHost() ? QString("msvc") : QString("gcc"); desktopDescription.type = McuTargetDescription::TargetType::Desktop; descriptions.prepend(desktopDescription); + } else { + if (dir.exists()) + printMessage(McuTarget::tr("Skipped creating fallback desktop kit: Could not find %1.") + .arg(QDir::toNativeSeparators(desktopLib.fileNameWithPathComponents(1))), + false); } } }