summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Freihofer <adrian.freihofer@gmail.com>2025-01-20 08:16:19 +0100
committerSteve Sakoman <steve@sakoman.com>2025-01-29 06:20:44 -0800
commitedcb76934dcf5759f8e15fccac560175ddcebc9d (patch)
treedcf3b1adf62553a06d3a28fe8346c0961f67a073
parent4a70faaf985f733cb488cc80018a80e97c8d2629 (diff)
downloadpoky-edcb76934dcf5759f8e15fccac560175ddcebc9d.tar.gz
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: 82e396d539febc3c730af48e0f8836540fadd1e4) 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> (cherry picked from commit 287817f33688d61f7a71c056bfa5c645edb4fc4e) Signed-off-by: Antonin Godard <antonin.godard@bootlin.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rw-r--r--documentation/sdk-manual/extensible.rst210
1 files changed, 151 insertions, 59 deletions
diff --git a/documentation/sdk-manual/extensible.rst b/documentation/sdk-manual/extensible.rst
index 3f6a754d88..adca97bb3a 100644
--- a/documentation/sdk-manual/extensible.rst
+++ b/documentation/sdk-manual/extensible.rst
@@ -178,7 +178,7 @@ Running the Extensible SDK Environment Setup Script
178Once you have the SDK installed, you must run the SDK environment setup 178Once you have the SDK installed, you must run the SDK environment setup
179script before you can actually use the SDK. 179script before you can actually use the SDK.
180 180
181When using a SDK directly in a Yocto build, you will find the script in 181When using an SDK directly in a Yocto build, you will find the script in
182``tmp/deploy/images/qemux86-64/`` in your :term:`Build Directory`. 182``tmp/deploy/images/qemux86-64/`` in your :term:`Build Directory`.
183 183
184When using a standalone SDK installer, this setup script resides in 184When using a standalone SDK installer, this setup script resides in
@@ -622,28 +622,91 @@ command:
622 decide you do not want to proceed with your work. If you do use this 622 decide you do not want to proceed with your work. If you do use this
623 command, realize that the source tree is preserved. 623 command, realize that the source tree is preserved.
624 624
625``devtool ide-sdk`` configures IDEs for the extensible SDK 625``devtool ide-sdk`` configures IDEs and bootstraps SDKs
626---------------------------------------------------------- 626-------------------------------------------------------
627 627
628``devtool ide-sdk`` automatically configures IDEs to use the extensible SDK. 628The ``devtool ide-sdk`` command can provide an IDE configuration for IDEs when
629To make sure that all parts of the extensible SDK required by the generated 629working on the source code of one or more recipes.
630IDE configuration are available, ``devtool ide-sdk`` uses BitBake in the 630Depending on the programming language, and the build system used by the recipe,
631background to bootstrap the extensible SDK. 631the tools required for cross-development and remote debugging are different.
632For example:
632 633
633The extensible SDK supports two different development modes. 634- A C/C++ project usually uses CMake or Meson.
634``devtool ide-sdk`` supports both of them:
635 635
636#. *Modified mode*: 636- A Python project uses setuptools or one of its successors.
637
638- A Rust project uses Cargo.
639
640Also, the IDE plugins needed for the integration of a build system with the
641IDE and the corresponding settings are usually specific to these build-systems.
642To hide all these details from the user, ``devtool ide-sdk`` does two things:
643
644- It generates any kind of SDK needed for cross-development and remote
645 debugging of the specified recipes.
646
647- It generates the configuration for the IDE (and the IDE plugins) for using
648 the cross-toolchain and remote debugging tools provided by the SDK directly
649 from the IDE.
650
651For supported build systems the configurations generated by ``devtool ide-sdk``
652combine the advantages of the ``devtool modify`` based workflow
653(see :ref:`using_devtool`) with the advantages of the simple Environment Setup
654script based workflow (see :ref:`running_the_ext_sdk_env`) provided by Yocto's
655SDK or eSDK:
656
657- The source code of the recipe is in the workspace created by
658 ``devtool modify`` or ``devtool add``.
659 Using ``devtool build``, ``devtool build-image``,
660 ``devtool deploy-target`` or ``bitbake`` is possible.
661 Also ``devtool ide-sdk`` can be used to update the SDK and the IDE
662 configuration at any time.
637 663
638 By default ``devtool ide-sdk`` generates IDE configurations for recipes in 664- ``devtool ide-sdk`` aims to support multiple programming languages and
639 workspaces created by ``devtool modify`` or ``devtool add`` as described in 665 multiple IDEs natively. "Natively" means that the IDE is configured to call
640 :ref:`using_devtool`. This mode creates IDE configurations with support for 666 the build tool (e.g. ``cmake`` or ``meson``) directly. This has several
641 advanced features, such as deploying the binaries to the remote target 667 advantages.
642 device and performing remote debugging sessions. The generated IDE 668 First of all, it is usually much faster to call for example ``cmake`` than
643 configurations use the per recipe sysroots as Bitbake does internally. 669 ``devtool build``.
670 It also allows to benefit from the very good integration that IDEs like
671 VSCode offer for tools like CMake or GDB.
672
673 However, supporting many programming languages and multiple
674 IDEs is quite an elaborate and constantly evolving thing. Support for IDEs
675 is therefore implemented as plugins. Plugins can also be provided by
676 optional layers.
644 677
645 In order to use the tool, a few settings are needed. As a starting example, 678So much about the introduction to the default mode of ``devtool sdk-ide`` which
646 the following lines of code can be added to the ``local.conf`` file:: 679is called the "modified" mode because it uses the workspace created by
680``devtool modify`` and the per recipe :term:`Sysroots <Sysroot>` of BitBake.
681
682For some recipes and use cases, this default behavior of ``devtool ide-sdk``
683with full ``devtool`` and ``bitbake`` integration might not be suitable.
684To offer full feature parity with the SDK and the eSDK, ``devtool ide-sdk`` has
685a second mode called "shared" mode.
686If ``devtool ide-sdk`` is called with the ``--mode=shared`` option, it
687bootstraps an SDK directly from the BitBake environment, which offers the same
688Environment Setup script as described in :ref:`running_the_ext_sdk_env`.
689In addition to the (e)SDK installer-based setup, the IDE gets configured
690to use the shared :term:`Sysroots <Sysroot>` and the tools from the SDK.
691``devtool ide-sdk --mode=shared`` is basically a wrapper for the setup of the
692extensible SDK as described in :ref:`setting_up_ext_sdk_in_build`.
693
694The use of ``devtool ide-sdk`` is an alternative to using one of the SDK
695installers.
696``devtool ide-sdk`` allows the creation of SDKs that offer all the
697functionality of the SDK and the eSDK installers. Compared to the installers,
698however, the SDK created with ``devtool ide-sdk`` is much more flexible.
699For example, it is very easy to change the :term:`MACHINE` in the
700``local.conf`` file, update the layer meta data and then regenerate the SDK.
701
702Let's take a look at an example of how to use ``devtool ide-sdk`` in each of
703the two modes:
704
705#. *Modified mode*:
706
707 In order to use the ``devtool ide-sdk``, a few settings are needed. As a
708 starting example, the following lines of code can be added to the
709 ``local.conf`` file::
647 710
648 # Build the companion debug file system 711 # Build the companion debug file system
649 IMAGE_GEN_DEBUGFS = "1" 712 IMAGE_GEN_DEBUGFS = "1"
@@ -672,9 +735,13 @@ The extensible SDK supports two different development modes.
672 735
673 $ devtool ide-sdk my-recipe core-image-minimal --target root@192.168.7.2 736 $ devtool ide-sdk my-recipe core-image-minimal --target root@192.168.7.2
674 737
675 The command requires an image recipe (``core-image-minimal`` for this example) 738 The command requires an image recipe (``core-image-minimal`` for this
676 that is used to create the SDK. This firmware image should also be installed 739 example) that is used to create the SDK.
677 on the target device. It is possible to pass multiple package recipes. 740 This firmware image should also be installed on the target device.
741 It is possible to pass multiple package recipes::
742
743 $ devtool ide-sdk my-recipe-1 my-recipe-2 core-image-minimal --target root@192.168.7.2
744
678 ``devtool ide-sdk`` tries to create an IDE configuration for all package 745 ``devtool ide-sdk`` tries to create an IDE configuration for all package
679 recipes. 746 recipes.
680 747
@@ -684,9 +751,9 @@ The extensible SDK supports two different development modes.
684 751
685 For example, a CMake preset is created for a recipe that inherits 752 For example, a CMake preset is created for a recipe that inherits
686 :ref:`ref-classes-cmake`. In the case of VSCode, CMake presets are supported 753 :ref:`ref-classes-cmake`. In the case of VSCode, CMake presets are supported
687 by the CMake Tools plugin. This is an example of how the build 754 by the CMake Tools plugin. This is an example of how the build configuration
688 configuration used by ``bitbake`` is exported to an IDE configuration that 755 used by ``bitbake`` is exported to an IDE configuration that gives exactly
689 gives exactly the same build results. 756 the same build results.
690 757
691 Support for remote debugging with seamless integration into the IDE is 758 Support for remote debugging with seamless integration into the IDE is
692 important for a cross-SDK. ``devtool ide-sdk`` automatically generates the 759 important for a cross-SDK. ``devtool ide-sdk`` automatically generates the
@@ -699,23 +766,54 @@ The extensible SDK supports two different development modes.
699 running on the target device, it is essential that the image built by 766 running on the target device, it is essential that the image built by
700 ``devtool ide-sdk`` is running on the target device. 767 ``devtool ide-sdk`` is running on the target device.
701 768
702 ``devtool ide-sdk`` aims to support multiple programming languages and
703 multiple IDEs natively. "Natively" means that the IDE is configured to call
704 the build tool (e.g. CMake or Meson) directly. This has several advantages.
705 First of all, it is much faster than ``devtool build``, but it also allows
706 to use the very good integration of tools like CMake or GDB in VSCode and
707 other IDEs. However, supporting many programming languages and multiple
708 IDEs is quite an elaborate and constantly evolving thing. Support for IDEs
709 is therefore implemented as plugins. Plugins can also be provided by
710 optional layers.
711
712 The default IDE is VSCode. Some hints about using VSCode: 769 The default IDE is VSCode. Some hints about using VSCode:
713 770
714 - To work on the source code of a recipe an instance of VSCode is started in 771 - VSCode can be used to work on the BitBake recipes or the application
715 the recipe's workspace. Example:: 772 source code.
773 Usually there is one instance of VSCode running in the folder where the
774 BitBake recipes are. This instance has the
775 `Yocto Project BitBake plugin <https://marketplace.visualstudio.com/items?itemName=yocto-project.yocto-bitbake>`_
776 running.
777
778 .. warning::
779
780 Some VSCode plugins (Python, BitBake and others) need a reasonable
781 configuration to work as expected. Otherwise, some plugins try to
782 index the build directory of BitBake, which keeps your system quite
783 busy until an out of memory exception stops this nonsense.
784 Other plugins, such as the BitBake plugin, do not behave as expected.
785
786 To work around such issues, the ``oe-init-build-env`` script creates
787 an initial ``.vscode/settings.json`` file if ``code`` can be found
788 and the ``.vscode`` folder does not yet exist.
789 It is best to run ``oe-init-build-env`` once before starting VSCode.
790 An alternative approach is to use a build folder outside the layers,
791 e.g. ``oe-init-build-env ../build``.
792
793 The BitBake plugin also offers to create devtool workspaces and run
794 ``devtool ide-sdk`` with a few mouse clicks.
795 Of course, issuing commands in the terminal works as well.
796
797 - To work on the source code of a recipe another instance of VSCode is
798 started in the recipe's workspace. Example::
716 799
717 code build/workspace/sources/my-recipe 800 code build/workspace/sources/my-recipe
718 801
802 This instance of VSCode uses plugins that are useful for the development
803 of the application. ``devtool ide-sdk`` generates the necessary
804 ``extensions.json``, ``settings.json``, ``tasks.json``and ``launch.json``
805 configuration files for all the involved plugins.
806
807 When the source code folder present in the workspace folder is opened in
808 VSCode for the first time, a pop-up message recommends installing the
809 required plugins.
810 After accepting the installation of the plugins, working with the source
811 code or some debugging tasks should work as usual with VSCode.
812
813 Starting the VSCode instances in the recipe workspace folders can also be
814 done by a mouse click on the recipe workspaces in the first VSCode
815 instance.
816
719 - To work with CMake press ``Ctrl + Shift + p``, type ``cmake``. This will 817 - To work with CMake press ``Ctrl + Shift + p``, type ``cmake``. This will
720 show some possible commands like selecting a CMake preset, compiling or 818 show some possible commands like selecting a CMake preset, compiling or
721 running CTest. 819 running CTest.
@@ -728,10 +826,9 @@ The extensible SDK supports two different development modes.
728 show some possible commands like compiling or executing the unit tests. 826 show some possible commands like compiling or executing the unit tests.
729 827
730 A note on running cross-compiled unit tests on the host: Meson enables 828 A note on running cross-compiled unit tests on the host: Meson enables
731 support for QEMU user-mode by default. It is expected that the execution 829 support for QEMU user mode by default. It is expected that the execution
732 of the unit tests from the IDE will work easily without any additional 830 of the unit tests from the IDE will work without any additional steps,
733 steps, provided that the code is suitable for execution on the host 831 given that the code is suitable for the execution on the host machine.
734 machine.
735 832
736 - For the deployment to the target device, just press ``Ctrl + Shift + p``, 833 - For the deployment to the target device, just press ``Ctrl + Shift + p``,
737 type ``task``. Select ``install && deploy-target``. 834 type ``task``. Select ``install && deploy-target``.
@@ -742,23 +839,23 @@ The extensible SDK supports two different development modes.
742 selected. After selecting one of the generated configurations, press the 839 selected. After selecting one of the generated configurations, press the
743 "play" button. 840 "play" button.
744 841
745 Starting a remote debugging session automatically initiates the deployment 842 Starting a remote debugging session automatically initiates the
746 to the target device. If this is not desired, the 843 deployment to the target device. If this is not desired, the
747 ``"dependsOn": ["install && deploy-target...]`` parameter of the tasks 844 ``"dependsOn": ["install && deploy-target...]`` parameter of the tasks
748 with ``"label": "gdbserver start...`` can be removed from the 845 with ``"label": "gdbserver start...`` can be removed from the
749 ``tasks.json`` file. 846 ``tasks.json`` file.
750 847
751 VSCode supports GDB with many different setups and configurations for many 848 VSCode supports GDB with many different setups and configurations for
752 different use cases. However, most of these setups have some limitations 849 many different use cases. However, most of these setups have some
753 when it comes to cross-development, support only a few target 850 limitations when it comes to cross-development, support only a few target
754 architectures or require a high performance target device. Therefore 851 architectures or require a high performance target device. Therefore
755 ``devtool ide-sdk`` supports the classic, generic setup with GDB on the 852 ``devtool ide-sdk`` supports the classic, generic setup with GDB on the
756 development host and gdbserver on the target device. 853 development host and gdbserver on the target device.
757 854
758 Roughly summarized, this means: 855 Roughly summarized, this means:
759 856
760 - The binaries are copied via SSH to the remote target device by a script 857 - The binaries are copied via SSH to the remote target device by a
761 referred by ``tasks.json``. 858 script referred by ``tasks.json``.
762 859
763 - gdbserver is started on the remote target device via SSH by a script 860 - gdbserver is started on the remote target device via SSH by a script
764 referred by ``tasks.json``. 861 referred by ``tasks.json``.
@@ -860,16 +957,9 @@ The extensible SDK supports two different development modes.
860 957
861#. *Shared sysroots mode* 958#. *Shared sysroots mode*
862 959
863 For some recipes and use cases a per-recipe sysroot based SDK is not 960 Creating an SDK with shared :term:`Sysroots <Sysroot>` that contains all the
864 suitable. Optionally ``devtool ide-sdk`` configures the IDE to use the 961 dependencies needed to work with ``my-recipe`` is possible with the following
865 toolchain provided by the extensible SDK as described in 962 example command::
866 :ref:`running_the_ext_sdk_env`. ``devtool ide-sdk --mode=shared`` is
867 basically a wrapper for the setup of the extensible SDK as described in
868 :ref:`setting_up_ext_sdk_in_build`. The IDE gets a configuration to use the
869 shared sysroots.
870
871 Creating a SDK with shared sysroots that contains all the dependencies needed
872 to work with ``my-recipe`` is possible with the following example command::
873 963
874 $ devtool ide-sdk --mode=shared my-recipe 964 $ devtool ide-sdk --mode=shared my-recipe
875 965
@@ -883,12 +973,14 @@ The extensible SDK supports two different development modes.
883 echo "project(foo VERSION 1.0)" > kit-test/CMakeLists.txt 973 echo "project(foo VERSION 1.0)" > kit-test/CMakeLists.txt
884 code kit-test 974 code kit-test
885 975
886 If there is a CMake project in the workspace, cross-compilation is supported: 976 If there is a CMake project in the workspace, cross-compilation is
977 supported:
887 978
888 - Press ``Ctrl + Shift + P``, type ``CMake: Scan for Kits`` 979 - Press ``Ctrl + Shift + P``, type ``CMake: Scan for Kits``
889 - Press ``Ctrl + Shift + P``, type ``CMake: Select a Kit`` 980 - Press ``Ctrl + Shift + P``, type ``CMake: Select a Kit``
890 981
891 Finally most of the features provided by CMake and the IDE should be available. 982 Finally most of the features provided by CMake and the IDE should be
983 available.
892 984
893 Other IDEs than VSCode are supported as well. However, 985 Other IDEs than VSCode are supported as well. However,
894 ``devtool ide-sdk --mode=shared --ide=none my-recipe`` is currently 986 ``devtool ide-sdk --mode=shared --ide=none my-recipe`` is currently