diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-04-17 08:09:55 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-04-17 08:09:55 +0200 |
commit | 602d690baba3784e1761037e787f0e7d14af5a8a (patch) | |
tree | 4923aa77ad98f6cb88a98e4d34cd5d30dda2c926 /src/plugins | |
parent | 2795292c74ff64d06b12eeed5c41bd107c3ce5b9 (diff) | |
parent | e85c0746215609b6c2efcd30a7b3407b3de21c17 (diff) |
Merge remote-tracking branch 'origin/4.12'
Change-Id: Ie35e9959693b6f6f78509eea5b259d6493ef87f2
Diffstat (limited to 'src/plugins')
17 files changed, 253 insertions, 80 deletions
diff --git a/src/plugins/android/androidsdkmodel.cpp b/src/plugins/android/androidsdkmodel.cpp index 7e18b19ff4..b2dce193c5 100644 --- a/src/plugins/android/androidsdkmodel.cpp +++ b/src/plugins/android/androidsdkmodel.cpp @@ -285,14 +285,9 @@ void AndroidSdkModel::selectMissingEssentials() if (!pendingPkgs.contains((*tool)->sdkStylePath())) continue; - if ((*tool)->type() == AndroidSdkPackage::PlatformToolsPackage) - addTool(tool); // Select Platform tools - else if ((*tool)->type() == AndroidSdkPackage::BuildToolsPackage) - addTool(tool); // Select build tools - else if ((*tool)->type() == AndroidSdkPackage::NDKPackage) - addTool(tool); // Select NDK Bundle - + addTool(tool); pendingPkgs.removeOne((*tool)->sdkStylePath()); + if (pendingPkgs.isEmpty()) break; } diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index db793e05cf..7f27b2544f 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -820,7 +820,7 @@ void AndroidSettingsWidget::downloadOpenSslRepo(const bool silent) const QString openSslRepo("https://github.com/KDAB/android_openssl.git"); Utils::QtcProcess *gitCloner = new Utils::QtcProcess(this); - gitCloner->setCommand(Utils::CommandLine("git", {"clone", openSslRepo, openSslPath.fileName()})); + gitCloner->setCommand(Utils::CommandLine("git", {"clone", "--depth=1", openSslRepo, openSslPath.fileName()})); gitCloner->setWorkingDirectory(openSslPath.parentDir().toString()); QDir openSslDir(openSslPath.toString()); diff --git a/src/plugins/autotest/quick/quicktestvisitors.cpp b/src/plugins/autotest/quick/quicktestvisitors.cpp index 598b16afec..0b6548131e 100644 --- a/src/plugins/autotest/quick/quicktestvisitors.cpp +++ b/src/plugins/autotest/quick/quicktestvisitors.cpp @@ -212,6 +212,8 @@ bool QuickTestAstVisitor::visit(CPlusPlus::CallAST *ast) if (expressionListAST && expressionListAST->value) { const auto *stringLitAST = expressionListAST->value->asStringLiteral(); + if (!stringLitAST) + return false; const auto *string = translationUnit()->stringLiteral(stringLitAST->literal_token); if (string) { diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index 79891a8b5b..568b9510bd 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -312,11 +312,10 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, const FilePath &sourceDirectory) { RawProjectParts rpps; + const QDir sourceDir(sourceDirectory.toString()); int counter = 0; for (const TargetDetails &t : input.targetDetails) { - QDir sourceDir(sourceDirectory.toString()); - bool needPostfix = t.compileGroups.size() > 1; int count = 1; for (const CompileInfo &ci : t.compileGroups) { @@ -359,14 +358,15 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, cxxProjectFlags.commandLineFlags = cProjectFlags.commandLineFlags; rpp.setFlagsForCxx(cxxProjectFlags); - FilePath precompiled_header - = FilePath::fromString(findOrDefault(t.sources, [&ending](const SourceInfo &si) { - return si.path.endsWith(ending); - }).path); + FilePath precompiled_header = FilePath::fromString( + findOrDefault(t.sources, [&ending](const SourceInfo &si) { + return si.path.endsWith(ending); + }).path); rpp.setFiles(transform<QList>(ci.sources, [&t, &sourceDir](const int si) { return sourceDir.absoluteFilePath(t.sources[static_cast<size_t>(si)].path); })); + if (!precompiled_header.isEmpty()) { if (precompiled_header.toFileInfo().isRelative()) { const FilePath parentDir = FilePath::fromString(sourceDir.absolutePath()); @@ -381,6 +381,22 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, rpps.append(rpp); ++count; } + + // Check sources for more files and associate them with the current target + const QStringList extraSources = Utils::transform<QList>( + Utils::filtered(t.sources, [](const SourceInfo &si) { return si.compileGroup == -1; }), + [&sourceDir](const SourceInfo &si) { return sourceDir.absoluteFilePath(si.path); }); + if (!extraSources.isEmpty()) { + RawProjectPart rpp; + rpp.setProjectFileLocation(t.sourceDir.pathAppended("CMakeLists.txt").toString()); + rpp.setBuildSystemTarget(t.name); + rpp.setDisplayName(t.id + "_extra"); + + rpp.setFiles(extraSources); + + // This is all the information we have :-/ + rpps.append(rpp); + } } return rpps; diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 9b0b8f576f..ca55f08eca 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -27,18 +27,21 @@ #include "mcusupportoptions.h" #include "mcusupportsdk.h" +#include <cmakeprojectmanager/cmaketoolmanager.h> #include <coreplugin/icore.h> #include <coreplugin/helpmanager.h> #include <cmakeprojectmanager/cmakekitinformation.h> #include <debugger/debuggeritem.h> #include <debugger/debuggeritemmanager.h> #include <debugger/debuggerkitinformation.h> +#include <projectexplorer/abi.h> #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/toolchain.h> #include <projectexplorer/toolchainmanager.h> #include <projectexplorer/kitmanager.h> #include <projectexplorer/kitinformation.h> #include <projectexplorer/devicesupport/devicemanager.h> +#include <qtsupport/qtkitinformation.h> #include <qtsupport/qtversionmanager.h> #include <utils/algorithm.h> #include <utils/fileutils.h> @@ -182,7 +185,7 @@ void McuPackage::updateStatus() const Utils::FilePath detectionPath = Utils::FilePath::fromString( m_fileChooser->filePath().toString() + "/" + m_detectionPath); const QString displayDetectionPath = Utils::FilePath::fromString(m_detectionPath).toUserOutput(); - const bool validPackage = detectionPath.exists(); + const bool validPackage = m_detectionPath.isEmpty() || detectionPath.exists(); m_status = validPath ? (validPackage ? ValidPackage : ValidPathInvalidPackage) : InvalidPath; @@ -192,7 +195,9 @@ void McuPackage::updateStatus() QString statusText; switch (m_status) { case ValidPackage: - statusText = tr("Path is valid, \"%1\" was found.").arg(displayDetectionPath); + statusText = m_detectionPath.isEmpty() + ? "Path exists." // TODO tr() + : tr("Path is valid, \"%1\" was found.").arg(displayDetectionPath); break; case ValidPathInvalidPackage: statusText = tr("Path exists, but does not contain \"%1\".").arg(displayDetectionPath); @@ -217,6 +222,22 @@ McuToolChainPackage::Type McuToolChainPackage::type() const return m_type; } +static ProjectExplorer::ToolChain *desktopToolChain(Core::Id language) +{ + using namespace ProjectExplorer; + + ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) { + const Abi abi = t->targetAbi(); + return (abi.os() != Abi::WindowsOS + || (abi.osFlavor() == Abi::WindowsMsvc2017Flavor + || abi.osFlavor() == Abi::WindowsMsvc2019Flavor)) + && abi.architecture() == Abi::X86Architecture + && abi.wordWidth() == 64 + && t->language() == language; + }); + return toolChain; +} + static ProjectExplorer::ToolChain* armGccToolChain(const Utils::FilePath &path, Core::Id language) { using namespace ProjectExplorer; @@ -245,24 +266,30 @@ static ProjectExplorer::ToolChain* armGccToolChain(const Utils::FilePath &path, ProjectExplorer::ToolChain *McuToolChainPackage::toolChain(Core::Id language) const { - const QLatin1String compilerName( - language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); - const Utils::FilePath compiler = Utils::FilePath::fromUserInput( - Utils::HostOsInfo::withExecutableSuffix( - path() + ( - m_type == TypeArmGcc - ? "/bin/arm-none-eabi-%1" : m_type == TypeIAR - ? "/foo/bar-iar-%1" : "/bar/foo-keil-%1")).arg(compilerName)); - - ProjectExplorer::ToolChain *tc = armGccToolChain(compiler, language); + ProjectExplorer::ToolChain *tc = nullptr; + if (m_type == TypeDesktop) { + tc = desktopToolChain(language); + } else { + const QLatin1String compilerName( + language == ProjectExplorer::Constants::C_LANGUAGE_ID ? "gcc" : "g++"); + const Utils::FilePath compiler = Utils::FilePath::fromUserInput( + Utils::HostOsInfo::withExecutableSuffix( + path() + ( + m_type == TypeArmGcc + ? "/bin/arm-none-eabi-%1" : m_type == TypeIAR + ? "/foo/bar-iar-%1" : "/bar/foo-keil-%1")).arg(compilerName)); + + tc = armGccToolChain(compiler, language); + } return tc; } QString McuToolChainPackage::cmakeToolChainFileName() const { return QLatin1String(m_type == TypeArmGcc - ? "armgcc.cmake" : m_type == McuToolChainPackage::TypeIAR - ? "iar.cmake" : "keil.cmake"); + ? "armgcc" : m_type == McuToolChainPackage::TypeIAR + ? "iar" : m_type == McuToolChainPackage::TypeKEIL + ? "keil" : "ghs") + QLatin1String(".cmake"); } QVariant McuToolChainPackage::debuggerId() const @@ -429,11 +456,6 @@ Utils::FilePath McuSupportOptions::qulDirFromSettings() packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK)); } -static bool mcuTargetIsDesktop(const McuTarget* mcuTarget) -{ - return mcuTarget->qulPlatform() == "Qt"; -} - static Utils::FilePath jomExecutablePath() { return Utils::HostOsInfo::isWindowsHost() ? @@ -453,21 +475,23 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, McuSupportOptions::supportedQulVersion().toString()); k->setAutoDetected(true); k->makeSticky(); - if (mcuTargetIsDesktop(mcuTarget)) { + if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) k->setDeviceTypeForIcon(Constants::DEVICE_TYPE); - } else { - QSet<Core::Id> irrelevant = { - SysRootKitAspect::id(), - "QtSupport.QtInformation" // QtKitAspect::id() - }; - if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect - irrelevant.insert("CMake.GeneratorKitInformation"); - k->setIrrelevantAspects(irrelevant); - } + QSet<Core::Id> irrelevant = { + SysRootKitAspect::id(), + QtSupport::QtKitAspect::id() + }; + if (jomExecutablePath().exists()) // TODO: add id() getter to CMakeGeneratorKitAspect + irrelevant.insert("CMake.GeneratorKitInformation"); + k->setIrrelevantAspects(irrelevant); } static void setKitToolchains(ProjectExplorer::Kit *k, const McuToolChainPackage *tcPackage) { + // No Green Hills toolchain, because support for it is missing. + if (tcPackage->type() == McuToolChainPackage::TypeGHS) + return; + ProjectExplorer::ToolChainKitAspect::setToolChain(k, tcPackage->toolChain( ProjectExplorer::Constants::C_LANGUAGE_ID)); ProjectExplorer::ToolChainKitAspect::setToolChain(k, tcPackage->toolChain( @@ -476,11 +500,22 @@ static void setKitToolchains(ProjectExplorer::Kit *k, const McuToolChainPackage static void setKitDebugger(ProjectExplorer::Kit *k, const McuToolChainPackage *tcPackage) { + // Qt Creator seems to be smart enough to deduce the right Kit debugger from the ToolChain + // We rely on that at least in the Desktop case. + if (tcPackage->type() == McuToolChainPackage::TypeDesktop + // No Green Hills debugger, because support for it is missing. + || tcPackage->type() == McuToolChainPackage::TypeGHS) + return; + Debugger::DebuggerKitAspect::setDebugger(k, tcPackage->debuggerId()); } -static void setKitDevice(ProjectExplorer::Kit *k) +static void setKitDevice(ProjectExplorer::Kit *k, const McuTarget* mcuTarget) { + // "Device Type" Desktop is the default. We use that for the Qt for MCUs Desktop Kit + if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop) + return; + ProjectExplorer::DeviceTypeKitAspect::setDeviceTypeId(k, Constants::DEVICE_TYPE); } @@ -492,6 +527,13 @@ static void setKitEnvironment(ProjectExplorer::Kit *k, const McuTarget* mcuTarge Utils::EnvironmentItems changes; QStringList pathAdditions; + // The Desktop version depends on the Qt shared libs in Qul_DIR/bin. + // If CMake's fileApi is avaialble, we can rely on the "Add library search path to PATH" + // feature of the run configuration. Otherwise, we just prepend the path, here. + if (mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop + && !CMakeProjectManager::CMakeToolManager::defaultCMakeTool()->hasFileApi()) + pathAdditions.append(QDir::toNativeSeparators(qtForMCUsSdkPackage->path() + "/bin")); + QVector<McuPackage *> packagesIncludingSdk; packagesIncludingSdk.reserve(mcuTarget->packages().size() + 1); packagesIncludingSdk.append(mcuTarget->packages()); @@ -517,9 +559,12 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg using namespace CMakeProjectManager; CMakeConfig config = CMakeConfigurationKitAspect::configuration(k); - config.append(CMakeConfigItem("CMAKE_CXX_COMPILER", "%{Compiler:Executable:Cxx}")); - config.append(CMakeConfigItem("CMAKE_C_COMPILER", "%{Compiler:Executable:C}")); - if (mcuTarget->toolChainPackage()) + // CMake ToolChain file for ghs handles CMAKE_*_COMPILER autonomously + if (mcuTarget->toolChainPackage()->type() != McuToolChainPackage::TypeGHS) { + config.append(CMakeConfigItem("CMAKE_CXX_COMPILER", "%{Compiler:Executable:Cxx}")); + config.append(CMakeConfigItem("CMAKE_C_COMPILER", "%{Compiler:Executable:C}")); + } + if (mcuTarget->toolChainPackage()->type() != McuToolChainPackage::TypeDesktop) config.append(CMakeConfigItem( "CMAKE_TOOLCHAIN_FILE", (qulDir + "/lib/cmake/Qul/toolchain/" @@ -528,8 +573,6 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg (qulDir + "/lib/cmake/Qul/QulGenerators.cmake").toUtf8())); config.append(CMakeConfigItem("QUL_PLATFORM", mcuTarget->qulPlatform().toUtf8())); - if (mcuTargetIsDesktop(mcuTarget)) - config.append(CMakeConfigItem("CMAKE_PREFIX_PATH", "%{Qt:QT_INSTALL_PREFIX}")); if (mcuTarget->colorDepth() >= 0) config.append(CMakeConfigItem("QUL_COLOR_DEPTH", QString::number(mcuTarget->colorDepth()).toLatin1())); @@ -541,14 +584,24 @@ static void setKitCMakeOptions(ProjectExplorer::Kit *k, const McuTarget* mcuTarg CMakeConfigurationKitAspect::setConfiguration(k, config); } +static void setKitQtVersionOptions(ProjectExplorer::Kit *k) +{ + QtSupport::QtKitAspect::setQtVersion(k, nullptr); +} + QString McuSupportOptions::kitName(const McuTarget *mcuTarget) const { // TODO: get version from qulSdkPackage and insert into name const QString colorDepth = mcuTarget->colorDepth() > 0 ? QString::fromLatin1(" %1bpp").arg(mcuTarget->colorDepth()) : ""; + // Hack: Use the platform name in the kit name. Exception for the "Qt" platform: use "Desktop" + const QString targetName = + mcuTarget->toolChainPackage()->type() == McuToolChainPackage::TypeDesktop + ? "Desktop" + : mcuTarget->qulPlatform(); return QString::fromLatin1("Qt for MCUs %1 - %2%3") - .arg(supportedQulVersion().toString(), mcuTarget->qulPlatform(), colorDepth); + .arg(supportedQulVersion().toString(), targetName, colorDepth); } QList<ProjectExplorer::Kit *> McuSupportOptions::existingKits(const McuTarget *mcuTargt) @@ -568,13 +621,12 @@ ProjectExplorer::Kit *McuSupportOptions::newKit(const McuTarget *mcuTarget) KitGuard kitGuard(k); setKitProperties(kitName(mcuTarget), k, mcuTarget); - if (!mcuTargetIsDesktop(mcuTarget)) { - setKitToolchains(k, mcuTarget->toolChainPackage()); - setKitDebugger(k, mcuTarget->toolChainPackage()); - setKitDevice(k); - } + setKitDevice(k, mcuTarget); + setKitToolchains(k, mcuTarget->toolChainPackage()); + setKitDebugger(k, mcuTarget->toolChainPackage()); setKitEnvironment(k, mcuTarget, qtForMCUsSdkPackage); setKitCMakeOptions(k, mcuTarget, qtForMCUsSdkPackage->path()); + setKitQtVersionOptions(k); k->setup(); k->fix(); diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index afc26c5003..b87452cca5 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -109,7 +109,9 @@ public: enum Type { TypeArmGcc, TypeIAR, - TypeKEIL + TypeKEIL, + TypeGHS, + TypeDesktop }; McuToolChainPackage(const QString &label, const QString &defaultPath, diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index b4b72ad5e7..73afb438f5 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -60,6 +60,11 @@ McuPackage *createQtForMCUsPackage() return result; } +static McuToolChainPackage *createDesktopToolChainPackage() +{ + return new McuToolChainPackage({}, {}, {}, {}, McuToolChainPackage::TypeDesktop); +} + static McuToolChainPackage *createArmGccPackage() { const char envVar[] = "ARMGCC_DIR"; @@ -93,6 +98,50 @@ static McuToolChainPackage *createArmGccPackage() return result; } +static McuToolChainPackage *createGhsToolchainPackage() +{ + const char envVar[] = "GHS_COMPILER_DIR"; + + const QString defaultPath = + qEnvironmentVariableIsSet(envVar) ? qEnvironmentVariable(envVar) : QDir::homePath(); + + auto result = new McuToolChainPackage( + "Green Hills Compiler", + defaultPath, + Utils::HostOsInfo::withExecutableSuffix("ccv850"), + "GHSToolchain", + McuToolChainPackage::TypeGHS); + result->setEnvironmentVariableName(envVar); + return result; +} + +static McuPackage *createRGLPackage() +{ + const char envVar[] = "RGL_DIR"; + + QString defaultPath; + if (qEnvironmentVariableIsSet(envVar)) { + defaultPath = qEnvironmentVariable(envVar); + } else if (Utils::HostOsInfo::isWindowsHost()) { + defaultPath = QDir::rootPath() + "Renesas_Electronics/D1x_RGL"; + if (QFileInfo::exists(defaultPath)) { + const QFileInfoList subDirs = + QDir(defaultPath).entryInfoList({QLatin1String("rgl_ghs_D1Mx_*")}, + QDir::Dirs | QDir::NoDotAndDotDot); + if (subDirs.count() == 1) + defaultPath = subDirs.first().filePath() + '/'; + } + } + + auto result = new McuPackage( + "Renesas Graphics Library", + defaultPath, + {}, + "RGL"); + result->setEnvironmentVariableName(envVar); + return result; +} + static McuPackage *createStm32CubeFwF7SdkPackage() { auto result = new McuPackage( @@ -140,21 +189,34 @@ static McuPackage *createEvkbImxrt1050SdkPackage() return result; } -static McuPackage *createSeggerJLinkPackage() +static McuPackage *createMcuXpressoIdePackage() { - QString defaultPath = QString("%{Env:SEGGER_JLINK_SOFTWARE_AND_DOCUMENTATION_PATH}"); - if (Utils::HostOsInfo::isWindowsHost()) { - const QString programPath = findInProgramFiles("/SEGGER/JLink"); - if (!programPath.isEmpty()) - defaultPath = programPath; + const char envVar[] = "MCUXpressoIDE_PATH"; + + QString defaultPath; + if (qEnvironmentVariableIsSet(envVar)) { + defaultPath = qEnvironmentVariable(envVar); + } else if (Utils::HostOsInfo::isWindowsHost()) { + defaultPath = QDir::rootPath() + "nxp"; + if (QFileInfo::exists(defaultPath)) { + // If default dir has exactly one sub dir that could be the IDE path, pre-select that. + const QFileInfoList subDirs = + QDir(defaultPath).entryInfoList({QLatin1String("MCUXpressoIDE*")}, + QDir::Dirs | QDir::NoDotAndDotDot); + if (subDirs.count() == 1) + defaultPath = subDirs.first().filePath() + '/'; + } + } else { + defaultPath = "/usr/local/mcuxpressoide/"; } + auto result = new McuPackage( - McuPackage::tr("SEGGER JLink"), + "MCUXpresso IDE", defaultPath, - Utils::HostOsInfo::withExecutableSuffix("JLink"), - "SeggerJLink"); - result->setDownloadUrl("https://www.segger.com/downloads/jlink"); - result->setEnvironmentVariableName("SEGGER_JLINK_SOFTWARE_AND_DOCUMENTATION_PATH"); + Utils::HostOsInfo::withExecutableSuffix("ide/binaries/crt_emu_cm_redlink"), + "MCUXpressoIDE"); + result->setDownloadUrl("https://www.nxp.com/mcuxpresso/ide"); + result->setEnvironmentVariableName(envVar); return result; } @@ -162,21 +224,25 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage QVector<McuTarget *> *mcuTargets) { McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage(); + McuToolChainPackage *ghsToolchainPackage = createGhsToolchainPackage(); + McuToolChainPackage* desktopToolChainPackage = createDesktopToolChainPackage(); McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage(); McuPackage* stm32CubeProgrammerPackage = Sdk::createStm32CubeProgrammerPackage(); McuPackage* evkbImxrt1050SdkPackage = Sdk::createEvkbImxrt1050SdkPackage(); - McuPackage* seggerJLinkPackage = Sdk::createSeggerJLinkPackage(); + McuPackage *mcuXpressoIdePackage = createMcuXpressoIdePackage(); + McuPackage *rglPackage = createRGLPackage(); QVector<McuPackage*> stmEvalPackages = { armGccPackage, stm32CubeProgrammerPackage}; QVector<McuPackage*> nxpEvalPackages = { - armGccPackage, seggerJLinkPackage}; + armGccPackage, mcuXpressoIdePackage}; QVector<McuPackage*> renesasEvalPackages = { - armGccPackage, seggerJLinkPackage}; + ghsToolchainPackage, rglPackage}; QVector<McuPackage*> desktopPackages = {}; *packages = { - armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage, - seggerJLinkPackage}; + armGccPackage, desktopToolChainPackage, ghsToolchainPackage, + stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage, + mcuXpressoIdePackage, rglPackage}; const QString vendorStm = "STM"; const QString vendorNxp = "NXP"; @@ -192,8 +258,8 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage } targets[] = { {vendorNxp, {"MIMXRT1050-EVK"}, nxpEvalPackages, armGccPackage, {16}}, {vendorNxp, {"MIMXRT1064-EVK"}, nxpEvalPackages, armGccPackage, {16}}, - {vendorQt, {"Qt"}, desktopPackages, nullptr, {32}}, - {vendorRenesas, {"RH850-D1M1A"}, renesasEvalPackages, armGccPackage, {32}}, + {vendorQt, {"Qt"}, desktopPackages, desktopToolChainPackage, {32}}, + {vendorRenesas, {"RH850-D1M1A"}, renesasEvalPackages, ghsToolchainPackage, {32}}, {vendorStm, {"STM32F469I-DISCOVERY"}, stmEvalPackages, armGccPackage, {24}}, {vendorStm, {"STM32F7508-DISCOVERY"}, stmEvalPackages, armGccPackage, {32, 16}}, {vendorStm, {"STM32F769I-DISCOVERY"}, stmEvalPackages, armGccPackage, {32}}, diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp index eb6be29f10..33e41c31c7 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp @@ -159,6 +159,14 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id) QbsBuildConfiguration::~QbsBuildConfiguration() { + for (BuildStep * const bs : buildSteps()->steps()) { + if (const auto qbs = qobject_cast<QbsBuildStep *>(bs)) + qbs->dropSession(); + } + for (BuildStep * const cs : cleanSteps()->steps()) { + if (const auto qcs = qobject_cast<QbsCleanStep *>(cs)) + qcs->dropSession(); + } delete m_buildSystem; } diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index fb5ca63f91..d403ad0589 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -537,6 +537,15 @@ QbsBuildStepData QbsBuildStep::stepData() const return data; } +void QbsBuildStep::dropSession() +{ + if (m_session) { + doCancel(); + m_session->disconnect(this); + m_session = nullptr; + } +} + // -------------------------------------------------------------------- // QbsBuildStepConfigWidget: diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h index 53ef60ed7e..f0906936b6 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.h +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h @@ -73,6 +73,8 @@ public: QbsBuildSystem *qbsBuildSystem() const; QbsBuildStepData stepData() const; + void dropSession(); + signals: void qbsConfigurationChanged(); void qbsBuildOptionsChanged(); diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp index f6753fa411..07adf568d2 100644 --- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp +++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp @@ -85,6 +85,15 @@ QbsCleanStep::~QbsCleanStep() m_session->disconnect(this); } +void QbsCleanStep::dropSession() +{ + if (m_session) { + doCancel(); + m_session->disconnect(this); + m_session = nullptr; + } +} + bool QbsCleanStep::init() { if (buildSystem()->isParsing() || m_session) diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.h b/src/plugins/qbsprojectmanager/qbscleanstep.h index 24aac0008e..81a51351da 100644 --- a/src/plugins/qbsprojectmanager/qbscleanstep.h +++ b/src/plugins/qbsprojectmanager/qbscleanstep.h @@ -46,6 +46,8 @@ public: QbsBuildStepData stepData() const; + void dropSession(); + private: bool init() override; void doRun() override; diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index eef9515750..84c8fc1523 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -106,7 +106,8 @@ void DragTool::createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, m_dragNode = QmlItemNode::createQmlItemNode(view(), itemLibraryEntry, itemPos, parentNode); - m_dragNode.setFlowItemPosition(positonInItemSpace); + if (rootIsFlow) + m_dragNode.setFlowItemPosition(positonInItemSpace); QList<QmlItemNode> nodeList; nodeList.append(m_dragNode); diff --git a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp index f26178c456..df9590af64 100644 --- a/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp +++ b/src/plugins/qmldesigner/components/importmanager/importmanagerview.cpp @@ -87,6 +87,8 @@ void ImportManagerView::importsChanged(const QList<Import> &/*addedImports*/, co void ImportManagerView::possibleImportsChanged(const QList<Import> &/*possibleImports*/) { + QmlDesignerPlugin::instance()->currentDesignDocument()->updateSubcomponentManager(); + if (m_importsWidget) m_importsWidget->setPossibleImports(model()->possibleImports()); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp index ee290d01f3..34fa71222d 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetimporter.cpp @@ -512,20 +512,18 @@ void ItemLibraryAssetImporter::finalizeQuick3DImport() addInfo(progressTitle); notifyProgress(0, progressTitle); - // Trigger underlying qmljs snapshot update by making a non-change to the doc - model->rewriterView()->textModifier()->replace(0, 0, {}); - // There is an inbuilt delay before rewriter change actually updates the data model, // so we need to wait for a moment to allow the change to take effect. // Otherwise subsequent subcomponent manager update won't detect new imports properly. QTimer *timer = new QTimer(parent()); static int counter; counter = 0; - timer->callOnTimeout([this, timer, progressTitle, doc]() { + timer->callOnTimeout([this, timer, progressTitle, model]() { if (!isCancelled()) { notifyProgress(++counter * 10, progressTitle); if (counter >= 10) { - doc->updateSubcomponentManager(); + // Trigger underlying qmljs snapshot update by making a non-change to the doc + model->rewriterView()->textModifier()->replace(0, 0, {}); timer->stop(); notifyFinished(); } diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp index 9cf92f1440..0bf0503888 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp @@ -39,6 +39,7 @@ #include <QApplication> #include <QCursor> +#include <QFontDatabase> #include <QQmlContext> #include <coreplugin/icore.h> @@ -410,6 +411,12 @@ void PropertyEditorContextObject::restoreCursor() QApplication::restoreOverrideCursor(); } +QStringList PropertyEditorContextObject::styleNamesForFamily(const QString &family) +{ + const QFontDatabase dataBase; + return dataBase.styles(family); +} + void EasingCurveEditor::registerDeclarativeType() { qmlRegisterType<EasingCurveEditor>("HelperWidgets", 2, 0, "EasingCurveEditor"); diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h index c38531ce8b..4b74f7331b 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.h @@ -90,6 +90,8 @@ public: Q_INVOKABLE void hideCursor(); Q_INVOKABLE void restoreCursor(); + Q_INVOKABLE QStringList styleNamesForFamily(const QString &family); + int majorVersion() const; int majorQtQuickVersion() const; int minorQtQuickVersion() const; |