From patchwork Mon Feb 19 16:55: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: 39719 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 CB3E3C5478A for ; Mon, 19 Feb 2024 16:55:42 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.46410.1708361734842495914 for ; Mon, 19 Feb 2024 08:55:35 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=cVcAWMnm; 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 2333E9C4165; Mon, 19 Feb 2024 11:55: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 vrC-r774zUUO; Mon, 19 Feb 2024 11:55:33 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 8D4B39C4B14; Mon, 19 Feb 2024 11:55:33 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 8D4B39C4B14 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708361733; bh=BKXaBXOoNpO7d5LxHTOiUSMNlSyT9qkwhf7K/5etkqA=; h=From:To:Date:Message-Id:MIME-Version; b=cVcAWMnmO6qafautOaGPffxDqjRwd2CEunWAvvyZ9wx67STReQEP3CJkzR6PPUiIV 30ifGjOCgl1jdk/9UH/Z1cgeTy3Hrhnw/nIAJpkjBvaGbKMmRYZT2fY385Ji3lZyOM y+HNsc03S30lCkdaW0eZYNPAVVwHVco8B3TktzF1xb+JqShgrRB1bdlGR4IBnSVcAH 0Zf01OTv5fJH39Vl8oPpOO0xeROoiSvhQO37urTX1+1BM/Sejsu+MOtK8OLmI4e9yi E4x8LoVqm+Z6ptMSg32orEU0k3W6AGACyXNfVn9EhC0LFy5WQRZ2cxSUa3q016SdtT k8hB6NBmnGgcg== 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 qIgBZ8JoOU97; Mon, 19 Feb 2024 11:55: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 A8D0A9C4165; Mon, 19 Feb 2024 11:55: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 v2 1/5] devtool: ide_sdk: Use bitbake's python3 for generated scripts Date: Mon, 19 Feb 2024 17:55:21 +0100 Message-Id: <20240219165525.714512-2-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240219165525.714512-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240219165525.714512-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 ; Mon, 19 Feb 2024 16:55:42 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195886 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. Signed-off-by: Enguerrand de Ribaucourt --- 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 3986dc1436a..14679744807 100755 --- a/scripts/lib/devtool/ide_sdk.py +++ b/scripts/lib/devtool/ide_sdk.py @@ -750,7 +750,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 Mon Feb 19 16:55:22 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: 39720 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 D7DBEC48BF8 for ; Mon, 19 Feb 2024 16:55:42 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.46412.1708361735567545142 for ; Mon, 19 Feb 2024 08:55:35 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=RPZIVnP6; 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 E2C399C4B16; Mon, 19 Feb 2024 11:55: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 gweErc3HqfEf; Mon, 19 Feb 2024 11:55:34 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 3ED8A9C4B13; Mon, 19 Feb 2024 11:55:34 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 3ED8A9C4B13 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708361734; bh=HyvSBjrry93ilY5b8144GXeAAo7617Q8fVvZ3SOXfHg=; h=From:To:Date:Message-Id:MIME-Version; b=RPZIVnP6RkFlRhVUaC1wOuQ/xysNiyCehcy0mUBFmB4/ATrTe185AInw/s0FK5u7U otkkR78oA7tZ0IpnaFAUjvJE4Sjgh9vuPo+rXjd/Y9E6Laae7T8azKnzU1YLcyTQfU 68prV4ZqLHbqFJfjmUnN8U01I/ax7oFd37whLAim0pXTu0ETdRuFhyFjEv/b0UddNZ t1Gtu2mtdV5vgzlgBmZQNX08FnlAmKuI2d8mM3OX5WmXiQB9aNodP3kyEclg37P9hE gFs8DbFZ2yD/O8+TTU6DMON2SWi5wPCN+Tz+NhJHS7lkJADqtiiFjMz/ZxjQP5TRtL e06XOj4AUNTVQ== 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 TR1-45U7iefO; Mon, 19 Feb 2024 11:55:34 -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 84AF59C4B10; Mon, 19 Feb 2024 11:55:33 -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 v2 2/5] devtool: code: Add source mapping for debug source files Date: Mon, 19 Feb 2024 17:55:22 +0100 Message-Id: <20240219165525.714512-3-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240219165525.714512-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240219165525.714512-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 ; Mon, 19 Feb 2024 16:55:42 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195887 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. Signed-off-by: Enguerrand de Ribaucourt --- 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 14679744807..f292edbe25c 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 Mon Feb 19 16:55:23 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: 39722 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 C821EC54788 for ; Mon, 19 Feb 2024 16:55:42 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web10.45895.1708361736400788172 for ; Mon, 19 Feb 2024 08:55:36 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=WzKYCWQh; 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 C508C9C45BF; Mon, 19 Feb 2024 11:55:35 -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 MnPea4TDW3kg; Mon, 19 Feb 2024 11:55:35 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id 1B6F89C4B13; Mon, 19 Feb 2024 11:55:35 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com 1B6F89C4B13 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708361735; bh=6vOZ+v0HROnD2sbq9Mv9EDm+GWBCeDD7PDVqZDZUlY8=; h=From:To:Date:Message-Id:MIME-Version; b=WzKYCWQhdDUS00oPJ9FZZm0/GY/eTGibKOdhuyqir8HiKuQgfhtmRS9ZzGz/7YojT h1fmY5xsYc+kpibABr0Ma5A1RrmceZ8T3bmI8IgVrQi/F1G9kGAXD8zdjczftxSdeY GZ+lGekqMwa7OlsJBrED8Wvo27MHmw05MZ/WRfI9aePOaJK4yztNqzuL+kaohHIsA8 CW/r+9ghg9eXBMX+FK156Ui/LsZGeZI+Oon44Ysfl4EajRjYrQ8g8hSEQsiZ+lg0kz B3o3B3vVZEcV/WZb3qhQov0V1jE5jt8flHSpwxFUDOnINUfOr0XYE+69icZvPCY4pZ IiJDtBDc7ZHZw== 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 fCVql8moKlFb; Mon, 19 Feb 2024 11:55:35 -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 5F1F09C4B10; Mon, 19 Feb 2024 11:55:34 -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 v2 3/5] devtool: ide: vscode: Configure read-only files Date: Mon, 19 Feb 2024 17:55:23 +0100 Message-Id: <20240219165525.714512-4-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240219165525.714512-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240219165525.714512-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 ; Mon, 19 Feb 2024 16:55:42 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195888 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. Signed-off-by: Enguerrand de Ribaucourt --- 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 Mon Feb 19 16:55:24 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: 39721 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 BE6D5C48BC3 for ; Mon, 19 Feb 2024 16:55:42 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web10.45897.1708361737965588344 for ; Mon, 19 Feb 2024 08:55:38 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=e3cw/d78; 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 5A4689C2AE3; Mon, 19 Feb 2024 11:55:37 -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 Xi5LsCwqXEry; Mon, 19 Feb 2024 11:55:36 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id EACBF9C34C2; Mon, 19 Feb 2024 11:55:35 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com EACBF9C34C2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708361735; bh=Ly35v5bBAcJ73H9hZFzKVTM406eYkbkMLV35UytpXEQ=; h=From:To:Date:Message-Id:MIME-Version; b=e3cw/d78E+56NLGBnuVkIvUfwzDI5POdcGAGCYTeWbq2xzNx1peSFbGX2fyfb+Wke xqKtGOhxXAbqJjySuq6fYh8RKjgJQtGwat4dbt4pX6nS1vJCe2E4dcKcnuW/joXrJi UjTKDmBYt2BPQFv2JOg+oiUtxBjxNqy7SmJdxSxMY5ogU24biH7hQCuJE1Rr4t2v8G OZIEmqxbX6McBBZrWM30NYrt/MQAVLFUPpvX5dwA8nUMFgBUZdiamisTYBttmsVuFi Z2NbnG0VHjqnNKJWdPh+XHS+cTWeNTRlRHErZGS7ZDJN2miYDp6XmrfOFsWi+0qfTG 6ZUc3wLMHH+6w== 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 Hwm7Egds0JgA; Mon, 19 Feb 2024 11:55:35 -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 39C0D9C3372; Mon, 19 Feb 2024 11:55:35 -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 v2 4/5] meson: use absolute cross-compiler paths Date: Mon, 19 Feb 2024 17:55:24 +0100 Message-Id: <20240219165525.714512-5-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240219165525.714512-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240219165525.714512-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 ; Mon, 19 Feb 2024 16:55:42 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195889 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. Signed-off-by: Enguerrand de Ribaucourt --- 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 03fa2c06eb4..31675cf42d1 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: 39718 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 AF591C54764 for ; Mon, 19 Feb 2024 16:55:42 +0000 (UTC) Received: from mail.savoirfairelinux.com (mail.savoirfairelinux.com [208.88.110.44]) by mx.groups.io with SMTP id smtpd.web11.46415.1708361738647841568 for ; Mon, 19 Feb 2024 08:55:38 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@savoirfairelinux.com header.s=DFC430D2-D198-11EC-948E-34200CB392D2 header.b=pZrbIrJm; 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 015BB9C34C2; Mon, 19 Feb 2024 11:55:38 -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 V5vbwPd50tUk; Mon, 19 Feb 2024 11:55:36 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mail.savoirfairelinux.com (Postfix) with ESMTP id C404D9C4165; Mon, 19 Feb 2024 11:55:36 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.savoirfairelinux.com C404D9C4165 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=savoirfairelinux.com; s=DFC430D2-D198-11EC-948E-34200CB392D2; t=1708361736; bh=q2OOzVkUbofT8hyiboJIa1MHReJH/EVrQThtvzFFsis=; h=From:To:Date:Message-Id:MIME-Version; b=pZrbIrJmiUQqOGuuPtfx5ref+pWH5350HuoR/CgLe6oCvDSwMniMvZ0Q9YSkNBLuT SIjJCyU2cr05iz0YKNEQkctinYb6wXxAKofy9cGBh9zuVYnGcrB178TWRbBDybZcbm ItgyyTCZXQHVFYBLsoesU78kiMSN5a+PY8j+EEINi91HbQoEDStUR/Djyme/jMpR33 wyqImQUzZlL66SSYomBOvz18kcJQ4CJBGOYcsEfNP6ebh5VmcGSFC6WQXQGHI+tm69 /tg9qLBuU1+gKUqTvbfG0DgpFjLawIkCNqkdjD/U1/DOmFPk9b2vO5NA0w2k9nAWaO oL/XQyAHrhbyA== 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 G7wFKplWu32w; Mon, 19 Feb 2024 11:55:36 -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 14DAD9C3372; Mon, 19 Feb 2024 11:55:35 -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 v2 5/5] devtool: code: Provide a generic C++ configuration Date: Mon, 19 Feb 2024 17:55:25 +0100 Message-Id: <20240219165525.714512-6-enguerrand.de-ribaucourt@savoirfairelinux.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240219165525.714512-1-enguerrand.de-ribaucourt@savoirfairelinux.com> References: <20240219165525.714512-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 ; Mon, 19 Feb 2024 16:55:42 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/195890 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. Recipes which use C/C++ without a build system are not covered by this patch. Signed-off-by: Enguerrand de Ribaucourt --- scripts/lib/devtool/ide_plugins/__init__.py | 3 +++ scripts/lib/devtool/ide_plugins/ide_code.py | 27 +++++++++++++-------- scripts/lib/devtool/ide_sdk.py | 5 ++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/scripts/lib/devtool/ide_plugins/__init__.py b/scripts/lib/devtool/ide_plugins/__init__.py index 3371b242640..59e90663908 100644 --- a/scripts/lib/devtool/ide_plugins/__init__.py +++ b/scripts/lib/devtool/ide_plugins/__init__.py @@ -21,6 +21,7 @@ class BuildTool(Enum): UNDEFINED = auto() CMAKE = auto() MESON = auto() + AUTOTOOLS = auto() @property def is_c_ccp(self): @@ -28,6 +29,8 @@ class BuildTool(Enum): return True if self is BuildTool.MESON: return True + if self is BuildTool.AUTOTOOLS: + return True return False diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py index 7b683c74086..0942fde8196 100644 --- a/scripts/lib/devtool/ide_plugins/ide_code.py +++ b/scripts/lib/devtool/ide_plugins/ide_code.py @@ -157,31 +157,35 @@ class IdeVSCode(IdeBase): IdeBase.update_json_file( self.dot_code_dir(modified_recipe), settings_file, settings_dict) - def __vscode_extensions_cmake(self, modified_recipe, recommendations): - if modified_recipe.build_tool is not BuildTool.CMAKE: + def __vscode_extensions_generic(self, modified_recipe, recommendations): + if not modified_recipe.build_tool.is_c_ccp: return recommendations += [ - "twxs.cmake", - "ms-vscode.cmake-tools", "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" + ] + 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 +198,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 + elif modified_recipe.build_tool.is_c_ccp: + # 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 f292edbe25c..6313daa8700 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') @@ -380,6 +383,8 @@ class RecipeModified: self.extra_oemeson = recipe_d.getVar('EXTRA_OEMESON') self.meson_cross_file = recipe_d.getVar('MESON_CROSS_FILE') self.build_tool = BuildTool.MESON + elif bb.data.inherits_class('autotools', recipe_d): + self.build_tool = BuildTool.AUTOTOOLS # Recipe ID is the identifier for IDE config sections self.recipe_id = self.bpn + "-" + self.package_arch