Cover the new devtool ide plugin in the extensible sdk section.

Many thanks to Enguerrand de Ribaucourt for his re-view and
contributions.

Signed-off-by: Adrian Freihofer <adrian.freiho...@siemens.com>
---
 documentation/sdk-manual/extensible.rst | 153 +++++++++++++++++++++++-
 1 file changed, 152 insertions(+), 1 deletion(-)

diff --git a/documentation/sdk-manual/extensible.rst 
b/documentation/sdk-manual/extensible.rst
index 355c6cb0e4a..51d9fff2638 100644
--- a/documentation/sdk-manual/extensible.rst
+++ b/documentation/sdk-manual/extensible.rst
@@ -63,6 +63,8 @@ their own pros and cons:
    need to provide a well-functioning binary artefact cache over the network
    for developers with underpowered laptops.
 
+.. _setting_up_ext_sdk_in_build:
+
 Setting up the Extensible SDK environment directly in a Yocto build
 -------------------------------------------------------------------
 
@@ -230,13 +232,15 @@ all the commands.
    See the ":doc:`/ref-manual/devtool-reference`"
    section in the Yocto Project Reference Manual.
 
-Three ``devtool`` subcommands provide entry-points into development:
+Four ``devtool`` subcommands provide entry-points into development:
 
 -  *devtool add*: Assists in adding new software to be built.
 
 -  *devtool modify*: Sets up an environment to enable you to modify
    the source of an existing component.
 
+-  *devtool ide*: Generates a configuration for an IDE.
+
 -  *devtool upgrade*: Updates an existing recipe so that you can
    build it for an updated set of source files.
 
@@ -614,6 +618,153 @@ command:
       decide you do not want to proceed with your work. If you do use this
       command, realize that the source tree is preserved.
 
