From patchwork Tue Dec 30 10:52:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AdrianF X-Patchwork-Id: 77681 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 845B3E95A74 for ; Tue, 30 Dec 2025 10:56:40 +0000 (UTC) Received: from mta-64-225.siemens.flowmailer.net (mta-64-225.siemens.flowmailer.net [185.136.64.225]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.62165.1767092191521442273 for ; Tue, 30 Dec 2025 02:56:33 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=adrian.freihofer@siemens.com header.s=fm2 header.b=WtA3+8IO; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.64.225, mailfrom: fm-1329275-2025123010562829a61d70fd000207cb-cwp6x9@rts-flowmailer.siemens.com) Received: by mta-64-225.siemens.flowmailer.net with ESMTPSA id 2025123010562829a61d70fd000207cb for ; Tue, 30 Dec 2025 11:56:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=adrian.freihofer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=4/uGZtJa7jkdDSMv8G1rkybLZZ7loMXMXN0DbUe1m9k=; b=WtA3+8IOjqGn0KK+qM13CCAwAQ/ZqIkkuWMS5IB1wqXmfF661MBGf90jJdIhf61/QHEzQW RDiWNItad7uOX4XFUNhEQAqg2xQtuzbH9LQFZk5q9ujLmZ0/p4RO4KoZsUYzVshw6jB6OYtT WkzUpjjWPIjqD3QPv8DGdXYKTkQCb1x5Y8cgtBUbkb72yIAj6wPVqKvQ05xiCHsNvmRavoeC ZNdkp9Uvo39XBufz9zD2sESoiS+HZ+S8dAa6ViUJK/bSF2ytsxHutQqRA8oAhXeccepdWPFY Q+1pmMc4j6TART+Wla9XmlElspMY3TSv9fQLDdOxs4Eozc/zIIBDS3xQ==; From: AdrianF To: openembedded-core@lists.openembedded.org Cc: Adrian Freihofer Subject: [PATCH v3 1/4] fragments: add a 'devtool-ide-sdk' fragment Date: Tue, 30 Dec 2025 11:52:56 +0100 Message-ID: <20251230105607.2615849-2-adrian.freihofer@siemens.com> In-Reply-To: <20251230105607.2615849-1-adrian.freihofer@siemens.com> References: <20251230105607.2615849-1-adrian.freihofer@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1329275:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 Dec 2025 10:56:40 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/228659 From: Adrian Freihofer Add a configuration fragment that enables devtool ide-sdk workflow for development and remote debugging. The configuration is intended to streamline the development workflow where developers can modify recipes with devtool and debug them remotely on target devices using IDEs like VSCode. Signed-off-by: Adrian Freihofer --- .../conf/fragments/yocto/devtool-ide-sdk.conf | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 meta/conf/fragments/yocto/devtool-ide-sdk.conf diff --git a/meta/conf/fragments/yocto/devtool-ide-sdk.conf b/meta/conf/fragments/yocto/devtool-ide-sdk.conf new file mode 100644 index 0000000000..ca0269543b --- /dev/null +++ b/meta/conf/fragments/yocto/devtool-ide-sdk.conf @@ -0,0 +1,26 @@ +BB_CONF_FRAGMENT_SUMMARY = "Use devtool ide-sdk for development and remote debugging." +BB_CONF_FRAGMENT_DESCRIPTION = "\ +This configuration enables the use of devtool ide-sdk. \ +Example usage: \ + 1. bitbake-config-build enable-fragment core/yocto/devtool-ide-sdk \ + bitbake-config-build enable-fragment core/yocto/root-login-with-empty-password \ + 2. The recipe (my-recipe in this case) must be in IMAGE_INSTALL. \ + 3. Devtool modify --debug-build my-recipe \ + 4. devtool ide-sdk my-recipe core-image-full-cmdline --target root@192.168.7.2' \ + 5. runqemu snapshot \ + 6. code $BUILDDIR/workspace/sources/my-recipe \ + 7. Develop and debug the sources of my-recipe from VSCode remotely on the device. \ +\ +Optimize build time: with devtool ide-sdk the dbg tar is not needed \ +(if booting the target via NFS is not used for remote debugging) \ +IMAGE_FSTYPES_DEBUGFS = "" \ +" + +# Build the companion debug file system +IMAGE_GEN_DEBUGFS = "1" + +# Without copying the binaries into roofs-dbg, GDB does not find all source files. +IMAGE_CLASSES += "image-combined-dbg" + +# Remote debugging needs gdbserver on the target device +IMAGE_INSTALL:append = " gdbserver" From patchwork Tue Dec 30 10:52:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AdrianF X-Patchwork-Id: 77683 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 96C2FE95A7A for ; Tue, 30 Dec 2025 10:56:40 +0000 (UTC) Received: from mta-65-228.siemens.flowmailer.net (mta-65-228.siemens.flowmailer.net [185.136.65.228]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.62164.1767092191521176381 for ; Tue, 30 Dec 2025 02:56:33 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=adrian.freihofer@siemens.com header.s=fm2 header.b=LBf6Jb1K; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.65.228, mailfrom: fm-1329275-2025123010562894f17df8f0000207bf-3_4k0_@rts-flowmailer.siemens.com) Received: by mta-65-228.siemens.flowmailer.net with ESMTPSA id 2025123010562894f17df8f0000207bf for ; Tue, 30 Dec 2025 11:56:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=adrian.freihofer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=nQZgkb0OchN0+PkJ76yEPFyAFAeYJ7jTh6PN+GmvjDg=; b=LBf6Jb1K88xqHYiAWS2ESneFc6/03QbjXg7RZYkqAWDif+OLXH0SimogjMDOXawNbG+NrS 8szrEYqFeQGX6RpXvJxUBf0Lw3oNuGnh6n9tGTH7ErQ1peUcqaBT5j6sEjsfjZThDT00gxsP nzpfslqej1rzbuNnX0RHees8Q8gEFQSC5WsUjTrLBYJ2BxzrxOzEWlMLYLp98NNMlTLsvgd6 /64wRx576ScRUCpM7Ktxm6W6oSC/R2CdSVUzUUfHWGeLmCl52+vBA+45HT7bR6oBOCqIiyux i0uHpRj6o38LNUNEhVskGYpLXifAdLvLbP0HUNOES8iEL31sTMoknfvg==; From: AdrianF To: openembedded-core@lists.openembedded.org Cc: Adrian Freihofer Subject: [PATCH v3 2/4] oe-selftest: case: support fragments Date: Tue, 30 Dec 2025 11:52:57 +0100 Message-ID: <20251230105607.2615849-3-adrian.freihofer@siemens.com> In-Reply-To: <20251230105607.2615849-1-adrian.freihofer@siemens.com> References: <20251230105607.2615849-1-adrian.freihofer@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1329275:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 Dec 2025 10:56:40 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/228657 From: Adrian Freihofer By default the toolcfg.conf file from build/conf/toolcfg.conf is copied to build-st/conf/toolcfg.conf. Provide an easy way to add fragments to the toolcfg.conf file from within oe-selftest test cases. Signed-off-by: Adrian Freihofer --- meta/lib/oeqa/selftest/case.py | 28 ++++++++++++++++++++++++++++ meta/lib/oeqa/selftest/context.py | 1 + 2 files changed, 29 insertions(+) diff --git a/meta/lib/oeqa/selftest/case.py b/meta/lib/oeqa/selftest/case.py index da35b25f68..96898411c3 100644 --- a/meta/lib/oeqa/selftest/case.py +++ b/meta/lib/oeqa/selftest/case.py @@ -8,6 +8,7 @@ import sys import os import glob import errno +import shutil from unittest.util import safe_repr import oeqa.utils.ftools as ftools @@ -19,6 +20,7 @@ import bb.utils class OESelftestTestCase(OETestCase): def __init__(self, methodName="runTest"): self._extra_tear_down_commands = [] + self._toolcfgconf_backup = None super(OESelftestTestCase, self).__init__(methodName) @classmethod @@ -30,6 +32,7 @@ class OESelftestTestCase(OETestCase): cls.localconf_path = cls.tc.config_paths['localconf'] cls.local_bblayers_path = cls.tc.config_paths['bblayers'] + cls.toolcfgconf_path = cls.tc.config_paths['toolcfgconf'] cls.testinc_path = os.path.join(cls.tc.config_paths['builddir'], "conf/selftest.inc") @@ -137,6 +140,10 @@ class OESelftestTestCase(OETestCase): self.logger.debug("Trying to move on.") self._extra_tear_down_commands = [] + # Restore toolcfgconf backup + if self._toolcfgconf_backup and os.path.exists(self._toolcfgconf_backup): + shutil.copy2(self._toolcfgconf_backup, self.toolcfgconf_path) + if self._track_for_cleanup: for path in self._track_for_cleanup: if os.path.isdir(path): @@ -174,6 +181,27 @@ class OESelftestTestCase(OETestCase): self.logger.debug("Writing to: %s\n%s\n" % (dest_path, data)) ftools.write_file(dest_path, data) + def configure_fragments(self, enable_fragments=None, disable_fragments=None): + """Configure fragments using bitbake-config-build tool""" + existed = os.path.exists(self.toolcfgconf_path) + # If there was an existing toolcfg.conf, back it up and restore it in tearDown + if existed: + backup_path = self.toolcfgconf_path + ".oe-selftest-bak" + shutil.copy2(self.toolcfgconf_path, backup_path) + self._toolcfgconf_backup = backup_path + self.track_for_cleanup(backup_path) + + if enable_fragments: + cmd = 'bitbake-config-build enable-fragment ' + ' '.join(enable_fragments) + runCmd(cmd) + if disable_fragments: + cmd = 'bitbake-config-build disable-fragment ' + ' '.join(disable_fragments) + runCmd(cmd) + + # If there was no existing toolcfg.conf before, track the new one for cleanup + if not existed and os.path.exists(self.toolcfgconf_path): + self.track_for_cleanup(self.toolcfgconf_path) + def append_config(self, data): """Append to /conf/selftest.inc""" self.logger.debug("Appending to: %s\n%s\n" % (self.testinc_path, data)) diff --git a/meta/lib/oeqa/selftest/context.py b/meta/lib/oeqa/selftest/context.py index c9eb481725..02a4832553 100644 --- a/meta/lib/oeqa/selftest/context.py +++ b/meta/lib/oeqa/selftest/context.py @@ -278,6 +278,7 @@ class OESelftestTestContextExecutor(OETestContextExecutor): self.tc_kwargs['init']['config_paths']['builddir'] = builddir self.tc_kwargs['init']['config_paths']['localconf'] = os.path.join(builddir, "conf/local.conf") self.tc_kwargs['init']['config_paths']['bblayers'] = os.path.join(builddir, "conf/bblayers.conf") + self.tc_kwargs['init']['config_paths']['toolcfgconf'] = os.path.join(builddir, "conf/toolcfg.conf") self.tc_kwargs['init']['newbuilddir'] = args.newbuilddir self.tc_kwargs['init']['keep_builddir'] = args.keep_builddir From patchwork Tue Dec 30 10:52:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AdrianF X-Patchwork-Id: 77684 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83316E95A77 for ; Tue, 30 Dec 2025 10:56:40 +0000 (UTC) Received: from mta-65-227.siemens.flowmailer.net (mta-65-227.siemens.flowmailer.net [185.136.65.227]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.62203.1767092191519884580 for ; Tue, 30 Dec 2025 02:56:32 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=adrian.freihofer@siemens.com header.s=fm2 header.b=LLFiwava; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.65.227, mailfrom: fm-1329275-20251230105628aa84af4eea00020750-mplvyk@rts-flowmailer.siemens.com) Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 20251230105628aa84af4eea00020750 for ; Tue, 30 Dec 2025 11:56:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=adrian.freihofer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=vcxT5qJkb5UlFe0miffFMKoxBLWlzQ9M8239g61F8fE=; b=LLFiwavaNHgCuhK1+LJvJy6jFhGk5Z7D6pcvRGGdnfCED9Ywv7Nipy76JOJjHRp3v8Uj4n VKQUjiasUEJY/ZY4F/KOUhHL+9i5GMRv/ZVeew2nHC61XvhRu/3E0jPH7AEsCXZBVXbqsuen poOtGa3NHxTpXJpR5X1qGf/ZFeL8GMa7x2z31UEATiNpnqX0LOZoX8Z1QBR3AvOMU3OtWFYP a4eG1oyDKs0saXg/SB9xn5PLsr6pDxCTdeeHg24gZGEE4JQdddiO2EG7hAH4ZoRzjIcNIAUi UBtnCHiqE5AHkdoEUvrbfbk0+NGkPT/dmOPXkf9LbLKZfmPnuSRMYtxA==; From: AdrianF To: openembedded-core@lists.openembedded.org Cc: Adrian Freihofer Subject: [PATCH v3 3/4] oe-selftest: case.py: remove unused imports Date: Tue, 30 Dec 2025 11:52:58 +0100 Message-ID: <20251230105607.2615849-4-adrian.freihofer@siemens.com> In-Reply-To: <20251230105607.2615849-1-adrian.freihofer@siemens.com> References: <20251230105607.2615849-1-adrian.freihofer@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1329275:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 Dec 2025 10:56:40 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/228655 From: Adrian Freihofer Signed-off-by: Adrian Freihofer --- meta/lib/oeqa/selftest/case.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/meta/lib/oeqa/selftest/case.py b/meta/lib/oeqa/selftest/case.py index 96898411c3..1d7ba0861b 100644 --- a/meta/lib/oeqa/selftest/case.py +++ b/meta/lib/oeqa/selftest/case.py @@ -4,9 +4,7 @@ # SPDX-License-Identifier: MIT # -import sys import os -import glob import errno import shutil from unittest.util import safe_repr From patchwork Tue Dec 30 10:52:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AdrianF X-Patchwork-Id: 77682 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 85517E95A79 for ; Tue, 30 Dec 2025 10:56:40 +0000 (UTC) Received: from mta-64-226.siemens.flowmailer.net (mta-64-226.siemens.flowmailer.net [185.136.64.226]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.62204.1767092191520063184 for ; Tue, 30 Dec 2025 02:56:32 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=adrian.freihofer@siemens.com header.s=fm2 header.b=MLNZLo2+; spf=pass (domain: rts-flowmailer.siemens.com, ip: 185.136.64.226, mailfrom: fm-1329275-20251230105628fbf8661b1500020780-412dxf@rts-flowmailer.siemens.com) Received: by mta-64-226.siemens.flowmailer.net with ESMTPSA id 20251230105628fbf8661b1500020780 for ; Tue, 30 Dec 2025 11:56:29 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm2; d=siemens.com; i=adrian.freihofer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=QdS1fEVc1a7OnHr6WV7LzPvtUggBwrI0sNDDXF51L9g=; b=MLNZLo2+kalZTJXHasJUi++UOGdcBajzCQ2kd5RhaS0PGjPbKnCA15AsIwDD558m2kY9zS edLmXSgOcyksqiX1OjIX9GHHV7D/4E2qs1ywb+/XuOFZojIa6TWTMEl4cBfK2x9PnEpswubp Scl+QNejTCaq5CwPHRKIhMdHrnCF+AioqVyIz4xlZAtT+0rG4Jvv9cV6aA6Mkfx8WleMJrMg pedg0FSSYtiqsKU4WLKKXyTHchOqmzV5kO+l726DzImv0RKv4IJ6XJ5pbq0YhKM0GZyH72Cv GV8cK5p8Xn+qT/9PMRk87oICt+qSBupFNogjmIAoiUw67XSb/DoP+LgA==; From: AdrianF To: openembedded-core@lists.openembedded.org Cc: Adrian Freihofer Subject: [PATCH v3 4/4] oe-selftest: ide_sdk: use the ide-sdk fragment Date: Tue, 30 Dec 2025 11:52:59 +0100 Message-ID: <20251230105607.2615849-5-adrian.freihofer@siemens.com> In-Reply-To: <20251230105607.2615849-1-adrian.freihofer@siemens.com> References: <20251230105607.2615849-1-adrian.freihofer@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1329275:519-21489:flowmailer List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 30 Dec 2025 10:56:40 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/228656 From: Adrian Freihofer Test also the new ide-sdk fragment when setting up the ide-sdk test environment. Signed-off-by: Adrian Freihofer --- meta/lib/oeqa/selftest/cases/devtool.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py index 8d7e984753..90ce543a6f 100644 --- a/meta/lib/oeqa/selftest/cases/devtool.py +++ b/meta/lib/oeqa/selftest/cases/devtool.py @@ -2524,12 +2524,10 @@ class DevtoolUpgradeTests(DevtoolBase): class DevtoolIdeSdkTests(DevtoolBase): def _write_bb_config(self, recipe_names): - """Helper to write the bitbake local.conf file""" + """Helper to write the bitbake configuration""" + self.configure_fragments(['core/yocto/devtool-ide-sdk']) conf_lines = [ - 'IMAGE_CLASSES += "image-combined-dbg"', - 'IMAGE_GEN_DEBUGFS = "1"', - 'IMAGE_INSTALL:append = " gdbserver %s"' % ' '.join( - [r + '-ptest' for r in recipe_names]), + 'IMAGE_INSTALL:append = " %s"' % ' '.join([r + '-ptest' for r in recipe_names]), 'DISTRO_FEATURES:append = " ptest"' ] self.write_config("\n".join(conf_lines))