From patchwork Thu Feb 15 17:04:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Enguerrand de Ribaucourt X-Patchwork-Id: 39348 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 DE0E3C4829E for ; Thu, 15 Feb 2024 17:04:38 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.19501.1708016670356532656 for ; Thu, 15 Feb 2024 09:04:30 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=nk7OMqjf; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: enguerrand.de-ribaucourt@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 96E2F9C32FC; Thu, 15 Feb 2024 12:04:29 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id 8RWSnjyu2-g2; Thu, 15 Feb 2024 12:04:29 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 1F6B89C45A3; Thu, 15 Feb 2024 12:04:29 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 1F6B89C45A3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708016669; bh=xI79Lqi0pVGl99CZV1mLrqT29R5y1YeOz6nigbiJeSM=; h=From:To:Date:Message-Id:MIME-Version; b=nk7OMqjf5VSqrWzsvSf3ydMvbOHZymiI1vOjkt+i8a7pJHJZYDLCUH27ancET0DvT iUOt/sYBt042VueNBmVT1m090vsBADmQ3rqwe1cZufRgg8fCtyP8xZtPxUu511+MpK sRAwIMUk83tPmNDcZi5EV965feXZ462zKo7SjwqITRMxJ66MRwbmr43oxrGKrhy8oo SmbLuE3vKPXtwFO0JaV99YpaloxUO42Hn4EisS97GLAoGcX72FO6dXN4Twnh+iICw/ +M9vL5Gi0FD7abHUhGd3qGVE1vWlw5ynPJS5qeagQnLQvqmdBnwF3lCZH12Ecc5t5h KtrpF72CiGndA== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id 8ji0Sr7pwADl; Thu, 15 Feb 2024 12:04:29 -0500 (EST) Received: from sfl-deribaucourt.rennes.sfl (lmontsouris-657-1-69-118.w80-15.abo.wanadoo.fr [80.15.101.118]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id 5D6879C32FC; Thu, 15 Feb 2024 12:04:28 -0500 (EST) From: Enguerrand de Ribaucourt To: openembedded-core@lists.openembedded.org Cc: adrian.freihofer@gmail.com, Ross.Burton@arm.com, mohammed.raza@savoirfairelinux.com, Enguerrand de Ribaucourt Subject: [PATCH 1/6] devtool: ide: Fix topdir exception for fallback mode Date: Thu, 15 Feb 2024 18:04:17 +0100 Message-Id: <20240215170422.659073-2-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 15 Feb 2024 17:04:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195548 An exception was raised because we did not have the topdir attribute which was used in fallback mode (non cmake/meson recipes). Already in the merge queue in Adrian's latest patches. --- scripts/lib/devtool/ide_sdk.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py index 3986dc1436a..db2e95616be 100755 --- a/scripts/lib/devtool/ide_sdk.py +++ b/scripts/lib/devtool/ide_sdk.py @@ -366,6 +366,7 @@ class RecipeModified: self.target_arch = recipe_d.getVar('TARGET_ARCH') self.topdir = recipe_d.getVar('TOPDIR') self.workdir = os.path.realpath(recipe_d.getVar('WORKDIR')) + self.topdir = os.path.realpath(recipe_d.getVar('TOPDIR')) self.__init_exported_variables(recipe_d) From patchwork Thu Feb 15 17:04:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Enguerrand de Ribaucourt X-Patchwork-Id: 39351 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 279B9C48BF3 for ; Thu, 15 Feb 2024 17:04:39 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web10.19293.1708016671244985336 for ; Thu, 15 Feb 2024 09:04:31 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=sM4TnhYd; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: enguerrand.de-ribaucourt@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 862109C3372; Thu, 15 Feb 2024 12:04:30 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id mJzyoblpFUDY; Thu, 15 Feb 2024 12:04:30 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id F058A9C3675; Thu, 15 Feb 2024 12:04:29 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com F058A9C3675 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708016669; bh=89v4BL4ZKytGdzL/ASr+Kkb7NTcWmglXbwvllQzAoYY=; h=From:To:Date:Message-Id:MIME-Version; b=sM4TnhYdchUmq8jVmUVdMpmPL13BM0fq+Gw6O+7RkQM31eyiLGck2DeIBsOyElHMJ GVMoADk1YfZuqle4Ged1FISZhMJcvGWRBR4/nEyDZZKTeJXC4tlxoKVxQ2JA4nTXtz ICCtVwyVGOYLGLpbhh5JyH4VIGr5kfxeIkVIkWE5bBricR60/VtPVRiQh7Pxsn4flO 7xWpEXPgDOKDROFlXKY5jT/kQI2PPGSGEYF/f0ZXZ83FKPaMOytbJI6/3JUh05EQ0B mntP9zN6M7kH4MRmVZYKTxBGDwYVcWQVift6jKtCCAfzNV6JAws3jgBRMzttEf2bke PDNLZPNaRBm3w== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id BzIr_vlWzrLy; Thu, 15 Feb 2024 12:04:29 -0500 (EST) Received: from sfl-deribaucourt.rennes.sfl (lmontsouris-657-1-69-118.w80-15.abo.wanadoo.fr [80.15.101.118]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id 41B0E9C2A5D; Thu, 15 Feb 2024 12:04:29 -0500 (EST) From: Enguerrand de Ribaucourt To: openembedded-core@lists.openembedded.org Cc: adrian.freihofer@gmail.com, Ross.Burton@arm.com, mohammed.raza@savoirfairelinux.com, Enguerrand de Ribaucourt Subject: [PATCH 2/6] devtool: ide_sdk: Use bitbake's python3 for generated scripts Date: Thu, 15 Feb 2024 18:04:18 +0100 Message-Id: <20240215170422.659073-3-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 15 Feb 2024 17:04:39 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195550 The generated scripts use the sys.path configuration found inside bitbake. It can be a different python version than the one used on the host through the IDE. For instance, when running the generated script deploy_target_cmake-example-core2-64 from an eSDK generated on another machine, I got the following exception: AssertionError: SRE module mismatch We need to match the sys.executable to the sys.path. --- scripts/lib/devtool/ide_sdk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py index db2e95616be..a82ab572998 100755 --- a/scripts/lib/devtool/ide_sdk.py +++ b/scripts/lib/devtool/ide_sdk.py @@ -751,7 +751,7 @@ class RecipeModified: does not need to start a bitbake server. All information from tinfoil is hard-coded in the generated script. """ - cmd_lines = ['#!/usr/bin/env python3'] + cmd_lines = ['#!%s' % str(sys.executable)] cmd_lines.append('import sys') cmd_lines.append('devtool_sys_path = %s' % str(sys.path)) cmd_lines.append('devtool_sys_path.reverse()') From patchwork Thu Feb 15 17:04:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Enguerrand de Ribaucourt X-Patchwork-Id: 39350 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 106B1C48BF1 for ; Thu, 15 Feb 2024 17:04:39 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.19503.1708016672182225371 for ; Thu, 15 Feb 2024 09:04:32 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=GuG+iKA6; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: enguerrand.de-ribaucourt@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 7CB5A9C334C; Thu, 15 Feb 2024 12:04:31 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id DsnmTqwL5sck; Thu, 15 Feb 2024 12:04:30 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id CC12F9C2A5D; Thu, 15 Feb 2024 12:04:30 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com CC12F9C2A5D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708016670; bh=Wzrm8azSed8nb4684dMiieGw87UQ+4LX4zZMKDKCJso=; h=From:To:Date:Message-Id:MIME-Version; b=GuG+iKA6jHPPQGbWrBl5wCSXU8ghpjiWS0aHenGTp7/dxiiCoSWdoFKrHsLaOhypO DAXNJdZE/RAUjCwndxFNjS+Sb3RW1sxCt1z+2f36YAwuLzAkqzpI68jF4TAKMmHsq3 HkQaz9KmWWii7fZ2VF3ZdEwyB1KSPWxmJQRI+cPHf15t4us/4TLgy5+AaUX9m7jES5 C9Yize32C0QypDjrPq90G4vmcuMskA/Sn7uwL+0EYJDvxvRTKomULsfe1qBUVsntDl Fh9rbbpdOIE/kiqw1d2h1JzNwkkyUT61fDPE1FGPBFEOGWXXlX0o2S79zuuqUWSGVo udJPqKdtzV2Cg== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id zQYFGhd6YUnU; Thu, 15 Feb 2024 12:04:30 -0500 (EST) Received: from sfl-deribaucourt.rennes.sfl (lmontsouris-657-1-69-118.w80-15.abo.wanadoo.fr [80.15.101.118]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id 1C3F19C117B; Thu, 15 Feb 2024 12:04:30 -0500 (EST) From: Enguerrand de Ribaucourt To: openembedded-core@lists.openembedded.org Cc: adrian.freihofer@gmail.com, Ross.Burton@arm.com, mohammed.raza@savoirfairelinux.com, Enguerrand de Ribaucourt Subject: [PATCH 3/6] devtool: code: Add source mapping for debug source files Date: Thu, 15 Feb 2024 18:04:19 +0100 Message-Id: <20240215170422.659073-4-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 15 Feb 2024 17:04:39 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195551 When launching the debug configuration, the source files from the debug rootfs were openened in the editor instead of the local workspace files. We add an exception to properly map them to the file being developed and compiled by the IDE integration. This also more closely matches what the user would expect compared to native development. This is also true for the devtool fallback mode. --- scripts/lib/devtool/ide_plugins/ide_code.py | 1 + scripts/lib/devtool/ide_sdk.py | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py index b2193130d2e..c063b7d0590 100644 --- a/scripts/lib/devtool/ide_plugins/ide_code.py +++ b/scripts/lib/devtool/ide_plugins/ide_code.py @@ -234,6 +234,7 @@ class IdeVSCode(IdeBase): if gdb_cross_config.image_recipe.rootfs_dbg: launch_config['additionalSOLibSearchPath'] = modified_recipe.solib_search_path_str( gdb_cross_config.image_recipe) + src_file_map[os.path.join("/usr/src/debug", modified_recipe.pn, modified_recipe.pv)] = "${workspaceFolder}" src_file_map["/usr/src/debug"] = os.path.join( gdb_cross_config.image_recipe.rootfs_dbg, "usr", "src", "debug") else: diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py index a82ab572998..1e36f2b2093 100755 --- a/scripts/lib/devtool/ide_sdk.py +++ b/scripts/lib/devtool/ide_sdk.py @@ -356,6 +356,7 @@ class RecipeModified: 'PACKAGE_DEBUG_SPLIT_STYLE') self.path = recipe_d.getVar('PATH') self.pn = recipe_d.getVar('PN') + self.pv = recipe_d.getVar('PV') self.recipe_sysroot = os.path.realpath( recipe_d.getVar('RECIPE_SYSROOT')) self.recipe_sysroot_native = os.path.realpath( From patchwork Thu Feb 15 17:04:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Enguerrand de Ribaucourt X-Patchwork-Id: 39347 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 E9D4AC48BC4 for ; Thu, 15 Feb 2024 17:04:38 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.19504.1708016673072717387 for ; Thu, 15 Feb 2024 09:04:33 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=dPZ+HGGW; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: enguerrand.de-ribaucourt@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 61AA59C32FC; Thu, 15 Feb 2024 12:04:32 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id 5EmF2YRzckC5; Thu, 15 Feb 2024 12:04:31 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id AA5AA9C2A5D; Thu, 15 Feb 2024 12:04:31 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com AA5AA9C2A5D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708016671; bh=GPObCRhK69ChSNIJBXEBRkYwd/skQBRxPcWfi7wHSJ8=; h=From:To:Date:Message-Id:MIME-Version; b=dPZ+HGGW+loQp/pePWNsEZ1bj5ow3qxqIaKpIIhjW1Fqj5YP4N493xQL+UCUEoNtE S+UdcIbKpcwSy39TfDAAnVC6I16f9Zt45TmQ4YwV4Qco1oHAKor4zg6Tp/NzBldvMI RLZpEVcg4Vlqrk8hGQhswjG0F6X3hObUDWzzbgb2LIDym1VR5sKu8bgMZFTGCyG1em nIYbHjeCSnnIEDjMOw/GRYsaSAJDRUF0ZjazQFMv4LQ9ba7mSnaWJH1WgazipacTwr tKXXaKDqOM7qtRJIsOo5PsgS2FJqgCn0d6UJat1gse0sSOiSgz+61f19F3CWJBQvF8 1R8afP35q4CaA== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id JXlMrEix4xpi; Thu, 15 Feb 2024 12:04:31 -0500 (EST) Received: from sfl-deribaucourt.rennes.sfl (lmontsouris-657-1-69-118.w80-15.abo.wanadoo.fr [80.15.101.118]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id EC7BD9C117B; Thu, 15 Feb 2024 12:04:30 -0500 (EST) From: Enguerrand de Ribaucourt To: openembedded-core@lists.openembedded.org Cc: adrian.freihofer@gmail.com, Ross.Burton@arm.com, mohammed.raza@savoirfairelinux.com, Enguerrand de Ribaucourt Subject: [PATCH 4/6] devtool: ide: vscode: Configure read-only files Date: Thu, 15 Feb 2024 18:04:20 +0100 Message-Id: <20240215170422.659073-5-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 15 Feb 2024 17:04:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195552 When debugging or browsing files, the user may fall into external sources from other packages in the sysroot or dbg-rootfs. Modifying them will only lead to confusion since they will be overwritten by Yocto. The user should open them in a separate devtool modify session if they want to make changes. Meanwhile, we should prevent write access to them. --- scripts/lib/devtool/ide_plugins/ide_code.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py index c063b7d0590..7b683c74086 100644 --- a/scripts/lib/devtool/ide_plugins/ide_code.py +++ b/scripts/lib/devtool/ide_plugins/ide_code.py @@ -125,7 +125,7 @@ class IdeVSCode(IdeBase): settings_dict["cmake.configureOnOpen"] = True settings_dict["cmake.sourceDirectory"] = modified_recipe.real_srctree - def vscode_settings(self, modified_recipe): + def vscode_settings(self, modified_recipe, image_recipe): files_excludes = { "**/.git/**": True, "**/oe-logs/**": True, @@ -138,9 +138,16 @@ class IdeVSCode(IdeBase): "**/oe-workdir/**", "**/source-date-epoch/**" ] + files_readonly = { + modified_recipe.recipe_sysroot + '/**': True, + modified_recipe.recipe_sysroot_native + '/**': True, + } + if image_recipe.rootfs_dbg is not None: + files_readonly[image_recipe.rootfs_dbg + '/**'] = True settings_dict = { "files.watcherExclude": files_excludes, "files.exclude": files_excludes, + "files.readonlyInclude": files_readonly, "python.analysis.exclude": python_exclude } self.__vscode_settings_cmake(settings_dict, modified_recipe) @@ -425,7 +432,7 @@ class IdeVSCode(IdeBase): self.vscode_tasks_fallback(args, modified_recipe) def setup_modified_recipe(self, args, image_recipe, modified_recipe): - self.vscode_settings(modified_recipe) + self.vscode_settings(modified_recipe, image_recipe) self.vscode_extensions(modified_recipe) self.vscode_c_cpp_properties(modified_recipe) if args.target: From patchwork Thu Feb 15 17:04:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Enguerrand de Ribaucourt X-Patchwork-Id: 39349 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 0205BC48BF2 for ; Thu, 15 Feb 2024 17:04:39 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.19505.1708016674352995840 for ; Thu, 15 Feb 2024 09:04:34 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=SIKHEfFD; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: enguerrand.de-ribaucourt@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id AAB999C3381; Thu, 15 Feb 2024 12:04:33 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id z3du5iiHcAst; Thu, 15 Feb 2024 12:04:32 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 7F4D69C2A5D; Thu, 15 Feb 2024 12:04:32 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 7F4D69C2A5D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708016672; bh=4xn3szQs4WkPR2GZfmPIvsOezNiZvwuKY1DPAPtr/8k=; h=From:To:Date:Message-Id:MIME-Version; b=SIKHEfFDEGw3qKxR77l+ITQYC/N8NoRQwOsWbm3xjpDB2BaBEfiEHeTJTRxzmjWnA Sb9FNdZjzzaEqmaVzJ900QA/SCIDxStBVvBmn54CAbkvaZqiKLtQwyEZqk8xZS9R56 t6QsWr016R0Kcr5XU75XyL6IRS2lN60X43Pr1PsgbYPY/0aTgAcDIEWabDEDahHyl2 gTklDKNNctS67cVsaEXQRUeQvZCgtLBnY6RdCyO5TVpfJLyR8pKqO/lT9zdOmgbSVY JpG951NCRROXhfC+Zu4p9uXH7Z3LInQhV/HwcL2sgofSqTQuv0lYn3Uw3ORHLEbTFs AuGtYI6xDaP+w== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id 9_ZKAjtedNiE; Thu, 15 Feb 2024 12:04:32 -0500 (EST) Received: from sfl-deribaucourt.rennes.sfl (lmontsouris-657-1-69-118.w80-15.abo.wanadoo.fr [80.15.101.118]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id C6B289C117B; Thu, 15 Feb 2024 12:04:31 -0500 (EST) From: Enguerrand de Ribaucourt To: openembedded-core@lists.openembedded.org Cc: adrian.freihofer@gmail.com, Ross.Burton@arm.com, mohammed.raza@savoirfairelinux.com, Enguerrand de Ribaucourt Subject: [PATCH 5/6] meson: use absolute cross-compiler paths Date: Thu, 15 Feb 2024 18:04:21 +0100 Message-Id: <20240215170422.659073-6-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 15 Feb 2024 17:04:39 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195553 Among the files generated by meson is compile_commands.json. It is not used by bitbake during the build. However, if the devtool workspace is opened inside an IDE, that IDE can use compile_commands.json to configure linting and code completion. This is notably relied on by the new devtool ide-sdk command. The problem is that the IDE using compile_commands.json does not know the $PATH set-up by bitbake, so it won't find the compiler. This results in linting errors, like missing headers. We can fix this by expliciting the absolute compiler paths in meson.cross. The compile_commands.json specification expressly states: "All paths specified in the command or file fields must be either absolute or relative to this directory." Link: https://clang.llvm.org/docs/JSONCompilationDatabase.html An alternative way to implement this is to directly change CXX inside bitbake.conf to make all recipes use absolute compiler paths.Since this would affect all recipes, so I would like to have the maintainers' opinion on this. It could make sense to use absolute compiler paths for all toolchain binaries, we already do so for the sysroot TOOLCHAIN_OPTIONS. Discussions have been opened with meson/ninja maintainers to implement this at their level: - https://github.com/ninja-build/ninja/issues/2383 - https://github.com/mesonbuild/meson/issues/12834 These tools have even less information on the environment so it makes sense for Yocto to provide the absolute paths. --- meta/classes-recipe/meson-routines.bbclass | 6 ++++++ meta/classes-recipe/meson.bbclass | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/meta/classes-recipe/meson-routines.bbclass b/meta/classes-recipe/meson-routines.bbclass index a944a8fff1c..9925465ed8f 100644 --- a/meta/classes-recipe/meson-routines.bbclass +++ b/meta/classes-recipe/meson-routines.bbclass @@ -10,6 +10,12 @@ def meson_array(var, d): items = d.getVar(var).split() return repr(items[0] if len(items) == 1 else items) +def meson_array_abspath(var, d): + import shutil + items = d.getVar(var).split() + items[0] = shutil.which(items[0]) or items[0] + return repr(items[0] if len(items) == 1 else items) + # Map our ARCH values to what Meson expects: # http://mesonbuild.com/Reference-tables.html#cpu-families def meson_cpu_family(var, d): diff --git a/meta/classes-recipe/meson.bbclass b/meta/classes-recipe/meson.bbclass index a849e872976..d8496854df4 100644 --- a/meta/classes-recipe/meson.bbclass +++ b/meta/classes-recipe/meson.bbclass @@ -64,10 +64,13 @@ addtask write_config before do_configure do_write_config[vardeps] += "CC CXX AR NM STRIP READELF OBJCOPY CFLAGS CXXFLAGS LDFLAGS RUSTC RUSTFLAGS EXEWRAPPER_ENABLED" do_write_config() { # This needs to be Py to split the args into single-element lists + # The generated compile_commands.json file can be used by external IDEs + # which do not know the $PATH set-up by bitbake. They need the absolute + # compiler paths. cat >${WORKDIR}/meson.cross < X-Patchwork-Id: 39352 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 DF081C48BEB for ; Thu, 15 Feb 2024 17:04:38 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.19506.1708016675280777884 for ; Thu, 15 Feb 2024 09:04:35 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=Pfk4HrX2; spf=pass (domain: savoirfairelinux.com, ip: 208.88.110.44, mailfrom: enguerrand.de-ribaucourt@savoirfairelinux.com) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 972449C2A5D; Thu, 15 Feb 2024 12:04:34 -0500 (EST) Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10032) with ESMTP id HjiMKARcl8mf; Thu, 15 Feb 2024 12:04:33 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 7CFBE9C45E9; Thu, 15 Feb 2024 12:04:33 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 7CFBE9C45E9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708016673; bh=CXXvJd5HHbC0gDE9wLGWx/hgBkC90z5ByyIHwG1Mq0U=; h=From:To:Date:Message-Id:MIME-Version; b=Pfk4HrX2vZw5rZxmv4OAAyvqOpdUllr3qs6KJ+bfi4Rw7HR4UzyYWBwD/7gE0r85d DWw6IuDvqtvzLxV/QxYOTofFESE63WcMU1ynS8VvaI+aCMYMX0CaQF4/tlY5DplTfx dbPZy1JS+vy/RTPS4gMgGeM9sokAdnIFvHt8Sgh/kCNlpuMB9vtJFkkcbzgG0WDqGF iYw+d0UokKmBL/svMQ5tekGReYxItwD7dqqX23hiaBkjztUkc2u2+SnQCsv/vWkpKL Wqj+xYJp74fhiHXrIxzzd+3vJOXQkwjP7ZgzAbrtqqsGGx2bGyrMdHXFnIj380DyrF +hdBJDWyeSTVw== X-Virus-Scanned: amavis at mail.savoirfairelinux.com Received: from mail.savoirfairelinux.com ([127.0.0.1]) by localhost (mail.savoirfairelinux.com [127.0.0.1]) (amavis, port 10026) with ESMTP id uMvDwO7ldaGW; Thu, 15 Feb 2024 12:04:33 -0500 (EST) Received: from sfl-deribaucourt.rennes.sfl (lmontsouris-657-1-69-118.w80-15.abo.wanadoo.fr [80.15.101.118]) by mail.savoirfairelinux.com (Postfix) with ESMTPSA id A10E79C3381; Thu, 15 Feb 2024 12:04:32 -0500 (EST) From: Enguerrand de Ribaucourt To: openembedded-core@lists.openembedded.org Cc: adrian.freihofer@gmail.com, Ross.Burton@arm.com, mohammed.raza@savoirfairelinux.com, Enguerrand de Ribaucourt Subject: [PATCH 6/6] devtool: code: Provide a generic C++ configuration Date: Thu, 15 Feb 2024 18:04:22 +0100 Message-Id: <20240215170422.659073-7-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240215170422.659073-1-enguerrand.de-ribaucourt@savoirfairelinux.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 15 Feb 2024 17:04:38 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195554 By default, the cpptools VSCode extension will use the host's headers and flags for linting. This results in a lot of include errors and misleading definitions. Even though this generic configuration doesn't include all the depenendencies, it is a proper fallback for recipe classes we do not accurately cover, with at least the right sysroot. Additionally, ide-sdk automatically detects and provides a launch.json configuration for autotools recipes so we should recommend the C++ extensions for them. If the recipe is of another class (like Python), then the configuration will be generated but probably useless to the user. We'd need a mecanism to know if the recipe contains C/C++ but I'm not aware of any class-agnostic way to do it. --- scripts/lib/devtool/ide_plugins/ide_code.py | 25 ++++++++++++--------- scripts/lib/devtool/ide_sdk.py | 3 +++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py index 7b683c74086..51cf2c8a736 100644 --- a/scripts/lib/devtool/ide_plugins/ide_code.py +++ b/scripts/lib/devtool/ide_plugins/ide_code.py @@ -157,31 +157,33 @@ class IdeVSCode(IdeBase): IdeBase.update_json_file( self.dot_code_dir(modified_recipe), settings_file, settings_dict) + def __vscode_extensions_generic(self, modified_recipe, recommendations): + recommendations += [ + "ms-vscode.cpptools", + "ms-vscode.cpptools-extension-pack", + "ms-vscode.cpptools-themes" + ] + def __vscode_extensions_cmake(self, modified_recipe, recommendations): if modified_recipe.build_tool is not BuildTool.CMAKE: return recommendations += [ "twxs.cmake", - "ms-vscode.cmake-tools", - "ms-vscode.cpptools", - "ms-vscode.cpptools-extension-pack", - "ms-vscode.cpptools-themes" + "ms-vscode.cmake-tools" ] def __vscode_extensions_meson(self, modified_recipe, recommendations): if modified_recipe.build_tool is not BuildTool.MESON: return recommendations += [ - 'mesonbuild.mesonbuild', - "ms-vscode.cpptools", - "ms-vscode.cpptools-extension-pack", - "ms-vscode.cpptools-themes" + 'mesonbuild.mesonbuild' ] def vscode_extensions(self, modified_recipe): recommendations = [] self.__vscode_extensions_cmake(modified_recipe, recommendations) self.__vscode_extensions_meson(modified_recipe, recommendations) + self.__vscode_extensions_generic(modified_recipe, recommendations) extensions_file = 'extensions.json' IdeBase.update_json_file( self.dot_code_dir(modified_recipe), extensions_file, {"recommendations": recommendations}) @@ -194,8 +196,11 @@ class IdeVSCode(IdeBase): properties_dict["configurationProvider"] = "ms-vscode.cmake-tools" elif modified_recipe.build_tool is BuildTool.MESON: properties_dict["configurationProvider"] = "mesonbuild.mesonbuild" - else: # no C/C++ build - return + else: + # Provide a generic linting configuration + # We provide a C++ configuration with the proper sysroot + properties_dict["compilerPath"] = os.path.join(modified_recipe.staging_bindir_toolchain, modified_recipe.cxx.split()[0]) + properties_dict["compilerArgs"] = modified_recipe.cxx.split()[1:] properties_dicts = { "configurations": [ diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py index 1e36f2b2093..c82b150a83e 100755 --- a/scripts/lib/devtool/ide_sdk.py +++ b/scripts/lib/devtool/ide_sdk.py @@ -345,6 +345,7 @@ class RecipeModified: self.base_libdir = recipe_d.getVar('base_libdir') self.bblayers = recipe_d.getVar('BBLAYERS').split() self.bpn = recipe_d.getVar('BPN') + self.cxx = recipe_d.getVar('CXX') self.d = recipe_d.getVar('D') self.fakerootcmd = recipe_d.getVar('FAKEROOTCMD') self.fakerootenv = recipe_d.getVar('FAKEROOTENV') @@ -361,6 +362,8 @@ class RecipeModified: recipe_d.getVar('RECIPE_SYSROOT')) self.recipe_sysroot_native = os.path.realpath( recipe_d.getVar('RECIPE_SYSROOT_NATIVE')) + self.staging_bindir_toolchain = os.path.realpath( + recipe_d.getVar('STAGING_BINDIR_TOOLCHAIN')) self.staging_incdir = os.path.realpath( recipe_d.getVar('STAGING_INCDIR')) self.strip_cmd = recipe_d.getVar('STRIP')