From 33a91ab099931c9b217d4e728a10ff09c70fac21 Mon Sep 17 00:00:00 2001 From: Venugopal Shivashankar Date: Fri, 15 May 2020 10:32:33 +0200 Subject: [PATCH 01/16] Doc: Update the MCU options dialog screenshot In addition, document the option to create and remove a kit for the chosen SDK. Change-Id: I90c405d12ad6bc5d369453f70049b4fe9dd03962 Reviewed-by: Alessandro Portale Reviewed-by: Leena Miettinen --- .../images/qtcreator-mcu-options.png | Bin 14344 -> 11098 bytes doc/qtcreator/src/mcu/creator-mcu-dev.qdoc | 3 +++ 2 files changed, 3 insertions(+) diff --git a/doc/qtcreator/images/qtcreator-mcu-options.png b/doc/qtcreator/images/qtcreator-mcu-options.png index 1ebe08f243b834ca41768a729db97722d9dea40a..5d8758a8e113dfa0843832e1465f2138fee1d3c9 100644 GIT binary patch literal 11098 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 literal 14344 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 diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index 268dfde2b41..fc5a2debeec 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -122,6 +122,9 @@ \li In the \uicontrol {SEGGER JLink} field, specify the path to the directory where you installed the tool. \endlist + \li Select \uicontrol{Create Kit} to create a kit. If you have + an older kit for the selected SDK, remove it first using + \uicontrol{Remove Kit}. \li Select \uicontrol Apply to save the settings and to generate a MCU device and kit. \endlist From 3a2f09c1bb661051174b5cd6deeb953f719f5fde Mon Sep 17 00:00:00 2001 From: Venugopal Shivashankar Date: Mon, 29 Jun 2020 10:58:04 +0200 Subject: [PATCH 02/16] Doc: Update the setup instructions Dropped/moved links to the Qt for MCUs documentation at some places. This should improve the reading experience and avoid confusion. Fixes: UL-2324 Change-Id: Ied18323355884092d9b02a2228bdf8a9e1c4235c Reviewed-by: Rainer Keller Reviewed-by: Leena Miettinen --- doc/qtcreator/src/mcu/creator-mcu-dev.qdoc | 76 ++++++++++++---------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index fc5a2debeec..96fb05b6971 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -49,9 +49,6 @@ For a list of Qt for MCU reference implementations, see the \l{Qt for MCUs - Supported Target Platforms}{Qt for MCUs} documentation. - You use the \l{Connecting Bare Metal Devices}{Bare metal plugin} to connect - to a debug server provider for debugging on MCUs. - \section1 Requirements To use \QC to develop QML applications for MCUs, you need the following: @@ -61,33 +58,40 @@ \li The Bare Metal plugin \li \l{https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm} {GNU ARM Embedded Toolchain} - \li The hardware-specific requirements vary depending on the hardware platform you are developing for. - For more information see: - \list - \li \l{Getting Started on NXP} - \li \l{Getting Started on STM} - \li \l{Getting Started on Renesas} - \endlist \endlist + The hardware-specific requirements vary depending on the hardware platform you are developing for. + For more information see: + \list + \li \l{Getting Started on NXP} + \li \l{Getting Started on STM} + \li \l{Getting Started on Renesas} + \endlist + \section1 Setting Up the Development Environment You must download and install the required software and create connections - between \QC and MCUs. For more information, see \l{Getting Started on Windows}. + between \QC and MCUs. The following subsections guide you through the + setup process. - \section2 Enabling Bare Metal and MCU Plugins + \section2 MCU and Bare Metal Plugins - To be able to develop for MCUs, you must enable the Bare Metal and MCU - plugins: + To be able to develop applications for MCUs, you need the MCU plugin at least. + This plugin is enabled automatically by the installer when you install the + Qt for MCUs SDK. + The Bare Metal plugin is optional unless you want to configure the + debug server provider settings explicitly. For more information + see \l{Connecting Bare Metal Devices}. + + To explicitly disable or enable any of these plugins, follow these + instructions: \list 1 \li Select \uicontrol Help > \uicontrol {About Plugins} > \uicontrol {Device Support} > \uicontrol {Bare Metal} and \uicontrol {MCU Support} to enable the Bare Metal and MCU plugins. \li Select \uicontrol {Restart Now} to restart \QC and load the plugins. - \li Create connections for debugging on the MCU board, as described in - \l{Connecting Bare Metal Devices}. \endlist \section2 Specifying MCU Settings @@ -103,30 +107,30 @@ to the directory where you installed Qt for MCUs SDK. \li In the \uicontrol {Targets supported by the Qt for MCUs SDK} field, select your MCU board. - \li In the \uicontrol {GNU ARM Embedded Toolchain} field, - specify the path to the directory where you installed the - tool chain. - \li For STM32 boards: + \li In the \uicontrol Requirements section, ensure that the + platform-specific requirements are met. This varies depending + on the target chosen: \list - \li In the \uicontrol {STM32Cube SDK} field, specify the - path to the directory where you installed the SDK. - \li In the \uicontrol {STM32Cube Programmer} field, - specify the path to the directory where you - installed the tool. - \endlist - \li For NXP boards: - \list - \li In the \uicontrol {NXP EVKB-IMXRT 1050 SDK} field, - specify the path to the directory where you - installed the SDK. - \li In the \uicontrol {SEGGER JLink} field, specify the - path to the directory where you installed the tool. + \li For STM32 targets: + \list + \li The \uicontrol {GNU ARM Embedded Toolchain} path. + \li The \uicontrol {STM32CubeProgrammer} install path. + \endlist + \li For NXP targets: + \list + \li The \uicontrol {GNU ARM Embedded Toolchain} path. + \li The \uicontrol {MCUXpresso IDE} install path. + \endlist + \li For Renesas targets: + \list + \li The \uicontrol {Green Hills Compiler} path. + \li The \uicontrol {Renesas Graphics Library} path. + \endlist \endlist \li Select \uicontrol{Create Kit} to create a kit. If you have - an older kit for the selected SDK, remove it first using + an older kit for the selected target, remove it first using \uicontrol{Remove Kit}. - \li Select \uicontrol Apply to save the settings and to generate - a MCU device and kit. + \li Select \uicontrol Apply to save the settings. \endlist \section2 Adding MCU Devices From 2c2cd08761372b212e14de7e2b46590d658d13bd Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 23 Jun 2020 11:44:37 +0200 Subject: [PATCH 03/16] QmlJS: Fix codemodel reset The QML import paths weren't scanned for modules when the code model was reset. Task-number: QTCREATORBUG-24082 Change-Id: If818ebf4ef123529e5fe8de40e6b5d0154c84680 Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljsmodelmanagerinterface.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp index 25cd5f02d0e..4417ddb2402 100644 --- a/src/libs/qmljs/qmljsmodelmanagerinterface.cpp +++ b/src/libs/qmljs/qmljsmodelmanagerinterface.cpp @@ -1570,10 +1570,15 @@ void ModelManagerInterface::resetCodeModel() // reset the snapshot m_validSnapshot = Snapshot(); m_newestSnapshot = Snapshot(); + m_scannedPaths.clear(); } // start a reparse thread updateSourceFiles(documents, false); + + // rescan import directories + m_shouldScanImports = true; + updateImportPaths(); } } // namespace QmlJS From b684d4c827f3f2904200ea0e8e6a64c47d574983 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 25 Jun 2020 15:02:05 +0200 Subject: [PATCH 04/16] CMake: Fix handling of setting for Ninja path When Ninja is installed via the installer, it writes the full path to the Ninja binary into the settings. Change-Id: I95a19c8c1afbf980c899fb1eeb8656e7e86ad4a2 Reviewed-by: Tobias Hunger --- src/plugins/cmakeprojectmanager/builddirparameters.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/builddirparameters.cpp b/src/plugins/cmakeprojectmanager/builddirparameters.cpp index 1c71396c760..942485cad01 100644 --- a/src/plugins/cmakeprojectmanager/builddirparameters.cpp +++ b/src/plugins/cmakeprojectmanager/builddirparameters.cpp @@ -64,8 +64,11 @@ BuildDirParameters::BuildDirParameters(CMakeBuildConfiguration *bc) environment.set("ICECC", "no"); CMakeSpecificSettings *settings = CMakeProjectPlugin::projectTypeSpecificSettings(); - if (!settings->ninjaPath().isEmpty()) - environment.appendOrSetPath(settings->ninjaPath().toString()); + if (!settings->ninjaPath().isEmpty()) { + const Utils::FilePath setting = settings->ninjaPath(); + const Utils::FilePath path = setting.toFileInfo().isFile() ? setting.parentDir() : setting; + environment.appendOrSetPath(path.toString()); + } cmakeToolId = CMakeKitAspect::cmakeToolId(k); From c43ef81d4f59c07b580a8c95335ed9cc6fa7955d Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 29 Jun 2020 23:21:22 +0200 Subject: [PATCH 05/16] McuSupport: Add MCU/Board SDK package to kits In order to access target specific APIs/services, one needs a vendor specific SDK. In Qt for MCUs, these SDKs get integrated to the build system by a couple of environment variables. Some examples: EVKB_IMXRT1050_SDK_PATH, STM32Cube_FW_H7_SDK_PATH, STM32_CUBE_L4_INSTALL_PATH, etc. This patch adds a path chooser for MCU/Board Sdk installations to the McuSupport Kit creation settings page. The selected path is set as environoment variable in the Kits settings. A fix in parseDescriptionJson was needed to read the boardSdk/envVar. Task-number: QTCREATORBUG-24201 Change-Id: I4ceb9ce0f54e321646bbdeb256703011583feefb Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportsdk.cpp | 28 +++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index a00d542027c..7509fefba37 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -202,6 +202,23 @@ static McuPackage *createMcuXpressoIdePackage() return result; } +static McuPackage *createBoardSdkPackage(const QString &envVar) +{ + const QString envVarPrefix = envVar.chopped(strlen("_SDK_PATH")); + + const QString defaultPath = + qEnvironmentVariableIsSet(envVar.toLatin1()) ? + qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath(); + + auto result = new McuPackage( + QString::fromLatin1("MCU SDK (%1)").arg(envVarPrefix), + defaultPath, + {}, + envVar); + result->setEnvironmentVariableName(envVar); + return result; +} + static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar) { const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR")); @@ -246,6 +263,7 @@ static QVector targetsFromDescriptions(const QList boardSdkPkgs; QHash freeRTOSPkgs; QVector mcuTargets; @@ -262,6 +280,13 @@ static QVector targetsFromDescriptions(const QList required3rdPartyPkgs = { vendorPkgs.value(desc.platformVendor), tcPkg }; + if (!desc.boardSdkEnvVar.isEmpty()) { + if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { + auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar); + boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg); + } + required3rdPartyPkgs.append(boardSdkPkgs.value(desc.boardSdkEnvVar)); + } if (os == McuTarget::OS::FreeRTOS) { if (desc.freeRTOSEnvVar.isEmpty()) { continue; @@ -286,6 +311,7 @@ static QVector targetsFromDescriptions(const QListappend(Utils::transform >( tcPkgs.values(), [&](McuToolChainPackage *tcPkg) { return tcPkg; })); packages->append(vendorPkgs.values().toVector()); + packages->append(boardSdkPkgs.values().toVector()); packages->append(freeRTOSPkgs.values().toVector()); return mcuTargets; @@ -328,7 +354,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data) target.value("platformVendor").toString(), colorDepthsVector, toolchain.value("id").toString(), - boardSdk.value("boardSdkEnvVar").toString(), + boardSdk.value("envVar").toString(), freeRTOSEnvVarForPlatform(platform) // Workaround for UL-2514: Missing FreeRTOS information }; } From a6bf71a327e16173325297b70fedde4e2221d5e5 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 29 Jun 2020 23:27:16 +0200 Subject: [PATCH 06/16] McuSupport: Bump supported Qt for MCUs version from 1.2 to 1.3 Task-number: QTCREATORBUG-24203 Change-Id: I259a4bfba49624d313fd1a2562f6288e047a16da Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportoptions.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index a73366f79aa..7d7ae86b609 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -61,7 +61,7 @@ namespace McuSupport { namespace Internal { -static const int KIT_VERSION = 5; // Bumps up whenever details in Kit creation change +static const int KIT_VERSION = 6; // Bumps up whenever details in Kit creation change static QString packagePathFromSettings(const QString &settingsKey, QSettings::Scope scope = QSettings::UserScope, @@ -452,7 +452,7 @@ void McuSupportOptions::deletePackagesAndTargets() const QVersionNumber &McuSupportOptions::supportedQulVersion() { - static const QVersionNumber v({1, 2}); + static const QVersionNumber v({1, 3}); return v; } From f5f684a609cc802335456dad3868ac874008a2e1 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 28 May 2020 11:32:06 +0200 Subject: [PATCH 07/16] Squish: Fix expectation when canceling a clone Change-Id: I674324a4a98e4329c4445de69ceddeffba607ff3 Reviewed-by: Robert Loehning --- tests/system/suite_tools/tst_git_clone/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_tools/tst_git_clone/test.py b/tests/system/suite_tools/tst_git_clone/test.py index 476c1be3652..35266deb8ff 100644 --- a/tests/system/suite_tools/tst_git_clone/test.py +++ b/tests/system/suite_tools/tst_git_clone/test.py @@ -130,5 +130,5 @@ def main(): test.fail("The checked out project was not being opened.", str(waitForObject(":Cannot Open Project_QTextEdit").plainText)) clickButton(waitForObject(":Cannot Open Project.OK_QPushButton")) - verifyVersionControlView(targetDir, button == "Cancel immediately") + verifyVersionControlView(targetDir, button != ":Git Repository Clone.Finish_QPushButton") invokeMenuItem("File", "Exit") From 349e525031652b65f4894f9e752546cfac805afd Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 30 Jun 2020 18:07:41 +0200 Subject: [PATCH 08/16] McuSupport: Skip Renesas' "RGL" board SDK ghs-renesas-rh850-d1m1a.json lists "boardSdk/envVar": "RGL_DIR". However, that dependency is already handled as vendorSdk. This and the other board SDKs differ so much, that we simply keep "RGL" as vendorSdk and skip it when creating board SDKs. Amends c43ef81d4f59c07b580a8c95335ed9cc6fa7955d Task-number: QTCREATORBUG-24201 Change-Id: I052d50f413ecc5f318d4146c207ab690acf1b1f5 Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportsdk.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 7509fefba37..143dad05ad0 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -280,7 +280,8 @@ static QVector targetsFromDescriptions(const QList required3rdPartyPkgs = { vendorPkgs.value(desc.platformVendor), tcPkg }; - if (!desc.boardSdkEnvVar.isEmpty()) { + if (!desc.boardSdkEnvVar.isEmpty() + && desc.boardSdkEnvVar != "RGL_DIR") { // Already included in vendorPkgs if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar); boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg); From 8017093ed56b19d28f24a5d90c8d533ff29f0dea Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 2 Jul 2020 16:05:53 +0200 Subject: [PATCH 09/16] McuSupport: Read *_FREERTOS_DIR values from .json Instead of from a hard-coded list. Task-number: QTCREATORBUG-24296 Change-Id: Ib74fd854f035d561b8a568987984a2a2cb730175 Reviewed-by: Rainer Keller --- src/plugins/mcusupport/mcusupportsdk.cpp | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 143dad05ad0..adc53ab2aff 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -324,24 +324,13 @@ static QFileInfoList targetDescriptionFiles(const Utils::FilePath &dir) return kitsDir.entryInfoList(); } -static QString freeRTOSEnvVarForPlatform(const QString &platform) -{ - if (platform == "STM32F769I-DISCOVERY" || platform == "STM32F7508-DISCOVERY") - return {"STM32F7_FREERTOS_DIR"}; - else if (platform == "MIMXRT1050-EVK") - return {"IMXRT1050_FREERTOS_DIR"}; - else if (platform == "MIMXRT1064-EVK") - return {"IMXRT1064_FREERTOS_DIR"}; - - return {}; -} - static McuTargetDescription parseDescriptionJson(const QByteArray &data) { const QJsonDocument document = QJsonDocument::fromJson(data); const QJsonObject target = document.object(); const QJsonObject toolchain = target.value("toolchain").toObject(); const QJsonObject boardSdk = target.value("boardSdk").toObject(); + const QJsonObject freeRTOS = target.value("freeRTOS").toObject(); const QString platform = target.value("platform").toString(); @@ -356,7 +345,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data) colorDepthsVector, toolchain.value("id").toString(), boardSdk.value("envVar").toString(), - freeRTOSEnvVarForPlatform(platform) // Workaround for UL-2514: Missing FreeRTOS information + freeRTOS.value("envVar").toString(), }; } From dccdd41ab9e3aeab3c63463ba5ca00b685b7d421 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 2 Jul 2020 16:04:31 +0200 Subject: [PATCH 10/16] McuSupport: Adjust license headers Change-Id: I00ce0c63c59f6d20f8244ea9c693259044d0f7b8 Reviewed-by: Gatis Paeglis --- src/plugins/mcusupport/mcusupport_global.h | 2 +- src/plugins/mcusupport/mcusupportconstants.h | 2 +- src/plugins/mcusupport/mcusupportdevice.cpp | 2 +- src/plugins/mcusupport/mcusupportdevice.h | 2 +- src/plugins/mcusupport/mcusupportoptions.cpp | 4 ++-- src/plugins/mcusupport/mcusupportoptions.h | 4 ++-- src/plugins/mcusupport/mcusupportoptionspage.cpp | 4 ++-- src/plugins/mcusupport/mcusupportoptionspage.h | 4 ++-- src/plugins/mcusupport/mcusupportplugin.cpp | 2 +- src/plugins/mcusupport/mcusupportplugin.h | 2 +- src/plugins/mcusupport/mcusupportrunconfiguration.cpp | 2 +- src/plugins/mcusupport/mcusupportrunconfiguration.h | 2 +- src/plugins/mcusupport/mcusupportsdk.cpp | 4 ++-- src/plugins/mcusupport/mcusupportsdk.h | 4 ++-- 14 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/plugins/mcusupport/mcusupport_global.h b/src/plugins/mcusupport/mcusupport_global.h index 3039bf660b6..a436f3cf0df 100644 --- a/src/plugins/mcusupport/mcusupport_global.h +++ b/src/plugins/mcusupport/mcusupport_global.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index 3d223f48094..1b1aa7a135a 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportdevice.cpp b/src/plugins/mcusupport/mcusupportdevice.cpp index fff6c307490..a6cb55e483c 100644 --- a/src/plugins/mcusupport/mcusupportdevice.cpp +++ b/src/plugins/mcusupport/mcusupportdevice.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportdevice.h b/src/plugins/mcusupport/mcusupportdevice.h index 6bbd764914f..8aff134753c 100644 --- a/src/plugins/mcusupport/mcusupportdevice.h +++ b/src/plugins/mcusupport/mcusupportdevice.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 7d7ae86b609..ece93331e7c 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index cdc7d3a31a1..53d00fb8e5b 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index 56db70972af..1356a69dbf3 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportoptionspage.h b/src/plugins/mcusupport/mcusupportoptionspage.h index fdd5a1c5865..c7b2db6150c 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.h +++ b/src/plugins/mcusupport/mcusupportoptionspage.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportplugin.cpp b/src/plugins/mcusupport/mcusupportplugin.cpp index 07f54e061a6..75efa064d7f 100644 --- a/src/plugins/mcusupport/mcusupportplugin.cpp +++ b/src/plugins/mcusupport/mcusupportplugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportplugin.h b/src/plugins/mcusupport/mcusupportplugin.h index 2f7c24e6057..d3a1d8779ae 100644 --- a/src/plugins/mcusupport/mcusupportplugin.h +++ b/src/plugins/mcusupport/mcusupportplugin.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportrunconfiguration.cpp b/src/plugins/mcusupport/mcusupportrunconfiguration.cpp index 1f9b4dbe67e..40168ed477e 100644 --- a/src/plugins/mcusupport/mcusupportrunconfiguration.cpp +++ b/src/plugins/mcusupport/mcusupportrunconfiguration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportrunconfiguration.h b/src/plugins/mcusupport/mcusupportrunconfiguration.h index 3b0a138e0a1..3561306457f 100644 --- a/src/plugins/mcusupport/mcusupportrunconfiguration.h +++ b/src/plugins/mcusupport/mcusupportrunconfiguration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index adc53ab2aff..1e2e4befec5 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** diff --git a/src/plugins/mcusupport/mcusupportsdk.h b/src/plugins/mcusupport/mcusupportsdk.h index 1cc2adadc7e..d9111fc5846 100644 --- a/src/plugins/mcusupport/mcusupportsdk.h +++ b/src/plugins/mcusupport/mcusupportsdk.h @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2016 BlackBerry Limited. All rights reserved. -** Contact: BlackBerry (qt@blackberry.com) +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt Creator. ** From 5c6c892388f9e15d31539c8578e28b834b553cc8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 3 Jul 2020 09:42:01 +0200 Subject: [PATCH 11/16] Add changes file for 4.12.4 Change-Id: I4f98bdfddfe0ba3a4d9fa9473ae91d026f453b5a Reviewed-by: Leena Miettinen --- dist/changes-4.12.4.md | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 dist/changes-4.12.4.md diff --git a/dist/changes-4.12.4.md b/dist/changes-4.12.4.md new file mode 100644 index 00000000000..70b33f1540a --- /dev/null +++ b/dist/changes-4.12.4.md @@ -0,0 +1,47 @@ +Qt Creator 4.12.4 +================= + +Qt Creator version 4.12.4 contains bug fixes. + +The most important changes are listed in this document. For a complete +list of changes, see the Git log for the Qt Creator sources that +you can check out from the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v4.12.3..v4.12.4 + +Editing +------- + +* Fixed crash when searching in binary files (QTCREATORBUG-21473, QTCREATORBUG-23978) + +### QML + +* Fixed completion of signals from singletons (QTCREATORBUG-24124) +* Fixed import scanning after code model reset (QTCREATORBUG-24082) + +Projects +-------- + +### CMake + +* Fixed search for `ninja` when it is installed with the online installer (QTCREATORBUG-24082) + +Platforms +--------- + +### MCU + +* Adapted to changes in Qt for MCU 1.3 + +Credits for these changes go to: +-------------------------------- +Alessandro Portale +André Pönitz +Christian Kamm +Christian Stenger +Eike Ziller +Fawzi Mohamed +Friedemann Kleint +Robert Löhning +Venugopal Shivashankar From 6fec04d6de52034ffd61c591393e460dc3a33c8f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 3 Jul 2020 09:46:44 +0200 Subject: [PATCH 12/16] McuSupport: Find default FreeRTOS dir inside pre-installed board SDK Qt for MCUs 1.3 ships the board/MCU SDKs, and also adds the subdir to the FreeRTOS component inside the board/MCU SDKs as "boardSdkSubDir" to the .json files (see: UL-2760). Task: Qt Creator needs to lookup that "boardSdkSubDir" value and use it to construct a default path for the FreeRTOS path. Task-number: QTCREATORBUG-24300 Change-Id: Ie3c8186b76443d5fe3640226ea61aa8b14779d54 Reviewed-by: Rainer Keller Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportoptions.cpp | 5 ++++ src/plugins/mcusupport/mcusupportoptions.h | 1 + src/plugins/mcusupport/mcusupportsdk.cpp | 27 ++++++++++++++------ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index ece93331e7c..911f0b3091e 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -95,6 +95,11 @@ QString McuPackage::label() const return m_label; } +QString McuPackage::defaultPath() const +{ + return m_defaultPath; +} + QString McuPackage::detectionPath() const { return m_detectionPath; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 53d00fb8e5b..0ef910b756f 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -66,6 +66,7 @@ public: QString path() const; QString label() const; + QString defaultPath() const; QString detectionPath() const; Status status() const; void setDownloadUrl(const QString &url); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 1e2e4befec5..e3e44a9eaf3 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -219,13 +219,18 @@ static McuPackage *createBoardSdkPackage(const QString &envVar) return result; } -static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar) +static McuPackage *createFreeRTOSSourcesPackage(const QString &envVar, const QString &boardSdkDir, + const QString &freeRTOSBoardSdkSubDir) { const QString envVarPrefix = envVar.chopped(strlen("_FREERTOS_DIR")); - const QString defaultPath = - qEnvironmentVariableIsSet(envVar.toLatin1()) ? - qEnvironmentVariable(envVar.toLatin1()) : QDir::homePath(); + QString defaultPath; + if (qEnvironmentVariableIsSet(envVar.toLatin1())) + defaultPath = qEnvironmentVariable(envVar.toLatin1()); + else if (!boardSdkDir.isEmpty() && !freeRTOSBoardSdkSubDir.isEmpty()) + defaultPath = boardSdkDir + "/" + freeRTOSBoardSdkSubDir; + else + defaultPath = QDir::homePath(); auto result = new McuPackage( QString::fromLatin1("FreeRTOS Sources (%1)").arg(envVarPrefix), @@ -246,6 +251,7 @@ struct McuTargetDescription QString toolchainId; QString boardSdkEnvVar; QString freeRTOSEnvVar; + QString freeRTOSBoardSdkSubDir; }; static QVector targetsFromDescriptions(const QList &descriptions, @@ -280,21 +286,25 @@ static QVector targetsFromDescriptions(const QList required3rdPartyPkgs = { vendorPkgs.value(desc.platformVendor), tcPkg }; + QString boardSdkDefaultPath; if (!desc.boardSdkEnvVar.isEmpty() && desc.boardSdkEnvVar != "RGL_DIR") { // Already included in vendorPkgs if (!boardSdkPkgs.contains(desc.boardSdkEnvVar)) { auto boardSdkPkg = createBoardSdkPackage(desc.boardSdkEnvVar); boardSdkPkgs.insert(desc.boardSdkEnvVar, boardSdkPkg); } - required3rdPartyPkgs.append(boardSdkPkgs.value(desc.boardSdkEnvVar)); + auto boardSdkPkg = boardSdkPkgs.value(desc.boardSdkEnvVar); + boardSdkDefaultPath = boardSdkPkg->defaultPath(); + required3rdPartyPkgs.append(boardSdkPkg); } if (os == McuTarget::OS::FreeRTOS) { if (desc.freeRTOSEnvVar.isEmpty()) { continue; } else { if (!freeRTOSPkgs.contains(desc.freeRTOSEnvVar)) { - auto freeRTOSPkg = createFreeRTOSSourcesPackage(desc.freeRTOSEnvVar); - freeRTOSPkgs.insert(desc.freeRTOSEnvVar, freeRTOSPkg); + freeRTOSPkgs.insert(desc.freeRTOSEnvVar, createFreeRTOSSourcesPackage( + desc.freeRTOSEnvVar, boardSdkDefaultPath, + desc.freeRTOSBoardSdkSubDir)); } required3rdPartyPkgs.append(freeRTOSPkgs.value(desc.freeRTOSEnvVar)); } @@ -346,6 +356,7 @@ static McuTargetDescription parseDescriptionJson(const QByteArray &data) toolchain.value("id").toString(), boardSdk.value("envVar").toString(), freeRTOS.value("envVar").toString(), + freeRTOS.value("boardSdkSubDir").toString() }; } @@ -368,7 +379,7 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector *packa // Workaround for missing JSON file for Desktop target: if (dir.pathAppended("/lib/QulQuickUltralite_QT_32bpp_Windows_Release.lib").exists()) { descriptions.prepend({McuSupportOptions::supportedQulVersion().toString(), - {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}}); + {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}, {}}); } mcuTargets->append(targetsFromDescriptions(descriptions, packages)); From dd505ef4131945d00b7c00a9c6f176e485b32b85 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 30 Jun 2020 17:09:03 +0200 Subject: [PATCH 13/16] McuSupport: Change version checking from exact == to >= minimum So far, one Qt Creator version supported exactly one Qt for MCUs version, mainly because of incompatibilities in-between Qt for MCUs versions. The compatibility of 1.2 with 1.3 and further is now deemed stable enough to loosen the version checking. This change replaces the exact versions comparison (between Qt for MCUs SDK version and what Qt Creator supports) to a minimum version check of what Qt Creator supports. One limitation that remains is that you can only have one kit per target, across the supported Qt for MCUs versions. To mend this, UI changes are required (in a separate commit). Workaround for now: If you want e.g. Desktop Kits for different Qt for MCUs versions at the same time, you need to work with kit clones. Task-number: QTCREATORBUG-24293 Change-Id: Ifd31cd2eadbc1d7fa02415e1928d0047cf007f7c Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportoptions.cpp | 19 ++++++++++++------- src/plugins/mcusupport/mcusupportoptions.h | 9 ++++++--- src/plugins/mcusupport/mcusupportsdk.cpp | 19 +++++++++++-------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 911f0b3091e..f4a333b6fa9 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -336,10 +336,12 @@ QVariant McuToolChainPackage::debuggerId() const return debuggerId; } -McuTarget::McuTarget(const QString &vendor, const QString &platform, OS os, +McuTarget::McuTarget(const QVersionNumber &qulVersion, const QString &vendor, + const QString &platform, OS os, const QVector &packages, const McuToolChainPackage *toolChainPackage) - : m_vendor(vendor) + : m_qulVersion(qulVersion) + , m_vendor(vendor) , m_qulPlatform(platform) , m_os(os) , m_packages(packages) @@ -379,6 +381,11 @@ bool McuTarget::isValid() const }); } +QVersionNumber McuTarget::qulVersion() const +{ + return m_qulVersion; +} + int McuTarget::colorDepth() const { return m_colorDepth; @@ -455,7 +462,7 @@ void McuSupportOptions::deletePackagesAndTargets() mcuTargets.clear(); } -const QVersionNumber &McuSupportOptions::supportedQulVersion() +const QVersionNumber &McuSupportOptions::minimalQulVersion() { static const QVersionNumber v({1, 3}); return v; @@ -498,7 +505,7 @@ static void setKitProperties(const QString &kitName, ProjectExplorer::Kit *k, k->setValue(KIT_MCUTARGET_VENDOR_KEY, mcuTarget->vendor()); k->setValue(KIT_MCUTARGET_MODEL_KEY, mcuTarget->qulPlatform()); k->setValue(KIT_MCUTARGET_COLORDEPTH_KEY, mcuTarget->colorDepth()); - k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, McuSupportOptions::supportedQulVersion().toString()); + k->setValue(KIT_MCUTARGET_SDKVERSION_KEY, mcuTarget->qulVersion().toString()); k->setValue(KIT_MCUTARGET_KITVERSION_KEY, KIT_VERSION); k->setValue(KIT_MCUTARGET_OS_KEY, static_cast(mcuTarget->os())); k->setAutoDetected(true); @@ -631,7 +638,7 @@ QString McuSupportOptions::kitName(const McuTarget *mcuTarget) ? "Desktop" : mcuTarget->qulPlatform(); return QString::fromLatin1("Qt for MCUs %1 - %2%3%4") - .arg(supportedQulVersion().toString(), targetName, os, colorDepth); + .arg(mcuTarget->qulVersion().toString(), targetName, os, colorDepth); } QList McuSupportOptions::existingKits(const McuTarget *mcuTarget) @@ -641,8 +648,6 @@ QList McuSupportOptions::existingKits(const McuTarget *m return Utils::filtered(KitManager::kits(), [mcuTarget](Kit *kit) { return kit->isAutoDetected() && kit->value(KIT_MCUTARGET_KITVERSION_KEY) == KIT_VERSION - && kit->value(KIT_MCUTARGET_SDKVERSION_KEY) == - McuSupportOptions::supportedQulVersion().toString() && (!mcuTarget || ( kit->value(KIT_MCUTARGET_VENDOR_KEY) == mcuTarget->vendor() && kit->value(KIT_MCUTARGET_MODEL_KEY) == mcuTarget->qulPlatform() diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index 0ef910b756f..ed5e70eec18 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -138,9 +138,11 @@ public: FreeRTOS }; - McuTarget(const QString &vendor, const QString &platform, OS os, - const QVector &packages, const McuToolChainPackage *toolChainPackage); + McuTarget(const QVersionNumber &qulVersion, const QString &vendor, const QString &platform, + OS os, const QVector &packages, + const McuToolChainPackage *toolChainPackage); + QVersionNumber qulVersion() const; QString vendor() const; QVector packages() const; const McuToolChainPackage *toolChainPackage() const; @@ -151,6 +153,7 @@ public: bool isValid() const; private: + const QVersionNumber m_qulVersion; const QString m_vendor; const QString m_qulPlatform; const OS m_os = OS::BareMetal; @@ -184,7 +187,7 @@ public: static void registerQchFiles(); static void registerExamples(); - static const QVersionNumber &supportedQulVersion(); + static const QVersionNumber &minimalQulVersion(); private: void deletePackagesAndTargets(); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index e3e44a9eaf3..6279e446d83 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -59,8 +59,8 @@ static QString findInProgramFiles(const QString &folder) McuPackage *createQtForMCUsPackage() { auto result = new McuPackage( - McuPackage::tr("Qt for MCUs %1 SDK").arg( - McuSupportOptions::supportedQulVersion().toString()), + McuPackage::tr("Qt for MCUs %1+ SDK").arg( + McuSupportOptions::minimalQulVersion().toString()), QDir::homePath(), Utils::HostOsInfo::withExecutableSuffix("bin/qmltocpp"), Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK); @@ -276,7 +276,8 @@ static QVector targetsFromDescriptions(const QList targetsFromDescriptions(const QList 1) mcuTarget->setColorDepth(colorDepth); @@ -370,16 +372,17 @@ void targetsAndPackages(const Utils::FilePath &dir, QVector *packa if (!file.open(QFile::ReadOnly)) continue; const McuTargetDescription desc = parseDescriptionJson(file.readAll()); - if (!McuSupportOptions::supportedQulVersion() - .isPrefixOf(QVersionNumber::fromString(desc.qulVersion))) + if (QVersionNumber::fromString(desc.qulVersion) < McuSupportOptions::minimalQulVersion()) return; // Invalid version means invalid SDK installation. descriptions.append(desc); } // Workaround for missing JSON file for Desktop target: if (dir.pathAppended("/lib/QulQuickUltralite_QT_32bpp_Windows_Release.lib").exists()) { - descriptions.prepend({McuSupportOptions::supportedQulVersion().toString(), - {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}, {}}); + const QString qulVersion = descriptions.empty() ? + McuSupportOptions::minimalQulVersion().toString() + : descriptions.first().qulVersion; + descriptions.prepend({qulVersion, {"Qt"}, {"Qt"}, {32}, {"desktop"}, {}, {}, {}}); } mcuTargets->append(targetsFromDescriptions(descriptions, packages)); From d0e3f5ca98f3d7d3646c5ce57af39d38e92229de Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 3 Jul 2020 18:00:34 +0200 Subject: [PATCH 14/16] Fix debugging C++ on iOS devices Partially revert 7f958700a09f09ac124b20d23236ede472b58d87 for 'remote-ios'. The original commit changed the way attaching to a remote server or process works, attempting to make it work with lldb-server on a remote linux device. That breaks connecting to the debugging server on iOS devices. Fixes: QTCREATORBUG-23995 Change-Id: I7a793fa73a564a4ef19cf82e13c2ad50d4247ee3 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/lldbbridge.py | 41 +++++++++++++++----------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index e3d91963451..3350318fbd0 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -890,16 +890,15 @@ class Dumper(DumperBase): if (self.startMode_ == DebuggerStartMode.AttachToRemoteServer or self.startMode_ == DebuggerStartMode.AttachToRemoteProcess): + if self.platform_ != 'remote-ios': + # lldb-server expected on remote + remote_channel = 'connect://' + self.remoteChannel_ + connect_options = lldb.SBPlatformConnectOptions(remote_channel) - - remote_channel = 'connect://' + self.remoteChannel_ - connect_options = lldb.SBPlatformConnectOptions(remote_channel) - - res = self.target.GetPlatform().ConnectRemote(connect_options) - DumperBase.warn("CONNECT: %s %s %s" % (res, - self.target.GetPlatform().GetName(), - self.target.GetPlatform().IsConnected())) - + res = self.target.GetPlatform().ConnectRemote(connect_options) + DumperBase.warn("CONNECT: %s %s %s" % (res, + self.target.GetPlatform().GetName(), + self.target.GetPlatform().IsConnected())) broadcaster = self.target.GetBroadcaster() listener = self.debugger.GetListener() @@ -947,17 +946,23 @@ class Dumper(DumperBase): elif (self.startMode_ == DebuggerStartMode.AttachToRemoteServer or self.startMode_ == DebuggerStartMode.AttachToRemoteProcess): - f = lldb.SBFileSpec() - f.SetFilename(self.executable_) + if self.platform_ == 'remote-ios': + self.process = self.target.ConnectRemote( + self.debugger.GetListener(), + self.remoteChannel_, None, error) + else: + # lldb-server expected + f = lldb.SBFileSpec() + f.SetFilename(self.executable_) - launchInfo = lldb.SBLaunchInfo(self.processArgs_) - #launchInfo.SetWorkingDirectory(self.workingDirectory_) - launchInfo.SetWorkingDirectory('/tmp') - launchInfo.SetExecutableFile(f, True) + launchInfo = lldb.SBLaunchInfo(self.processArgs_) + #launchInfo.SetWorkingDirectory(self.workingDirectory_) + launchInfo.SetWorkingDirectory('/tmp') + launchInfo.SetExecutableFile(f, True) - DumperBase.warn("TARGET: %s" % self.target) - self.process = self.target.Launch(launchInfo, error) - DumperBase.warn("PROCESS: %s" % self.process) + DumperBase.warn("TARGET: %s" % self.target) + self.process = self.target.Launch(launchInfo, error) + DumperBase.warn("PROCESS: %s" % self.process) if not error.Success(): self.report(self.describeError(error)) From 410f051710483674e85dcd50e44cd2ad60ad783b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 6 Jul 2020 11:23:51 +0200 Subject: [PATCH 15/16] Change log for 4.12.4 Change-Id: I04fb6e04f4690b2370ec7a475491d8e10d3c0139 Reviewed-by: Eike Ziller --- dist/changes-4.12.4.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dist/changes-4.12.4.md b/dist/changes-4.12.4.md index 70b33f1540a..93775c86157 100644 --- a/dist/changes-4.12.4.md +++ b/dist/changes-4.12.4.md @@ -30,6 +30,10 @@ Projects Platforms --------- +### iOS + +* Fixed C++ debugging on devices (QTCREATORBUG-23995) + ### MCU * Adapted to changes in Qt for MCU 1.3 From d35cf4b846a914303675a21300b79dc860e6f73f Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Mon, 22 Jun 2020 19:52:59 +0200 Subject: [PATCH 16/16] Squish: Stabilize tst_HELP02 Depending on the sizes of the treeview and its contents, the click might hit the scroll bar and result in a script error. Change-Id: Ic3658b1f180d1aa5a792d6664d2d7f56d8d0c353 Reviewed-by: Christian Stenger --- tests/system/suite_HELP/tst_HELP02/test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system/suite_HELP/tst_HELP02/test.py b/tests/system/suite_HELP/tst_HELP02/test.py index 2eb09773b1b..1d776689be7 100755 --- a/tests/system/suite_HELP/tst_HELP02/test.py +++ b/tests/system/suite_HELP/tst_HELP02/test.py @@ -78,6 +78,7 @@ def setKeyboardShortcutForAboutQtC(): modelIndex = waitForObject("{column='0' text='AboutQtCreator' type='QModelIndex' " "container={column='0' text='QtCreator' type='QModelIndex' " "container=%s}}" % objectMap.realName(treewidget)) + treewidget.scrollTo(modelIndex) mouseClick(modelIndex) shortcutGB = "{title='Shortcut' type='QGroupBox' unnamed='1' visible='1'}" record = waitForObject("{container=%s type='Core::Internal::ShortcutButton' unnamed='1' "