mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00
sdk-manual: extensible.rst: devtool ide-sdk improve
The devtool ide-sdk section is reformulated to be independent of the eSDK installer. In fact, ide-sdk does not even support the execution of an installer-based setup. This reformulation is also a preparation for moving the devtool documentation to a dedicated devtool section which is independent from the eSDK documentation. It should be clarified that devtool ide-sdk starts the SDK directly from the bitbake environment. It is therefore an alternative to bitbake -c populate_sdk_ext and installing an SDK installer. A warning is added that explains some workarounds for some nasty behavior of VSCode when running it in a bitbake environment. (From yocto-docs rev: 287817f33688d61f7a71c056bfa5c645edb4fc4e) Signed-off-by: Adrian Freihofer <adrian.freihofer@siemens.com> Reviewed-by: Antonin Godard <antonin.godard@bootlin.com> Signed-off-by: Antonin Godard <antonin.godard@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
2a8ea9790c
commit
5a38f96a33
|
@ -178,7 +178,7 @@ Running the Extensible SDK Environment Setup Script
|
||||||
Once you have the SDK installed, you must run the SDK environment setup
|
Once you have the SDK installed, you must run the SDK environment setup
|
||||||
script before you can actually use the SDK.
|
script before you can actually use the SDK.
|
||||||
|
|
||||||
When using a SDK directly in a Yocto build, you will find the script in
|
When using an SDK directly in a Yocto build, you will find the script in
|
||||||
``tmp/deploy/images/qemux86-64/`` in your :term:`Build Directory`.
|
``tmp/deploy/images/qemux86-64/`` in your :term:`Build Directory`.
|
||||||
|
|
||||||
When using a standalone SDK installer, this setup script resides in
|
When using a standalone SDK installer, this setup script resides in
|
||||||
|
@ -622,28 +622,91 @@ command:
|
||||||
decide you do not want to proceed with your work. If you do use this
|
decide you do not want to proceed with your work. If you do use this
|
||||||
command, realize that the source tree is preserved.
|
command, realize that the source tree is preserved.
|
||||||
|
|
||||||
``devtool ide-sdk`` configures IDEs for the extensible SDK
|
``devtool ide-sdk`` configures IDEs and bootstraps SDKs
|
||||||
----------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
||||||
``devtool ide-sdk`` automatically configures IDEs to use the extensible SDK.
|
The ``devtool ide-sdk`` command can provide an IDE configuration for IDEs when
|
||||||
To make sure that all parts of the extensible SDK required by the generated
|
working on the source code of one or more recipes.
|
||||||
IDE configuration are available, ``devtool ide-sdk`` uses BitBake in the
|
Depending on the programming language, and the build system used by the recipe,
|
||||||
background to bootstrap the extensible SDK.
|
the tools required for cross-development and remote debugging are different.
|
||||||
|
For example:
|
||||||
|
|
||||||
The extensible SDK supports two different development modes.
|
- A C/C++ project usually uses CMake or Meson.
|
||||||
``devtool ide-sdk`` supports both of them:
|
|
||||||
|
- A Python project uses setuptools or one of its successors.
|
||||||
|
|
||||||
|
- A Rust project uses Cargo.
|
||||||
|
|
||||||
|
Also, the IDE plugins needed for the integration of a build system with the
|
||||||
|
IDE and the corresponding settings are usually specific to these build-systems.
|
||||||
|
To hide all these details from the user, ``devtool ide-sdk`` does two things:
|
||||||
|
|
||||||
|
- It generates any kind of SDK needed for cross-development and remote
|
||||||
|
debugging of the specified recipes.
|
||||||
|
|
||||||
|
- It generates the configuration for the IDE (and the IDE plugins) for using
|
||||||
|
the cross-toolchain and remote debugging tools provided by the SDK directly
|
||||||
|
from the IDE.
|
||||||
|
|
||||||
|
For supported build systems the configurations generated by ``devtool ide-sdk``
|
||||||
|
combine the advantages of the ``devtool modify`` based workflow
|
||||||
|
(see :ref:`using_devtool`) with the advantages of the simple Environment Setup
|
||||||
|
script based workflow (see :ref:`running_the_ext_sdk_env`) provided by Yocto's
|
||||||
|
SDK or eSDK:
|
||||||
|
|
||||||
|
- The source code of the recipe is in the workspace created by
|
||||||
|
``devtool modify`` or ``devtool add``.
|
||||||
|
Using ``devtool build``, ``devtool build-image``,
|
||||||
|
``devtool deploy-target`` or ``bitbake`` is possible.
|
||||||
|
Also ``devtool ide-sdk`` can be used to update the SDK and the IDE
|
||||||
|
configuration at any time.
|
||||||
|
|
||||||
|
- ``devtool ide-sdk`` aims to support multiple programming languages and
|
||||||
|
multiple IDEs natively. "Natively" 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 usually much faster to call for example ``cmake`` than
|
||||||
|
``devtool build``.
|
||||||
|
It also allows to benefit from the very good integration that IDEs like
|
||||||
|
VSCode offer for tools like CMake or GDB.
|
||||||
|
|
||||||
|
However, supporting many programming languages and multiple
|
||||||
|
IDEs is quite an elaborate and constantly evolving thing. Support for IDEs
|
||||||
|
is therefore implemented as plugins. Plugins can also be provided by
|
||||||
|
optional layers.
|
||||||
|
|
||||||
|
So much about the introduction to the default mode of ``devtool sdk-ide`` which
|
||||||
|
is called the "modified" mode because it uses the workspace created by
|
||||||
|
``devtool modify`` and the per recipe :term:`Sysroots <Sysroot>` of BitBake.
|
||||||
|
|
||||||
|
For some recipes and use cases, this default behavior of ``devtool ide-sdk``
|
||||||
|
with full ``devtool`` and ``bitbake`` integration might not be suitable.
|
||||||
|
To offer full feature parity with the SDK and the eSDK, ``devtool ide-sdk`` has
|
||||||
|
a second mode called "shared" mode.
|
||||||
|
If ``devtool ide-sdk`` is called with the ``--mode=shared`` option, it
|
||||||
|
bootstraps an SDK directly from the BitBake environment, which offers the same
|
||||||
|
Environment Setup script as described in :ref:`running_the_ext_sdk_env`.
|
||||||
|
In addition to the (e)SDK installer-based setup, the IDE gets configured
|
||||||
|
to use the shared :term:`Sysroots <Sysroot>` and the tools from the SDK.
|
||||||
|
``devtool ide-sdk --mode=shared`` is basically a wrapper for the setup of the
|
||||||
|
extensible SDK as described in :ref:`setting_up_ext_sdk_in_build`.
|
||||||
|
|
||||||
|
The use of ``devtool ide-sdk`` is an alternative to using one of the SDK
|
||||||
|
installers.
|
||||||
|
``devtool ide-sdk`` allows the creation of SDKs that offer all the
|
||||||
|
functionality of the SDK and the eSDK installers. Compared to the installers,
|
||||||
|
however, the SDK created with ``devtool ide-sdk`` is much more flexible.
|
||||||
|
For example, it is very easy to change the :term:`MACHINE` in the
|
||||||
|
``local.conf`` file, update the layer meta data and then regenerate the SDK.
|
||||||
|
|
||||||
|
Let's take a look at an example of how to use ``devtool ide-sdk`` in each of
|
||||||
|
the two modes:
|
||||||
|
|
||||||
#. *Modified mode*:
|
#. *Modified mode*:
|
||||||
|
|
||||||
By default ``devtool ide-sdk`` generates IDE configurations for recipes in
|
In order to use the ``devtool ide-sdk``, a few settings are needed. As a
|
||||||
workspaces created by ``devtool modify`` or ``devtool add`` as described in
|
starting example, the following lines of code can be added to the
|
||||||
:ref:`using_devtool`. This mode creates IDE configurations with support for
|
``local.conf`` file::
|
||||||
advanced features, such as deploying the binaries to the remote target
|
|
||||||
device and performing remote debugging sessions. The generated IDE
|
|
||||||
configurations use the per recipe sysroots as Bitbake does internally.
|
|
||||||
|
|
||||||
In order to use the tool, a few settings are needed. As a starting example,
|
|
||||||
the following lines of code can be added to the ``local.conf`` file::
|
|
||||||
|
|
||||||
# Build the companion debug file system
|
# Build the companion debug file system
|
||||||
IMAGE_GEN_DEBUGFS = "1"
|
IMAGE_GEN_DEBUGFS = "1"
|
||||||
|
@ -675,9 +738,13 @@ The extensible SDK supports two different development modes.
|
||||||
|
|
||||||
$ devtool ide-sdk my-recipe core-image-minimal --target root@192.168.7.2
|
$ devtool ide-sdk my-recipe core-image-minimal --target root@192.168.7.2
|
||||||
|
|
||||||
The command requires an image recipe (``core-image-minimal`` for this example)
|
The command requires an image recipe (``core-image-minimal`` for this
|
||||||
that is used to create the SDK. This firmware image should also be installed
|
example) that is used to create the SDK.
|
||||||
on the target device. It is possible to pass multiple package recipes.
|
This firmware image should also be installed on the target device.
|
||||||
|
It is possible to pass multiple package recipes::
|
||||||
|
|
||||||
|
$ devtool ide-sdk my-recipe-1 my-recipe-2 core-image-minimal --target root@192.168.7.2
|
||||||
|
|
||||||
``devtool ide-sdk`` tries to create an IDE configuration for all package
|
``devtool ide-sdk`` tries to create an IDE configuration for all package
|
||||||
recipes.
|
recipes.
|
||||||
|
|
||||||
|
@ -687,9 +754,9 @@ The extensible SDK supports two different development modes.
|
||||||
|
|
||||||
For example, a CMake preset is created for a recipe that inherits
|
For example, a CMake preset is created for a recipe that inherits
|
||||||
:ref:`ref-classes-cmake`. In the case of VSCode, CMake presets are supported
|
:ref:`ref-classes-cmake`. In the case of VSCode, CMake presets are supported
|
||||||
by the CMake Tools plugin. This is an example of how the build
|
by the CMake Tools plugin. This is an example of how the build configuration
|
||||||
configuration used by ``bitbake`` is exported to an IDE configuration that
|
used by ``bitbake`` is exported to an IDE configuration that gives exactly
|
||||||
gives exactly the same build results.
|
the same build results.
|
||||||
|
|
||||||
Support for remote debugging with seamless integration into the IDE is
|
Support for remote debugging with seamless integration into the IDE is
|
||||||
important for a cross-SDK. ``devtool ide-sdk`` automatically generates the
|
important for a cross-SDK. ``devtool ide-sdk`` automatically generates the
|
||||||
|
@ -702,23 +769,54 @@ The extensible SDK supports two different development modes.
|
||||||
running on the target device, it is essential that the image built by
|
running on the target device, it is essential that the image built by
|
||||||
``devtool ide-sdk`` is running on the target device.
|
``devtool ide-sdk`` is running on the target device.
|
||||||
|
|
||||||
``devtool ide-sdk`` aims to support multiple programming languages and
|
|
||||||
multiple IDEs natively. "Natively" 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``, but it also allows
|
|
||||||
to use the very good integration of tools like CMake or GDB in VSCode and
|
|
||||||
other IDEs. However, supporting many programming languages and multiple
|
|
||||||
IDEs is quite an elaborate and constantly evolving thing. Support for IDEs
|
|
||||||
is therefore implemented as plugins. Plugins can also be provided by
|
|
||||||
optional layers.
|
|
||||||
|
|
||||||
The default IDE is VSCode. Some hints about using VSCode:
|
The default IDE is VSCode. Some hints about using VSCode:
|
||||||
|
|
||||||
- To work on the source code of a recipe an instance of VSCode is started in
|
- VSCode can be used to work on the BitBake recipes or the application
|
||||||
the recipe's workspace. Example::
|
source code.
|
||||||
|
Usually there is one instance of VSCode running in the folder where the
|
||||||
|
BitBake recipes are. This instance has the
|
||||||
|
`Yocto Project BitBake plugin <https://marketplace.visualstudio.com/items?itemName=yocto-project.yocto-bitbake>`_
|
||||||
|
running.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Some VSCode plugins (Python, BitBake and others) need a reasonable
|
||||||
|
configuration to work as expected. Otherwise, some plugins try to
|
||||||
|
index the build directory of BitBake, which keeps your system quite
|
||||||
|
busy until an out of memory exception stops this nonsense.
|
||||||
|
Other plugins, such as the BitBake plugin, do not behave as expected.
|
||||||
|
|
||||||
|
To work around such issues, the ``oe-init-build-env`` script creates
|
||||||
|
an initial ``.vscode/settings.json`` file if ``code`` can be found
|
||||||
|
and the ``.vscode`` folder does not yet exist.
|
||||||
|
It is best to run ``oe-init-build-env`` once before starting VSCode.
|
||||||
|
An alternative approach is to use a build folder outside the layers,
|
||||||
|
e.g. ``oe-init-build-env ../build``.
|
||||||
|
|
||||||
|
The BitBake plugin also offers to create devtool workspaces and run
|
||||||
|
``devtool ide-sdk`` with a few mouse clicks.
|
||||||
|
Of course, issuing commands in the terminal works as well.
|
||||||
|
|
||||||
|
- To work on the source code of a recipe another instance of VSCode is
|
||||||
|
started in the recipe's workspace. Example::
|
||||||
|
|
||||||
code build/workspace/sources/my-recipe
|
code build/workspace/sources/my-recipe
|
||||||
|
|
||||||
|
This instance of VSCode uses plugins that are useful for the development
|
||||||
|
of the application. ``devtool ide-sdk`` generates the necessary
|
||||||
|
``extensions.json``, ``settings.json``, ``tasks.json``and ``launch.json``
|
||||||
|
configuration files for all the involved plugins.
|
||||||
|
|
||||||
|
When the source code folder present in the workspace folder is opened in
|
||||||
|
VSCode for the first time, a pop-up message recommends installing the
|
||||||
|
required plugins.
|
||||||
|
After accepting the installation of the plugins, working with the source
|
||||||
|
code or some debugging tasks should work as usual with VSCode.
|
||||||
|
|
||||||
|
Starting the VSCode instances in the recipe workspace folders can also be
|
||||||
|
done by a mouse click on the recipe workspaces in the first VSCode
|
||||||
|
instance.
|
||||||
|
|
||||||
- To work with CMake press ``Ctrl + Shift + p``, type ``cmake``. This will
|
- To work with CMake press ``Ctrl + Shift + p``, type ``cmake``. This will
|
||||||
show some possible commands like selecting a CMake preset, compiling or
|
show some possible commands like selecting a CMake preset, compiling or
|
||||||
running CTest.
|
running CTest.
|
||||||
|
@ -731,10 +829,9 @@ The extensible SDK supports two different development modes.
|
||||||
show some possible commands like compiling or executing the unit tests.
|
show some possible commands like compiling or executing the unit tests.
|
||||||
|
|
||||||
A note on running cross-compiled unit tests on the host: Meson enables
|
A note on running cross-compiled unit tests on the host: Meson enables
|
||||||
support for QEMU user-mode by default. It is expected that the execution
|
support for QEMU user mode by default. It is expected that the execution
|
||||||
of the unit tests from the IDE will work easily without any additional
|
of the unit tests from the IDE will work without any additional steps,
|
||||||
steps, provided that the code is suitable for execution on the host
|
given that the code is suitable for the execution on the host machine.
|
||||||
machine.
|
|
||||||
|
|
||||||
- For the deployment to the target device, just press ``Ctrl + Shift + p``,
|
- For the deployment to the target device, just press ``Ctrl + Shift + p``,
|
||||||
type ``task``. Select ``install && deploy-target``.
|
type ``task``. Select ``install && deploy-target``.
|
||||||
|
@ -745,23 +842,23 @@ The extensible SDK supports two different development modes.
|
||||||
selected. After selecting one of the generated configurations, press the
|
selected. After selecting one of the generated configurations, press the
|
||||||
"play" button.
|
"play" button.
|
||||||
|
|
||||||
Starting a remote debugging session automatically initiates the deployment
|
Starting a remote debugging session automatically initiates the
|
||||||
to the target device. If this is not desired, the
|
deployment to the target device. If this is not desired, the
|
||||||
``"dependsOn": ["install && deploy-target...]`` parameter of the tasks
|
``"dependsOn": ["install && deploy-target...]`` parameter of the tasks
|
||||||
with ``"label": "gdbserver start...`` can be removed from the
|
with ``"label": "gdbserver start...`` can be removed from the
|
||||||
``tasks.json`` file.
|
``tasks.json`` file.
|
||||||
|
|
||||||
VSCode supports GDB with many different setups and configurations for many
|
VSCode supports GDB with many different setups and configurations for
|
||||||
different use cases. However, most of these setups have some limitations
|
many different use cases. However, most of these setups have some
|
||||||
when it comes to cross-development, support only a few target
|
limitations when it comes to cross-development, support only a few target
|
||||||
architectures or require a high performance target device. Therefore
|
architectures or require a high performance target device. Therefore
|
||||||
``devtool ide-sdk`` supports the classic, generic setup with GDB on the
|
``devtool ide-sdk`` supports the classic, generic setup with GDB on the
|
||||||
development host and gdbserver on the target device.
|
development host and gdbserver on the target device.
|
||||||
|
|
||||||
Roughly summarized, this means:
|
Roughly summarized, this means:
|
||||||
|
|
||||||
- The binaries are copied via SSH to the remote target device by a script
|
- The binaries are copied via SSH to the remote target device by a
|
||||||
referred by ``tasks.json``.
|
script referred by ``tasks.json``.
|
||||||
|
|
||||||
- gdbserver is started on the remote target device via SSH by a script
|
- gdbserver is started on the remote target device via SSH by a script
|
||||||
referred by ``tasks.json``.
|
referred by ``tasks.json``.
|
||||||
|
@ -863,16 +960,9 @@ The extensible SDK supports two different development modes.
|
||||||
|
|
||||||
#. *Shared sysroots mode*
|
#. *Shared sysroots mode*
|
||||||
|
|
||||||
For some recipes and use cases a per-recipe sysroot based SDK is not
|
Creating an SDK with shared :term:`Sysroots <Sysroot>` that contains all the
|
||||||
suitable. Optionally ``devtool ide-sdk`` configures the IDE to use the
|
dependencies needed to work with ``my-recipe`` is possible with the following
|
||||||
toolchain provided by the extensible SDK as described in
|
example command::
|
||||||
:ref:`running_the_ext_sdk_env`. ``devtool ide-sdk --mode=shared`` is
|
|
||||||
basically a wrapper for the setup of the extensible SDK as described in
|
|
||||||
:ref:`setting_up_ext_sdk_in_build`. The IDE gets a configuration to use the
|
|
||||||
shared sysroots.
|
|
||||||
|
|
||||||
Creating a SDK with shared sysroots that contains all the dependencies needed
|
|
||||||
to work with ``my-recipe`` is possible with the following example command::
|
|
||||||
|
|
||||||
$ devtool ide-sdk --mode=shared my-recipe
|
$ devtool ide-sdk --mode=shared my-recipe
|
||||||
|
|
||||||
|
@ -886,12 +976,14 @@ The extensible SDK supports two different development modes.
|
||||||
echo "project(foo VERSION 1.0)" > kit-test/CMakeLists.txt
|
echo "project(foo VERSION 1.0)" > kit-test/CMakeLists.txt
|
||||||
code kit-test
|
code kit-test
|
||||||
|
|
||||||
If there is a CMake project in the workspace, cross-compilation is supported:
|
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: Scan for Kits``
|
||||||
- Press ``Ctrl + Shift + P``, type ``CMake: Select a Kit``
|
- Press ``Ctrl + Shift + P``, type ``CMake: Select a Kit``
|
||||||
|
|
||||||
Finally most of the features provided by CMake and the IDE should be available.
|
Finally most of the features provided by CMake and the IDE should be
|
||||||
|
available.
|
||||||
|
|
||||||
Other IDEs than VSCode are supported as well. However,
|
Other IDEs than VSCode are supported as well. However,
|
||||||
``devtool ide-sdk --mode=shared --ide=none my-recipe`` is currently
|
``devtool ide-sdk --mode=shared --ide=none my-recipe`` is currently
|
||||||
|
|
Loading…
Reference in New Issue
Block a user