+Use ``devtool ide`` to generate a configuration for the IDE
+-----------------------------------------------------------
+
+``devtool ide`` automatically configures IDEs for cross-compiling and remote 
debugging.
+
+Two different use cases are supported:
+
+#. *Recipe mode*: Generate the IDE configuration for a workspace created by 
``devtool modify``.
+
+   In order to use the tool, a few settings must be made.
+   As a starting example, the following lines of code can be added to the 
``local.conf`` file::
+
+      # Build the companion debug file system
+      IMAGE_GEN_DEBUGFS = "1"
+      # Optimize build time: with devtool ide the dbg tar is not needed
+      IMAGE_FSTYPES_DEBUGFS = ""
+
+      # ssh is mandatory, no password simplifies the usage
+      EXTRA_IMAGE_FEATURES += "\
+         ssh-server-openssh \
+         debug-tweaks \
+      "
+
+      # Remote debugging needs the gdbserver on the target device
+      IMAGE_INSTALL:append = " gdbserver"
+
+   Assuming the development environment is set up correctly and a workspace 
has been created
+   for the recipe using ``devtool modify recipe``, the following command can 
create the
+   configuration for VSCode in the recipe workspace::
+
+      $ devtool ide recipe core-image-minimal --target root@192.168.7.2
+
+   What this command does exactly depends on the recipe or the build tool used 
by the recipe.
+   Currently, only CMake and Meson are supported natively.
+   Here is what it does for a recipe which inherits the 
:ref:`ref-classes-cmake` class:
+
+   - Prepare the SDK by calling ``bitbake core-image-minimal``, ``gdb-cross``, 
``qemu-native``...
+
+   - Generate a CMake preset with configures CMake to use exactly the same 
environent and
+     the same CMmake cache configuration as used by ``bitbake recipe``. The 
CMake preset referres
+     to the per-recipe-sysroot of the recipe.
+
+     Currently Configure, Build and Test presets are supported. Test presets 
execute the test
+     binaries with Qemu (qemu-user not qemu-system).
+
+   - Generate a helper script to handle the ``do_install`` with pseudo.
+
+   - Generate a helper script which does the same as ``devtool deploy-target`` 
does.
+     Therefore ``devtool ide`` supports the same set of target related command 
line parameters
+     as ``devtool deploy-target`` does.
+     The ``--target`` parameter in the example above is just an example for 
that. It is optional.
+
+   - Generate some helper scripts to start ``gdbserver`` on the target device.
+
+   - Generate the ``.vscode`` folder containing the following files:
+
+   - ``c_ccp_properties.json``: Configure IntelliSense for code navigation.
+
+   - ``extensions.json``: Recommend the extensions which are used.
+
+   - ``launch.json``: Provide a configuration for remote debugging with 
``gdb-cross`` and ``gdbserver``.
+     The debug-symbols are searched in the build-folder and in the rootfs-dbg 
folder
+     which is provided by the image recipe passed to the ``devtool ide`` 
command.
+
+   - ``settings.json``: Configure the code indexers to ignore the build 
folders.
+     Without reasonable exclude settings, it is very likely that some indexer 
plugins will run
+     with 100% CPU load until an OOM exception occurs. In the case of VSCode, 
the indexers started
+     immediately and do not stop or reconfigure when the ignore list is 
updated. This means that the
+     settings.json file must be available before VSCode is started in the 
workspace folder or before
+     ``devtool modify`` has added the ``oe-workdir`` symlink to the large 
build folder of ``bitbake``.
+
+   - ``tasks.json``: Provide some helpers for running
+
+      - :ref:`ref-tasks-install` and ``devtool deploy-target``
+
+      - start ``gdbserver`` via ssh
+
+   For a recipe which inherits the :ref:`ref-classes-meson` a similar 
configuration is generated.
+   Because there is nothing like a Meson preset a wrapper script for Meson is 
generated.
+
+   It's possible to pass multiple recipes to the ``devtool ide`` command.
+   ``devtool ide`` tries to handle the recipes in a reasonable way if possible.
+
+   ``devtool ide`` aims to support multiple programming languages and multiple 
IDEs natively.
+   Native means that the IDE is configured to call the build tool (e.g. CMake 
or Meson) directly.
+   This has several advantages. First of all, it is much faster than ``devtool 
build``, for example.
+   But it also allows to use the very good integration of tools like CMake or 
GDB directly with VSCode or other IDEs.
+   However, supporting many programming languages and multiple IDEs is quite 
an elaborate and constantly evolving thing.
+   To handle combinations that are not natively supported, ``devtool ide`` 
creates a configuration that falls back
+   to ``devtool build`` and ``devtool deploy-target`` if there is no native 
support available.
+
+   The default IDE is VSCode. Some hints about using VSCode:
+
+   - To work with CMake press ``Ctrl + Shift + p``, type ``cmake``.
+     This will show some possible commands like selecting a CMake preset, 
compiling or running CTest.
+
+   - To work with Meson press ``Ctrl + Shift + p``, type ``meson``.
+     This will show some possible commands like compiling or executing the 
unit tests.
+
+   - For the deployment to the target device, just press ``Ctrl + Shift + p``, 
type ``task``.
+     Select the ``install & deploy task``.
+
+   - For remote debugging, switch to the debugging view by pressing the "play" 
button with the ``bug icon`` on the left side.
+     This will provide a green play button with a drop-down list where a debug 
configuration can be selected.
+     After selecting one of the generated configurations, press the "play" 
button.
+
+     Starting a remote debugging sesssion automatically initiates the 
deployment to the target device.
+     If this is not desired, the ``"dependsOn": ["install && 
deploy-target...]`` parameter of the tasks
+     with ``"label": "gdbserver start...`` can be removed from the 
``tasks.json`` file.
+
+   Additionally ``--ide=none`` is supported.
+   With the none IDE parameter some generic configurations files like 
``.gdbinit`` files and some helper scripts
+   starting the gdbserver remotely on the target device as well as the gdb 
client on the host are generated.
+
+   .. note::
+
+      To ensure that the debug symbols on the build machine match the binaries 
running on the target system,
+      it is essential that the image built by ``devtool ide`` is running on 
the target system.
+
+#. *Shared sysroots mode*: Generate the IDE configuration for using a 
cross-toolchain as provided by
+   ``bitbake meta-ide-support build-sysroots``.
+
+   For some special recipes and use cases a per-recipe-sysroot based SDK is 
not suitable.
+   Therefore ``devtool ide`` also supports setting up the shared sysroots 
environment and generating
+   IDE configurations referring to the shared sysroots. Recipes leading to a 
shared sysroot
+   are for example ``meta-ide-support`` or ``shared-sysroots``.
+   Also passing ``none`` as a recipe name leads to a shared sysroot SDK::
+
+      $ devtool ide none core-image-minimal
+
+   For VSCode the cross-tool-chain is exposed as a CMake kit. CMake kits are 
defined in
+   ``~/.local/share/CMakeTools/cmake-tools-kits.json``.
+   The following minimalistic example shows how the cross-toolchain can be 
selected in VSCode.
+   Fist of all we create a minimalistic CMake project and start VSCode::
+
+      mkdir kit-test
+      echo "project(foo VERSION 1.0)" > kit-test/CMakeLists.txt
+      code kit-test
+
+   If there is a CMake project in the workspace cross-compilation is supported:
+
+   - Press ``Ctrl + Shift + P``, type ``CMake: Scan for Kits``
+   - Press ``Ctrl + Shift + P``, type ``CMake: Select a Kit``
+
+   For other IDEs than VSCode ``devtool ide none ...`` is just a simple 
wrapper for the
+   setup of the extensible SDK as decribed in 
:ref:`setting_up_ext_sdk_in_build`.
+
 Use ``devtool upgrade`` to Create a Version of the Recipe that Supports a 
Newer Version of the Software
 
-------------------------------------------------------------------------------------------------------
 
-- 
2.41.0

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#189907): 
https://lists.openembedded.org/g/openembedded-core/message/189907
Mute This Topic: https://lists.openembedded.org/mt/102316031/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to