1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK 2 3******* 4Classes 5******* 6 7Class files are used to abstract common functionality and share it 8amongst multiple recipe (``.bb``) files. To use a class file, you simply 9make sure the recipe inherits the class. In most cases, when a recipe 10inherits a class it is enough to enable its features. There are cases, 11however, where in the recipe you might need to set variables or override 12some default behavior. 13 14Any :term:`Metadata` usually found in a recipe can also be 15placed in a class file. Class files are identified by the extension 16``.bbclass`` and are usually placed in one of a set of subdirectories 17beneath the ``meta*/`` directory found in the :term:`Source Directory`: 18 19 - ``classes-recipe/`` - classes intended to be inherited by recipes 20 individually 21 - ``classes-global/`` - classes intended to be inherited globally 22 - ``classes/`` - classes whose usage context is not clearly defined 23 24Class files can also be pointed to by 25:term:`BUILDDIR` (e.g. ``build/``) in the same way as 26``.conf`` files in the ``conf`` directory. Class files are searched for 27in :term:`BBPATH` using the same method by which ``.conf`` 28files are searched. 29 30This chapter discusses only the most useful and important classes. Other 31classes do exist within the ``meta/classes*`` directories in the Source 32Directory. You can reference the ``.bbclass`` files directly for more 33information. 34 35.. _ref-classes-allarch: 36 37``allarch`` 38=========== 39 40The :ref:`ref-classes-allarch` class is inherited by recipes that do not produce 41architecture-specific output. The class disables functionality that is 42normally needed for recipes that produce executable binaries (such as 43building the cross-compiler and a C library as pre-requisites, and 44splitting out of debug symbols during packaging). 45 46.. note:: 47 48 Unlike some distro recipes (e.g. Debian), OpenEmbedded recipes that 49 produce packages that depend on tunings through use of the 50 :term:`RDEPENDS` and 51 :term:`TUNE_PKGARCH` variables, should never be 52 configured for all architectures using :ref:`ref-classes-allarch`. This is the case 53 even if the recipes do not produce architecture-specific output. 54 55 Configuring such recipes for all architectures causes the 56 :ref:`do_package_write_* <ref-tasks-package_write_deb>` tasks to 57 have different signatures for the machines with different tunings. 58 Additionally, unnecessary rebuilds occur every time an image for a 59 different :term:`MACHINE` is built even when the recipe never changes. 60 61By default, all recipes inherit the :ref:`ref-classes-base` and 62:ref:`ref-classes-package` classes, which enable 63functionality needed for recipes that produce executable output. If your 64recipe, for example, only produces packages that contain configuration 65files, media files, or scripts (e.g. Python and Perl), then it should 66inherit the :ref:`ref-classes-allarch` class. 67 68.. _ref-classes-archiver: 69 70``archiver`` 71============ 72 73The :ref:`ref-classes-archiver` class supports releasing source code and other 74materials with the binaries. 75 76For more details on the source :ref:`ref-classes-archiver`, see the 77":ref:`dev-manual/licenses:maintaining open source license compliance during your product's lifecycle`" 78section in the Yocto Project Development Tasks Manual. You can also see 79the :term:`ARCHIVER_MODE` variable for information 80about the variable flags (varflags) that help control archive creation. 81 82.. _ref-classes-autotools: 83 84``autotools*`` 85============== 86 87The :ref:`autotools* <ref-classes-autotools>` classes support packages built with the 88:wikipedia:`GNU Autotools <GNU_Autotools>`. 89 90The ``autoconf``, ``automake``, and ``libtool`` packages bring 91standardization. This class defines a set of tasks (e.g. ``configure``, 92``compile`` and so forth) that work for all Autotooled packages. It 93should usually be enough to define a few standard variables and then 94simply ``inherit autotools``. These classes can also work with software 95that emulates Autotools. For more information, see the 96":ref:`dev-manual/new-recipe:building an autotooled package`" section 97in the Yocto Project Development Tasks Manual. 98 99By default, the :ref:`autotools* <ref-classes-autotools>` classes use out-of-tree builds (i.e. 100``autotools.bbclass`` building with ``B != S``). 101 102If the software being built by a recipe does not support using 103out-of-tree builds, you should have the recipe inherit the 104:ref:`autotools-brokensep <ref-classes-autotools>` class. The :ref:`autotools-brokensep <ref-classes-autotools>` class behaves 105the same as the :ref:`ref-classes-autotools` class but builds with :term:`B` 106== :term:`S`. This method is useful when out-of-tree build 107support is either not present or is broken. 108 109.. note:: 110 111 It is recommended that out-of-tree support be fixed and used if at 112 all possible. 113 114It's useful to have some idea of how the tasks defined by the 115:ref:`autotools* <ref-classes-autotools>` classes work and what they do behind the scenes. 116 117- :ref:`ref-tasks-configure` --- regenerates the 118 configure script (using ``autoreconf``) and then launches it with a 119 standard set of arguments used during cross-compilation. You can pass 120 additional parameters to ``configure`` through the :term:`EXTRA_OECONF` 121 or :term:`PACKAGECONFIG_CONFARGS` 122 variables. 123 124- :ref:`ref-tasks-compile` --- runs ``make`` with 125 arguments that specify the compiler and linker. You can pass 126 additional arguments through the :term:`EXTRA_OEMAKE` variable. 127 128- :ref:`ref-tasks-install` --- runs ``make install`` and 129 passes in ``${``\ :term:`D`\ ``}`` as ``DESTDIR``. 130 131.. _ref-classes-barebox: 132 133``barebox`` 134=========== 135 136The :ref:`ref-classes-barebox` class manages building the barebox bootloader. 137 138If a file named ``defconfig`` is included in the :term:`SRC_URI`, it will be 139copied to ``.config`` in the build directory and used as the barebox 140configuration. 141Instead of providing a ``defconfig`` file, you can set :term:`BAREBOX_CONFIG` 142to a defconfig provided by the barebox source tree. 143If neither ``defconfig`` nor :term:`BAREBOX_CONFIG` is specified, the class 144will raise an error. 145 146The :ref:`ref-classes-barebox` class supports config fragments and internally 147includes the :ref:`ref-classes-cml1` class to provide `Kconfig 148<https://docs.kernel.org/kbuild/kconfig-language.html>`__ support for 149barebox, enabling tasks such as :ref:`ref-tasks-menuconfig` and 150:ref:`ref-tasks-diffconfig`. 151 152The generated barebox binaries are deployed to 153:term:`DEPLOY_DIR_IMAGE` as well as installed to ``BAREBOX_INSTALL_PATH`` 154(``/boot`` by default) making them part of the recipe’s base package. 155This setup supports both using the barebox binaries as independent artifacts 156and installing them into a rootfs. 157:term:`BAREBOX_BINARY` can be used to select a distinct binary to deploy and 158install. 159If ``barebox`` is set as the :term:`EFI_PROVIDER`, the class will leverage 160:oe_git:`conf/image-uefi.conf </openembedded-core/tree/meta/conf/image-uefi.conf>` 161to define the default installation paths and naming conventions. 162 163The compiled-in barebox environment can be extended by adding environment files 164to the ``BAREBOX_ENV_DIR``. 165The ``BAREBOX_FIRMWARE_DIR`` variable allows you to specify the firmware blob 166search directory, enabling loading of additional firmware like TF-A or OP-TEE. 167 168.. _ref-classes-base: 169 170``base`` 171======== 172 173The :ref:`ref-classes-base` class is special in that every ``.bb`` file implicitly 174inherits the class. This class contains definitions for standard basic 175tasks such as fetching, unpacking, configuring (empty by default), 176compiling (runs any ``Makefile`` present), installing (empty by default) 177and packaging (empty by default). These tasks are often overridden or 178extended by other classes such as the :ref:`ref-classes-autotools` class or the 179:ref:`ref-classes-package` class. 180 181The class also contains some commonly used functions such as 182``oe_runmake``, which runs ``make`` with the arguments specified in 183:term:`EXTRA_OEMAKE` variable as well as the 184arguments passed directly to ``oe_runmake``. 185 186.. _ref-classes-bash-completion: 187 188``bash-completion`` 189=================== 190 191Sets up packaging and dependencies appropriate for recipes that build 192software that includes bash-completion data. 193 194.. _ref-classes-bin-package: 195 196``bin_package`` 197=============== 198 199The :ref:`ref-classes-bin-package` class is a helper class for recipes, that 200disables the :ref:`ref-tasks-configure` and :ref:`ref-tasks-compile` tasks and 201copies the content of the :term:`S` directory into the :term:`D` directory. This 202is useful for installing binary packages (e.g. RPM packages) by passing the 203package in the :term:`SRC_URI` variable and inheriting this class. 204 205For RPMs and other packages that do not contain a subdirectory, you should set 206the :term:`SRC_URI` option ``subdir`` to :term:`BP` so that the contents are 207extracted to the directory expected by the default value of :term:`S`. For 208example:: 209 210 SRC_URI = "https://example.com/downloads/somepackage.rpm;subdir=${BP}" 211 212This class can also be used for tarballs. For example:: 213 214 SRC_URI = "file://somepackage.tar.xz;subdir=${BP}" 215 216The :ref:`ref-classes-bin-package` class will copy the extracted content of the 217tarball from :term:`S` to :term:`D`. 218 219This class assumes that the content of the package as installed in :term:`S` 220mirrors the expected layout once installed on the target, which is generally the 221case for binary packages. For example, an RPM package for a library would 222usually contain the ``usr/lib`` directory, and should be extracted to 223``${S}/usr/lib/<library>.so.<version>`` to be installed in :term:`D` correctly. 224 225.. note:: 226 227 The extraction of the package passed in :term:`SRC_URI` is not handled by the 228 :ref:`ref-classes-bin-package` class, but rather by the appropriate 229 :ref:`fetcher <bitbake-user-manual/bitbake-user-manual-fetching:fetchers>` 230 depending on the file extension. 231 232.. _ref-classes-binconfig: 233 234``binconfig`` 235============= 236 237The :ref:`ref-classes-binconfig` class helps to correct paths in shell scripts. 238 239Before ``pkg-config`` had become widespread, libraries shipped shell 240scripts to give information about the libraries and include paths needed 241to build software (usually named ``LIBNAME-config``). This class assists 242any recipe using such scripts. 243 244During staging, the OpenEmbedded build system installs such scripts into 245the ``sysroots/`` directory. Inheriting this class results in all paths 246in these scripts being changed to point into the ``sysroots/`` directory 247so that all builds that use the script use the correct directories for 248the cross compiling layout. See the 249:term:`BINCONFIG_GLOB` variable for more 250information. 251 252.. _ref-classes-binconfig-disabled: 253 254``binconfig-disabled`` 255====================== 256 257An alternative version of the :ref:`ref-classes-binconfig` 258class, which disables binary configuration scripts by making them return 259an error in favor of using ``pkg-config`` to query the information. The 260scripts to be disabled should be specified using the :term:`BINCONFIG` 261variable within the recipe inheriting the class. 262 263.. _ref-classes-buildhistory: 264 265``buildhistory`` 266================ 267 268The :ref:`ref-classes-buildhistory` class records a history of build output metadata, 269which can be used to detect possible regressions as well as used for 270analysis of the build output. For more information on using Build 271History, see the 272":ref:`dev-manual/build-quality:maintaining build output quality`" 273section in the Yocto Project Development Tasks Manual. 274 275.. _ref-classes-buildstats: 276 277``buildstats`` 278============== 279 280The :ref:`ref-classes-buildstats` class records performance statistics about each task 281executed during the build (e.g. elapsed time, CPU usage, and I/O usage). 282 283When you use this class, the output goes into the 284:term:`BUILDSTATS_BASE` directory, which defaults 285to ``${TMPDIR}/buildstats/``. You can analyze the elapsed time using 286``scripts/pybootchartgui/pybootchartgui.py``, which produces a cascading 287chart of the entire build process and can be useful for highlighting 288bottlenecks. 289 290Collecting build statistics is enabled by default through the 291:term:`USER_CLASSES` variable from your 292``local.conf`` file. Consequently, you do not have to do anything to 293enable the class. However, if you want to disable the class, simply 294remove ":ref:`ref-classes-buildstats`" from the :term:`USER_CLASSES` list. 295 296.. _ref-classes-buildstats-summary: 297 298``buildstats-summary`` 299====================== 300 301When inherited globally, prints statistics at the end of the build on 302sstate re-use. In order to function, this class requires the 303:ref:`ref-classes-buildstats` class be enabled. 304 305.. _ref-classes-cargo: 306 307``cargo`` 308========= 309 310The :ref:`ref-classes-cargo` class allows to compile Rust language programs 311using `Cargo <https://doc.rust-lang.org/cargo/>`__. Cargo is Rust's package 312manager, allowing to fetch package dependencies and build your program. 313 314Using this class makes it very easy to build Rust programs. All you need 315is to use the :term:`SRC_URI` variable to point to a source repository 316which can be built by Cargo, typically one that was created by the 317``cargo new`` command, containing a ``Cargo.toml`` file, a ``Cargo.lock`` file and a ``src`` 318subdirectory. 319 320If you want to build and package tests of the program, inherit the 321:ref:`ref-classes-ptest-cargo` class instead of :ref:`ref-classes-cargo`. 322 323You will find an example (that show also how to handle possible git source dependencies) in the 324:oe_git:`zvariant_3.12.0.bb </openembedded-core/tree/meta-selftest/recipes-extended/zvariant/zvariant_3.12.0.bb>` 325recipe. Another example, with only crate dependencies, is the 326:oe_git:`uutils-coreutils </meta-openembedded/tree/meta-oe/recipes-core/uutils-coreutils>` 327recipe, which was generated by the `cargo-bitbake <https://crates.io/crates/cargo-bitbake>`__ 328tool. 329 330This class inherits the :ref:`ref-classes-cargo_common` class. 331 332.. _ref-classes-cargo_c: 333 334``cargo_c`` 335=========== 336 337The :ref:`ref-classes-cargo_c` class can be inherited by a recipe to generate 338a Rust library that can be called by C/C++ code. The recipe which inherits this 339class has to only replace ``inherit cargo`` by ``inherit cargo_c``. 340 341See the :yocto_git:`rust-c-lib-example_git.bb 342</poky/tree/meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb>` 343example recipe. 344 345.. _ref-classes-cargo_common: 346 347``cargo_common`` 348================ 349 350The :ref:`ref-classes-cargo_common` class is an internal class 351that is not intended to be used directly. 352 353An exception is the "rust" recipe, to build the Rust compiler and runtime 354library, which is built by Cargo but cannot use the :ref:`ref-classes-cargo` 355class. This is why this class was introduced. 356 357.. _ref-classes-cargo-update-recipe-crates: 358 359``cargo-update-recipe-crates`` 360=============================== 361 362The :ref:`ref-classes-cargo-update-recipe-crates` class allows 363recipe developers to update the list of Cargo crates in :term:`SRC_URI` 364by reading the ``Cargo.lock`` file in the source tree. 365 366To do so, create a recipe for your program, for example using 367:doc:`devtool </ref-manual/devtool-reference>`, 368make it inherit the :ref:`ref-classes-cargo` and 369:ref:`ref-classes-cargo-update-recipe-crates` and run:: 370 371 bitbake -c update_crates recipe 372 373This creates a ``recipe-crates.inc`` file that you can include in your 374recipe:: 375 376 require ${BPN}-crates.inc 377 378That's also something you can achieve by using the 379`cargo-bitbake <https://crates.io/crates/cargo-bitbake>`__ tool. 380 381.. _ref-classes-ccache: 382 383``ccache`` 384========== 385 386The :ref:`ref-classes-ccache` class enables the C/C++ Compiler Cache for the build. 387This class is used to give a minor performance boost during the build. 388 389See https://ccache.samba.org/ for information on the C/C++ Compiler 390Cache, and the :oe_git:`ccache.bbclass </openembedded-core/tree/meta/classes/ccache.bbclass>` 391file for details about how to enable this mechanism in your configuration 392file, how to disable it for specific recipes, and how to share ``ccache`` 393files between builds. 394 395However, using the class can lead to unexpected side-effects. Thus, using 396this class is not recommended. 397 398.. _ref-classes-chrpath: 399 400``chrpath`` 401=========== 402 403The :ref:`ref-classes-chrpath` class is a wrapper around the "chrpath" utility, which 404is used during the build process for :ref:`ref-classes-nativesdk`, :ref:`ref-classes-cross`, and 405:ref:`ref-classes-cross-canadian` recipes to change ``RPATH`` records within binaries 406in order to make them relocatable. 407 408.. _ref-classes-cmake: 409 410``cmake`` 411========= 412 413The :ref:`ref-classes-cmake` class allows recipes to build software using the 414`CMake <https://cmake.org/overview/>`__ build system. You can use the 415:term:`EXTRA_OECMAKE` variable to specify additional configuration options to 416pass to the ``cmake`` command line. 417 418By default, the :ref:`ref-classes-cmake` class uses 419`Ninja <https://ninja-build.org/>`__ instead of GNU make for building, which 420offers better build performance. If a recipe is broken with Ninja, then the 421recipe can set the :term:`OECMAKE_GENERATOR` variable to ``Unix Makefiles`` to 422use GNU make instead. 423 424If you need to install custom CMake toolchain files supplied by the application 425being built, you should install them (during :ref:`ref-tasks-install`) to the 426preferred CMake Module directory: ``${D}${datadir}/cmake/modules/``. 427 428.. _ref-classes-cmake-qemu: 429 430``cmake-qemu`` 431============== 432 433The :ref:`ref-classes-cmake-qemu` class might be used instead of the 434:ref:`ref-classes-cmake` class. In addition to the features provided by the 435:ref:`ref-classes-cmake` class, the :ref:`ref-classes-cmake-qemu` class passes 436the ``CMAKE_CROSSCOMPILING_EMULATOR`` setting to ``cmake``. This allows to use 437QEMU user-mode emulation for the execution of cross-compiled binaries on the 438host machine. For more information about ``CMAKE_CROSSCOMPILING_EMULATOR`` 439please refer to the `related section of the CMake documentation 440<https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING_EMULATOR.html>`__. 441 442Not all platforms are supported by QEMU. This class only works for machines with 443``qemu-usermode`` in the :ref:`ref-features-machine`. Using QEMU user-mode therefore 444involves a certain risk, which is also the reason why this feature is not part of 445the main :ref:`ref-classes-cmake` class by default. 446 447One use case is the execution of cross-compiled unit tests with CTest on the build 448machine. If ``CMAKE_CROSSCOMPILING_EMULATOR`` is configured:: 449 450 cmake --build --target test 451 452works transparently with QEMU user-mode. 453 454If the CMake project is developed with this use case in mind this works very nicely. 455This also applies to an IDE configured to use ``cmake-native`` for cross-compiling. 456 457.. _ref-classes-cml1: 458 459``cml1`` 460======== 461 462The :ref:`ref-classes-cml1` class provides basic support for the Linux kernel style 463build configuration system. "cml" stands for "Configuration Menu Language", which 464originates from the Linux kernel but is also used in other projects such as U-Boot 465and BusyBox. It could have been called "kconfig" too. 466 467.. _ref-classes-compress_doc: 468 469``compress_doc`` 470================ 471 472Enables compression for manual and info pages. This class is intended 473to be inherited globally. The default compression mechanism is gz (gzip) 474but you can select an alternative mechanism by setting the 475:term:`DOC_COMPRESS` variable. 476 477.. _ref-classes-copyleft_compliance: 478 479``copyleft_compliance`` 480======================= 481 482The :ref:`ref-classes-copyleft_compliance` class preserves source code for the purposes 483of license compliance. This class is an alternative to the :ref:`ref-classes-archiver` 484class and is still used by some users even though it has been deprecated 485in favor of the :ref:`ref-classes-archiver` class. 486 487.. _ref-classes-copyleft_filter: 488 489``copyleft_filter`` 490=================== 491 492A class used by the :ref:`ref-classes-archiver` and 493:ref:`ref-classes-copyleft_compliance` classes 494for filtering licenses. The ``copyleft_filter`` class is an internal 495class and is not intended to be used directly. 496 497.. _ref-classes-core-image: 498 499``core-image`` 500============== 501 502The :ref:`ref-classes-core-image` class provides common definitions for the 503``core-image-*`` image recipes, such as support for additional 504:term:`IMAGE_FEATURES`. 505 506.. _ref-classes-cpan: 507 508``cpan*`` 509========= 510 511The :ref:`cpan* <ref-classes-cpan>` classes support Perl modules. 512 513Recipes for Perl modules are simple. These recipes usually only need to 514point to the source's archive and then inherit the proper class file. 515Building is split into two methods depending on which method the module 516authors used. 517 518- Modules that use old ``Makefile.PL``-based build system require 519 ``cpan.bbclass`` in their recipes. 520 521- Modules that use ``Build.PL``-based build system require using 522 ``cpan_build.bbclass`` in their recipes. 523 524Both build methods inherit the :ref:`cpan-base <ref-classes-cpan>` class for basic Perl 525support. 526 527.. _ref-classes-create-spdx: 528 529``create-spdx`` 530=============== 531 532The :ref:`ref-classes-create-spdx` class provides support for 533automatically creating :term:`SPDX` :term:`SBOM` documents based upon image 534and SDK contents. 535 536This class is meant to be inherited globally from a configuration file:: 537 538 INHERIT += "create-spdx" 539 540The toplevel :term:`SPDX` output file is generated in JSON format as a 541``IMAGE-MACHINE.spdx.json`` file in ``tmp/deploy/images/MACHINE/`` inside the 542:term:`Build Directory`. There are other related files in the same directory, 543as well as in ``tmp/deploy/spdx``. 544 545The exact behaviour of this class, and the amount of output can be controlled 546by the :term:`SPDX_PRETTY`, :term:`SPDX_ARCHIVE_PACKAGED`, 547:term:`SPDX_ARCHIVE_SOURCES` and :term:`SPDX_INCLUDE_SOURCES` variables. 548 549See the description of these variables and the 550":ref:`dev-manual/sbom:creating a software bill of materials`" 551section in the Yocto Project Development Manual for more details. 552 553.. _ref-classes-cross: 554 555``cross`` 556========= 557 558The :ref:`ref-classes-cross` class provides support for the recipes that build the 559cross-compilation tools. 560 561.. _ref-classes-cross-canadian: 562 563``cross-canadian`` 564================== 565 566The :ref:`ref-classes-cross-canadian` class provides support for the recipes that build 567the Canadian Cross-compilation tools for SDKs. See the 568":ref:`overview-manual/concepts:cross-development toolchain generation`" 569section in the Yocto Project Overview and Concepts Manual for more 570discussion on these cross-compilation tools. 571 572.. _ref-classes-crosssdk: 573 574``crosssdk`` 575============ 576 577The :ref:`ref-classes-crosssdk` class provides support for the recipes that build the 578cross-compilation tools used for building SDKs. See the 579":ref:`overview-manual/concepts:cross-development toolchain generation`" 580section in the Yocto Project Overview and Concepts Manual for more 581discussion on these cross-compilation tools. 582 583.. _ref-classes-cve-check: 584 585``cve-check`` 586============= 587 588The :ref:`ref-classes-cve-check` class looks for known CVEs (Common Vulnerabilities 589and Exposures) while building with BitBake. This class is meant to be 590inherited globally from a configuration file:: 591 592 INHERIT += "cve-check" 593 594To filter out obsolete CVE database entries which are known not to impact software from Poky and OE-Core, 595add following line to the build configuration file:: 596 597 include cve-extra-exclusions.inc 598 599You can also look for vulnerabilities in specific packages by passing 600``-c cve_check`` to BitBake. 601 602After building the software with Bitbake, CVE check output reports are available in ``tmp/deploy/cve`` 603and image specific summaries in ``tmp/deploy/images/*.cve`` or ``tmp/deploy/images/*.json`` files. 604 605When building, the CVE checker will emit build time warnings for any detected 606issues which are in the state ``Unpatched``, meaning that CVE issue seems to affect the software component 607and version being compiled and no patches to address the issue are applied. Other states 608for detected CVE issues are: ``Patched`` meaning that a patch to address the issue is already 609applied, and ``Ignored`` meaning that the issue can be ignored. 610 611The ``Patched`` state of a CVE issue is detected from patch files with the format 612``CVE-ID.patch``, e.g. ``CVE-2019-20633.patch``, in the :term:`SRC_URI` and using 613CVE metadata of format ``CVE: CVE-ID`` in the commit message of the patch file. 614 615.. note:: 616 617 Commit message metadata (``CVE: CVE-ID`` in a patch header) will not be scanned 618 in any patches that are remote, i.e. that are anything other than local files 619 referenced via ``file://`` in SRC_URI. However, a ``CVE-ID`` in a remote patch 620 file name itself will be registered. 621 622If the recipe adds ``CVE-ID`` as flag of the :term:`CVE_STATUS` variable with status 623mapped to ``Ignored``, then the CVE state is reported as ``Ignored``:: 624 625 CVE_STATUS[CVE-2020-15523] = "not-applicable-platform: Issue only applies on Windows" 626 627If CVE check reports that a recipe contains false positives or false negatives, these may be 628fixed in recipes by adjusting the CVE product name using :term:`CVE_PRODUCT` and :term:`CVE_VERSION` variables. 629:term:`CVE_PRODUCT` defaults to the plain recipe name :term:`BPN` which can be adjusted to one or more CVE 630database vendor and product pairs using the syntax:: 631 632 CVE_PRODUCT = "flex_project:flex" 633 634where ``flex_project`` is the CVE database vendor name and ``flex`` is the product name. Similarly 635if the default recipe version :term:`PV` does not match the version numbers of the software component 636in upstream releases or the CVE database, then the :term:`CVE_VERSION` variable can be used to set the 637CVE database compatible version number, for example:: 638 639 CVE_VERSION = "2.39" 640 641Any bugs or missing or incomplete information in the CVE database entries should be fixed in the CVE database 642via the `NVD feedback form <https://nvd.nist.gov/info/contact-form>`__. 643 644Users should note that security is a process, not a product, and thus also CVE checking, analyzing results, 645patching and updating the software should be done as a regular process. The data and assumptions 646required for CVE checker to reliably detect issues are frequently broken in various ways. 647These can only be detected by reviewing the details of the issues and iterating over the generated reports, 648and following what happens in other Linux distributions and in the greater open source community. 649 650You will find some more details in the 651":ref:`dev-manual/vulnerabilities:checking for vulnerabilities`" 652section in the Development Tasks Manual. 653 654.. _ref-classes-cython: 655 656``cython`` 657========== 658 659The :ref:`ref-classes-cython` class can be used by Python recipes that require 660`Cython <https://cython.org/>`__ as part of their build dependencies 661(:term:`DEPENDS`). 662 663.. _ref-classes-debian: 664 665``debian`` 666========== 667 668The :ref:`ref-classes-debian` class renames output packages so that they follow the 669Debian naming policy (i.e. ``glibc`` becomes ``libc6`` and 670``glibc-devel`` becomes ``libc6-dev``.) Renaming includes the library 671name and version as part of the package name. 672 673If a recipe creates packages for multiple libraries (shared object files 674of ``.so`` type), use the :term:`LEAD_SONAME` 675variable in the recipe to specify the library on which to apply the 676naming scheme. 677 678.. _ref-classes-deploy: 679 680``deploy`` 681========== 682 683The :ref:`ref-classes-deploy` class handles deploying files to the 684:term:`DEPLOY_DIR_IMAGE` directory. The main 685function of this class is to allow the deploy step to be accelerated by 686shared state. Recipes that inherit this class should define their own 687:ref:`ref-tasks-deploy` function to copy the files to be 688deployed to :term:`DEPLOYDIR`, and use ``addtask`` to 689add the task at the appropriate place, which is usually after 690:ref:`ref-tasks-compile` or 691:ref:`ref-tasks-install`. The class then takes care of 692staging the files from :term:`DEPLOYDIR` to :term:`DEPLOY_DIR_IMAGE`. 693 694.. _ref-classes-devicetree: 695 696``devicetree`` 697============== 698 699The :ref:`ref-classes-devicetree` class allows to build a recipe that compiles 700device tree source files that are not in the kernel tree. 701 702The compilation of out-of-tree device tree sources is the same as the kernel 703in-tree device tree compilation process. This includes the ability to include 704sources from the kernel such as SoC ``dtsi`` files as well as C header files, 705such as ``gpio.h``. 706 707The :ref:`ref-tasks-compile` task will compile two kinds of files: 708 709- Regular device tree sources with a ``.dts`` extension. 710 711- Device tree overlays, detected from the presence of the ``/plugin/;`` 712 string in the file contents. 713 714This class deploys the generated device tree binaries into 715``${``\ :term:`DEPLOY_DIR_IMAGE`\ ``}/devicetree/``. This is similar to 716what the :ref:`ref-classes-kernel-devicetree` class does, with the added 717``devicetree`` subdirectory to avoid name clashes. Additionally, the device 718trees are populated into the sysroot for access via the sysroot from within 719other recipes. 720 721By default, all device tree sources located in :term:`DT_FILES_PATH` directory 722are compiled. To select only particular sources, set :term:`DT_FILES` to 723a space-separated list of files (relative to :term:`DT_FILES_PATH`). For 724convenience, both ``.dts`` and ``.dtb`` extensions can be used. 725 726An extra padding is appended to non-overlay device trees binaries. This 727can typically be used as extra space for adding extra properties at boot time. 728The padding size can be modified by setting :term:`DT_PADDING_SIZE` 729to the desired size, in bytes. 730 731See :oe_git:`devicetree.bbclass sources 732</openembedded-core/tree/meta/classes-recipe/devicetree.bbclass>` 733for further variables controlling this class. 734 735Here is an excerpt of an example ``recipes-kernel/linux/devicetree-acme.bb`` 736recipe inheriting this class:: 737 738 inherit devicetree 739 COMPATIBLE_MACHINE = "^mymachine$" 740 SRC_URI:mymachine = "file://mymachine.dts" 741 742.. _ref-classes-devshell: 743 744``devshell`` 745============ 746 747The :ref:`ref-classes-devshell` class adds the :ref:`ref-tasks-devshell` task. Distribution 748policy dictates whether to include this class. See the ":ref:`dev-manual/development-shell:using a development shell`" 749section in the Yocto Project Development Tasks Manual for more 750information about using :ref:`ref-classes-devshell`. 751 752.. _ref-classes-devupstream: 753 754``devupstream`` 755=============== 756 757The :ref:`ref-classes-devupstream` class uses 758:term:`BBCLASSEXTEND` to add a variant of the 759recipe that fetches from an alternative URI (e.g. Git) instead of a 760tarball. Here is an example:: 761 762 BBCLASSEXTEND = "devupstream:target" 763 SRC_URI:class-devupstream = "git://git.example.com/example;branch=main" 764 SRCREV:class-devupstream = "abcd1234" 765 766Adding the above statements to your recipe creates a variant that has 767:term:`DEFAULT_PREFERENCE` set to "-1". 768Consequently, you need to select the variant of the recipe to use it. 769Any development-specific adjustments can be done by using the 770``class-devupstream`` override. Here is an example:: 771 772 DEPENDS:append:class-devupstream = " gperf-native" 773 do_configure:prepend:class-devupstream() { 774 touch ${S}/README 775 } 776 777The class 778currently only supports creating a development variant of the target 779recipe, not :ref:`ref-classes-native` or :ref:`ref-classes-nativesdk` variants. 780 781The :term:`BBCLASSEXTEND` syntax (i.e. ``devupstream:target``) provides 782support for :ref:`ref-classes-native` and :ref:`ref-classes-nativesdk` variants. Consequently, this 783functionality can be added in a future release. 784 785Support for other version control systems such as Subversion is limited 786due to BitBake's automatic fetch dependencies (e.g. 787``subversion-native``). 788 789.. _ref-classes-externalsrc: 790 791``externalsrc`` 792=============== 793 794The :ref:`ref-classes-externalsrc` class supports building software from source code 795that is external to the OpenEmbedded build system. Building software 796from an external source tree means that the build system's normal fetch, 797unpack, and patch process is not used. 798 799By default, the OpenEmbedded build system uses the :term:`S` 800and :term:`B` variables to locate unpacked recipe source code 801and to build it, respectively. When your recipe inherits the 802:ref:`ref-classes-externalsrc` class, you use the 803:term:`EXTERNALSRC` and :term:`EXTERNALSRC_BUILD` variables to 804ultimately define :term:`S` and :term:`B`. 805 806By default, this class expects the source code to support recipe builds 807that use the :term:`B` variable to point to the directory in 808which the OpenEmbedded build system places the generated objects built 809from the recipes. By default, the :term:`B` directory is set to the 810following, which is separate from the source directory (:term:`S`):: 811 812 ${WORKDIR}/${BPN}-{PV}/ 813 814See these variables for more information: 815:term:`WORKDIR`, :term:`BPN`, and 816:term:`PV`, 817 818For more information on the :ref:`ref-classes-externalsrc` class, see the comments in 819``meta/classes/externalsrc.bbclass`` in the :term:`Source Directory`. 820For information on how to use the :ref:`ref-classes-externalsrc` class, see the 821":ref:`dev-manual/building:building software from an external source`" 822section in the Yocto Project Development Tasks Manual. 823 824.. _ref-classes-extrausers: 825 826``extrausers`` 827============== 828 829The :ref:`ref-classes-extrausers` class allows additional user and group configuration 830to be applied at the image level. Inheriting this class either globally 831or from an image recipe allows additional user and group operations to 832be performed using the 833:term:`EXTRA_USERS_PARAMS` variable. 834 835.. note:: 836 837 The user and group operations added using the :ref:`ref-classes-extrausers` 838 class are not tied to a specific recipe outside of the recipe for the 839 image. Thus, the operations can be performed across the image as a 840 whole. Use the :ref:`ref-classes-useradd` class to add user and group 841 configuration to a specific recipe. 842 843Here is an example that uses this class in an image recipe:: 844 845 inherit extrausers 846 EXTRA_USERS_PARAMS = "\ 847 useradd -p '' tester; \ 848 groupadd developers; \ 849 userdel nobody; \ 850 groupdel -g video; \ 851 groupmod -g 1020 developers; \ 852 usermod -s /bin/sh tester; \ 853 " 854 855Here is an example that adds two users named "tester-jim" and "tester-sue" and assigns 856passwords. First on host, create the (escaped) password hash:: 857 858 printf "%q" $(mkpasswd -m sha256crypt tester01) 859 860The resulting hash is set to a variable and used in ``useradd`` command parameters:: 861 862 inherit extrausers 863 PASSWD = "\$X\$ABC123\$A-Long-Hash" 864 EXTRA_USERS_PARAMS = "\ 865 useradd -p '${PASSWD}' tester-jim; \ 866 useradd -p '${PASSWD}' tester-sue; \ 867 " 868 869Finally, here is an example that sets the root password:: 870 871 inherit extrausers 872 EXTRA_USERS_PARAMS = "\ 873 usermod -p '${PASSWD}' root; \ 874 " 875 876.. note:: 877 878 From a security perspective, hardcoding a default password is not 879 generally a good idea or even legal in some jurisdictions. It is 880 recommended that you do not do this if you are building a production 881 image. 882 883 884.. _ref-classes-features_check: 885 886``features_check`` 887================== 888 889The :ref:`ref-classes-features_check` class allows individual recipes to check 890for required and conflicting :term:`DISTRO_FEATURES`, :term:`MACHINE_FEATURES` 891or :term:`COMBINED_FEATURES`. 892 893This class provides support for the following variables: 894 895- :term:`REQUIRED_DISTRO_FEATURES` 896- :term:`CONFLICT_DISTRO_FEATURES` 897- :term:`ANY_OF_DISTRO_FEATURES` 898- ``REQUIRED_MACHINE_FEATURES`` 899- ``CONFLICT_MACHINE_FEATURES`` 900- ``ANY_OF_MACHINE_FEATURES`` 901- ``REQUIRED_COMBINED_FEATURES`` 902- ``CONFLICT_COMBINED_FEATURES`` 903- ``ANY_OF_COMBINED_FEATURES`` 904 905If any conditions specified in the recipe using the above 906variables are not met, the recipe will be skipped, and if the 907build system attempts to build the recipe then an error will be 908triggered. 909 910.. _ref-classes-fontcache: 911 912``fontcache`` 913============= 914 915The :ref:`ref-classes-fontcache` class generates the proper post-install and 916post-remove (postinst and postrm) scriptlets for font packages. These 917scriptlets call ``fc-cache`` (part of ``Fontconfig``) to add the fonts 918to the font information cache. Since the cache files are 919architecture-specific, ``fc-cache`` runs using QEMU if the postinst 920scriptlets need to be run on the build host during image creation. 921 922If the fonts being installed are in packages other than the main 923package, set :term:`FONT_PACKAGES` to specify the 924packages containing the fonts. 925 926.. _ref-classes-fs-uuid: 927 928``fs-uuid`` 929=========== 930 931The :ref:`ref-classes-fs-uuid` class extracts UUID from 932``${``\ :term:`ROOTFS`\ ``}``, which must have been built 933by the time that this function gets called. The :ref:`ref-classes-fs-uuid` class only 934works on ``ext`` file systems and depends on ``tune2fs``. 935 936.. _ref-classes-gconf: 937 938``gconf`` 939========= 940 941The :ref:`ref-classes-gconf` class provides common functionality for recipes that need 942to install GConf schemas. The schemas will be put into a separate 943package (``${``\ :term:`PN`\ ``}-gconf``) that is created 944automatically when this class is inherited. This package uses the 945appropriate post-install and post-remove (postinst/postrm) scriptlets to 946register and unregister the schemas in the target image. 947 948.. _ref-classes-gettext: 949 950``gettext`` 951=========== 952 953The :ref:`ref-classes-gettext` class provides support for building 954software that uses the GNU ``gettext`` internationalization and localization 955system. All recipes building software that use ``gettext`` should inherit this 956class. 957 958.. _ref-classes-github-releases: 959 960``github-releases`` 961=================== 962 963For recipes that fetch release tarballs from github, the :ref:`ref-classes-github-releases` 964class sets up a standard way for checking available upstream versions 965(to support ``devtool upgrade`` and the Automated Upgrade Helper (AUH)). 966 967To use it, add ":ref:`ref-classes-github-releases`" to the inherit line in the recipe, 968and if the default value of :term:`GITHUB_BASE_URI` is not suitable, 969then set your own value in the recipe. You should then use ``${GITHUB_BASE_URI}`` 970in the value you set for :term:`SRC_URI` within the recipe. 971 972.. _ref-classes-gnomebase: 973 974``gnomebase`` 975============= 976 977The :ref:`ref-classes-gnomebase` class is the base class for recipes that build 978software from the GNOME stack. This class sets 979:term:`SRC_URI` to download the source from the GNOME 980mirrors as well as extending :term:`FILES` with the typical 981GNOME installation paths. 982 983.. _ref-classes-go: 984 985``go`` 986====== 987 988The :ref:`ref-classes-go` class supports building Go programs. The behavior of 989this class is controlled by the mandatory :term:`GO_IMPORT` variable, and 990by the optional :term:`GO_INSTALL` and :term:`GO_INSTALL_FILTEROUT` ones. 991 992To build a Go program with the Yocto Project, you can use the 993:yocto_git:`go-helloworld_0.1.bb </poky/tree/meta/recipes-extended/go-examples/go-helloworld_0.1.bb>` 994recipe as an example. 995 996.. _ref-classes-go-mod: 997 998``go-mod`` 999========== 1000 1001The :ref:`ref-classes-go-mod` class allows to use Go modules, and inherits the 1002:ref:`ref-classes-go` class. 1003 1004See the associated :term:`GO_WORKDIR` variable. 1005 1006.. _ref-classes-go-vendor: 1007 1008``go-vendor`` 1009============= 1010 1011The :ref:`ref-classes-go-vendor` class implements support for offline builds, 1012also known as Go vendoring. In such a scenario, the module dependencias are 1013downloaded during the :ref:`ref-tasks-fetch` task rather than when modules are 1014imported, thus being coherent with Yocto's concept of fetching every source 1015beforehand. 1016 1017The dependencies are unpacked into the modules' ``vendor`` directory, where a 1018manifest file is generated. 1019 1020.. _ref-classes-gobject-introspection: 1021 1022``gobject-introspection`` 1023========================= 1024 1025Provides support for recipes building software that supports GObject 1026introspection. This functionality is only enabled if the 1027"gobject-introspection-data" feature is in 1028:term:`DISTRO_FEATURES` as well as 1029"qemu-usermode" being in 1030:term:`MACHINE_FEATURES`. 1031 1032.. note:: 1033 1034 This functionality is :ref:`backfilled <ref-features-backfill>` by default 1035 and, if not applicable, should be disabled through 1036 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED` or 1037 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`, respectively. 1038 1039.. _ref-classes-grub-efi: 1040 1041``grub-efi`` 1042============ 1043 1044The :ref:`ref-classes-grub-efi` class provides ``grub-efi``-specific functions for 1045building bootable images. 1046 1047This class supports several variables: 1048 1049- :term:`INITRD`: Indicates list of filesystem images to 1050 concatenate and use as an initial RAM disk (initrd) (optional). 1051 1052- :term:`ROOTFS`: Indicates a filesystem image to include 1053 as the root filesystem (optional). 1054 1055- :term:`GRUB_GFXSERIAL`: Set this to "1" to have 1056 graphics and serial in the boot menu. 1057 1058- :term:`LABELS`: A list of targets for the automatic 1059 configuration. 1060 1061- :term:`APPEND`: An override list of append strings for 1062 each ``LABEL``. 1063 1064- :term:`GRUB_OPTS`: Additional options to add to the 1065 configuration (optional). Options are delimited using semi-colon 1066 characters (``;``). 1067 1068- :term:`GRUB_TIMEOUT`: Timeout before executing 1069 the default ``LABEL`` (optional). 1070 1071.. _ref-classes-gsettings: 1072 1073``gsettings`` 1074============= 1075 1076The :ref:`ref-classes-gsettings` class provides common functionality for recipes that 1077need to install GSettings (glib) schemas. The schemas are assumed to be 1078part of the main package. Appropriate post-install and post-remove 1079(postinst/postrm) scriptlets are added to register and unregister the 1080schemas in the target image. 1081 1082.. _ref-classes-gtk-doc: 1083 1084``gtk-doc`` 1085=========== 1086 1087The :ref:`ref-classes-gtk-doc` class is a helper class to pull in the appropriate 1088``gtk-doc`` dependencies and disable ``gtk-doc``. 1089 1090.. _ref-classes-gtk-icon-cache: 1091 1092``gtk-icon-cache`` 1093================== 1094 1095The :ref:`ref-classes-gtk-icon-cache` class generates the proper post-install and 1096post-remove (postinst/postrm) scriptlets for packages that use GTK+ and 1097install icons. These scriptlets call ``gtk-update-icon-cache`` to add 1098the fonts to GTK+'s icon cache. Since the cache files are 1099architecture-specific, ``gtk-update-icon-cache`` is run using QEMU if 1100the postinst scriptlets need to be run on the build host during image 1101creation. 1102 1103.. _ref-classes-gtk-immodules-cache: 1104 1105``gtk-immodules-cache`` 1106======================= 1107 1108The :ref:`ref-classes-gtk-immodules-cache` class generates the proper post-install and 1109post-remove (postinst/postrm) scriptlets for packages that install GTK+ 1110input method modules for virtual keyboards. These scriptlets call 1111``gtk-update-icon-cache`` to add the input method modules to the cache. 1112Since the cache files are architecture-specific, 1113``gtk-update-icon-cache`` is run using QEMU if the postinst scriptlets 1114need to be run on the build host during image creation. 1115 1116If the input method modules being installed are in packages other than 1117the main package, set 1118:term:`GTKIMMODULES_PACKAGES` to specify 1119the packages containing the modules. 1120 1121.. _ref-classes-gzipnative: 1122 1123``gzipnative`` 1124============== 1125 1126The :ref:`ref-classes-gzipnative` class enables the use of different native versions of 1127``gzip`` and ``pigz`` rather than the versions of these tools from the 1128build host. 1129 1130.. _ref-classes-icecc: 1131 1132``icecc`` 1133========= 1134 1135The :ref:`ref-classes-icecc` class supports 1136`Icecream <https://github.com/icecc/icecream>`__, which facilitates 1137taking compile jobs and distributing them among remote machines. 1138 1139The class stages directories with symlinks from ``gcc`` and ``g++`` to 1140``icecc``, for both native and cross compilers. Depending on each 1141configure or compile, the OpenEmbedded build system adds the directories 1142at the head of the ``PATH`` list and then sets the ``ICECC_CXX`` and 1143``ICECC_CC`` variables, which are the paths to the ``g++`` and ``gcc`` 1144compilers, respectively. 1145 1146For the cross compiler, the class creates a ``tar.gz`` file that 1147contains the Yocto Project toolchain and sets ``ICECC_VERSION``, which 1148is the version of the cross-compiler used in the cross-development 1149toolchain, accordingly. 1150 1151The class handles all three different compile stages (i.e native, 1152cross-kernel and target) and creates the necessary environment 1153``tar.gz`` file to be used by the remote machines. The class also 1154supports SDK generation. 1155 1156If :term:`ICECC_PATH` is not set in your 1157``local.conf`` file, then the class tries to locate the ``icecc`` binary 1158using ``which``. If :term:`ICECC_ENV_EXEC` is set 1159in your ``local.conf`` file, the variable should point to the 1160``icecc-create-env`` script provided by the user. If you do not point to 1161a user-provided script, the build system uses the default script 1162provided by the recipe :oe_git:`icecc-create-env_0.1.bb 1163</openembedded-core/tree/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb>`. 1164 1165.. note:: 1166 1167 This script is a modified version and not the one that comes with 1168 ``icecream``. 1169 1170If you do not want the Icecream distributed compile support to apply to 1171specific recipes or classes, you can ask them to be ignored by Icecream 1172by listing the recipes and classes using the 1173:term:`ICECC_RECIPE_DISABLE` and 1174:term:`ICECC_CLASS_DISABLE` variables, 1175respectively, in your ``local.conf`` file. Doing so causes the 1176OpenEmbedded build system to handle these compilations locally. 1177 1178Additionally, you can list recipes using the 1179:term:`ICECC_RECIPE_ENABLE` variable in 1180your ``local.conf`` file to force ``icecc`` to be enabled for recipes 1181using an empty :term:`PARALLEL_MAKE` variable. 1182 1183Inheriting the :ref:`ref-classes-icecc` class changes all sstate signatures. 1184Consequently, if a development team has a dedicated build system that 1185populates :term:`SSTATE_MIRRORS` and they want to 1186reuse sstate from :term:`SSTATE_MIRRORS`, then all developers and the build 1187system need to either inherit the :ref:`ref-classes-icecc` class or nobody should. 1188 1189At the distribution level, you can inherit the :ref:`ref-classes-icecc` class to be 1190sure that all builders start with the same sstate signatures. After 1191inheriting the class, you can then disable the feature by setting the 1192:term:`ICECC_DISABLED` variable to "1" as follows:: 1193 1194 INHERIT_DISTRO:append = " icecc" 1195 ICECC_DISABLED ??= "1" 1196 1197This practice 1198makes sure everyone is using the same signatures but also requires 1199individuals that do want to use Icecream to enable the feature 1200individually as follows in your ``local.conf`` file:: 1201 1202 ICECC_DISABLED = "" 1203 1204.. _ref-classes-image: 1205 1206``image`` 1207========= 1208 1209The :ref:`ref-classes-image` class helps support creating images in different formats. 1210First, the root filesystem is created from packages using one of the 1211``rootfs*.bbclass`` files (depending on the package format used) and 1212then one or more image files are created. 1213 1214- The :term:`IMAGE_FSTYPES` variable controls the types of images to 1215 generate. 1216 1217- The :term:`IMAGE_INSTALL` variable controls the list of packages to 1218 install into the image. 1219 1220For information on customizing images, see the 1221":ref:`dev-manual/customizing-images:customizing images`" section 1222in the Yocto Project Development Tasks Manual. For information on how 1223images are created, see the 1224":ref:`overview-manual/concepts:images`" section in the 1225Yocto Project Overview and Concepts Manual. 1226 1227.. _ref-classes-image-buildinfo: 1228 1229``image-buildinfo`` 1230=================== 1231 1232The :ref:`ref-classes-image-buildinfo` class writes a plain text file containing 1233build information to the target filesystem at ``${sysconfdir}/buildinfo`` 1234by default (as specified by :term:`IMAGE_BUILDINFO_FILE`). 1235This can be useful for manually determining the origin of any given 1236image. It writes out two sections: 1237 1238#. `Build Configuration`: a list of variables and their values (specified 1239 by :term:`IMAGE_BUILDINFO_VARS`, which defaults to :term:`DISTRO` and 1240 :term:`DISTRO_VERSION`) 1241 1242#. `Layer Revisions`: the revisions of all of the layers used in the 1243 build. 1244 1245Additionally, when building an SDK it will write the same contents 1246to ``/buildinfo`` by default (as specified by 1247:term:`SDK_BUILDINFO_FILE`). 1248 1249.. _ref-classes-image_types: 1250 1251``image_types`` 1252=============== 1253 1254The :ref:`ref-classes-image_types` class defines all of the standard image output types 1255that you can enable through the 1256:term:`IMAGE_FSTYPES` variable. You can use this 1257class as a reference on how to add support for custom image output 1258types. 1259 1260By default, the :ref:`ref-classes-image` class automatically 1261enables the :ref:`ref-classes-image_types` class. The :ref:`ref-classes-image` class uses the 1262``IMGCLASSES`` variable as follows:: 1263 1264 IMGCLASSES = "rootfs_${IMAGE_PKGTYPE} image_types ${IMAGE_CLASSES}" 1265 # Only Linux SDKs support populate_sdk_ext, fall back to populate_sdk_base 1266 # in the non-Linux SDK_OS case, such as mingw32 1267 inherit populate_sdk_base 1268 IMGCLASSES += "${@['', 'populate_sdk_ext']['linux' in d.getVar("SDK_OS")]}" 1269 IMGCLASSES += "${@bb.utils.contains_any('IMAGE_FSTYPES', 'live iso hddimg', 'image-live', '', d)}" 1270 IMGCLASSES += "${@bb.utils.contains('IMAGE_FSTYPES', 'container', 'image-container', '', d)}" 1271 IMGCLASSES += "image_types_wic" 1272 IMGCLASSES += "rootfs-postcommands" 1273 IMGCLASSES += "image-postinst-intercepts" 1274 IMGCLASSES += "overlayfs-etc" 1275 inherit_defer ${IMGCLASSES} 1276 1277The :ref:`ref-classes-image_types` class also handles conversion and compression of images. 1278 1279.. note:: 1280 1281 To build a VMware VMDK image, you need to add "wic.vmdk" to 1282 :term:`IMAGE_FSTYPES`. This would also be similar for Virtual Box Virtual Disk 1283 Image ("vdi") and QEMU Copy On Write Version 2 ("qcow2") images. 1284 1285.. _ref-classes-image-live: 1286 1287``image-live`` 1288============== 1289 1290This class controls building "live" (i.e. HDDIMG and ISO) images. Live 1291images contain syslinux for legacy booting, as well as the bootloader 1292specified by :term:`EFI_PROVIDER` if 1293:term:`MACHINE_FEATURES` contains "efi". 1294 1295Normally, you do not use this class directly. Instead, you add "live" to 1296:term:`IMAGE_FSTYPES`. 1297 1298.. _ref-classes-insane: 1299 1300``insane`` 1301========== 1302 1303The :ref:`ref-classes-insane` class adds a step to the package generation process so 1304that output quality assurance checks are generated by the OpenEmbedded 1305build system. A range of checks are performed that check the build's 1306output for common problems that show up during runtime. Distribution 1307policy usually dictates whether to include this class. 1308 1309You can configure the sanity checks so that specific test failures 1310either raise a warning or an error message. Typically, failures for new 1311tests generate a warning. Subsequent failures for the same test would 1312then generate an error message once the metadata is in a known and good 1313condition. See the ":doc:`/ref-manual/qa-checks`" Chapter for a list of all the warning 1314and error messages you might encounter using a default configuration. 1315 1316Use the :term:`WARN_QA` and 1317:term:`ERROR_QA` variables to control the behavior of 1318these checks at the global level (i.e. in your custom distro 1319configuration). However, to skip one or more checks in recipes, you 1320should use :term:`INSANE_SKIP`. For example, to skip 1321the check for symbolic link ``.so`` files in the main package of a 1322recipe, add the following to the recipe. You need to realize that the 1323package name override, in this example ``${PN}``, must be used:: 1324 1325 INSANE_SKIP:${PN} += "dev-so" 1326 1327Please keep in mind that the QA checks 1328are meant to detect real or potential problems in the packaged 1329output. So exercise caution when disabling these checks. 1330 1331The tests you can list with the :term:`WARN_QA` and 1332:term:`ERROR_QA` variables are: 1333 1334- ``already-stripped:`` Checks that produced binaries have not 1335 already been stripped prior to the build system extracting debug 1336 symbols. It is common for upstream software projects to default to 1337 stripping debug symbols for output binaries. In order for debugging 1338 to work on the target using ``-dbg`` packages, this stripping must be 1339 disabled. 1340 1341- ``arch:`` Checks the Executable and Linkable Format (ELF) type, bit 1342 size, and endianness of any binaries to ensure they match the target 1343 architecture. This test fails if any binaries do not match the type 1344 since there would be an incompatibility. The test could indicate that 1345 the wrong compiler or compiler options have been used. Sometimes 1346 software, like bootloaders, might need to bypass this check. 1347 1348- ``buildpaths:`` Checks for paths to locations on the build host 1349 inside the output files. Not only can these leak information about 1350 the build environment, they also hinder binary reproducibility. 1351 1352- ``build-deps:`` Determines if a build-time dependency that is 1353 specified through :term:`DEPENDS`, explicit 1354 :term:`RDEPENDS`, or task-level dependencies exists 1355 to match any runtime dependency. This determination is particularly 1356 useful to discover where runtime dependencies are detected and added 1357 during packaging. If no explicit dependency has been specified within 1358 the metadata, at the packaging stage it is too late to ensure that 1359 the dependency is built, and thus you can end up with an error when 1360 the package is installed into the image during the 1361 :ref:`ref-tasks-rootfs` task because the auto-detected 1362 dependency was not satisfied. An example of this would be where the 1363 :ref:`ref-classes-update-rc.d` class automatically 1364 adds a dependency on the ``initscripts-functions`` package to 1365 packages that install an initscript that refers to 1366 ``/etc/init.d/functions``. The recipe should really have an explicit 1367 :term:`RDEPENDS` for the package in question on ``initscripts-functions`` 1368 so that the OpenEmbedded build system is able to ensure that the 1369 ``initscripts`` recipe is actually built and thus the 1370 ``initscripts-functions`` package is made available. 1371 1372- ``configure-gettext:`` Checks that if a recipe is building something 1373 that uses automake and the automake files contain an ``AM_GNU_GETTEXT`` 1374 directive, that the recipe also inherits the :ref:`ref-classes-gettext` 1375 class to ensure that gettext is available during the build. 1376 1377- ``compile-host-path:`` Checks the 1378 :ref:`ref-tasks-compile` log for indications that 1379 paths to locations on the build host were used. Using such paths 1380 might result in host contamination of the build output. 1381 1382- ``cve_status_not_in_db:`` Checks for each component if CVEs that are ignored 1383 via :term:`CVE_STATUS`, that those are (still) reported for this component 1384 in the NIST database. If not, a warning is printed. This check is disabled 1385 by default. 1386 1387- ``debug-deps:`` Checks that all packages except ``-dbg`` packages 1388 do not depend on ``-dbg`` packages, which would cause a packaging 1389 bug. 1390 1391- ``debug-files:`` Checks for ``.debug`` directories in anything but 1392 the ``-dbg`` package. The debug files should all be in the ``-dbg`` 1393 package. Thus, anything packaged elsewhere is incorrect packaging. 1394 1395- ``dep-cmp:`` Checks for invalid version comparison statements in 1396 runtime dependency relationships between packages (i.e. in 1397 :term:`RDEPENDS`, 1398 :term:`RRECOMMENDS`, 1399 :term:`RSUGGESTS`, 1400 :term:`RPROVIDES`, 1401 :term:`RREPLACES`, and 1402 :term:`RCONFLICTS` variable values). Any invalid 1403 comparisons might trigger failures or undesirable behavior when 1404 passed to the package manager. 1405 1406- ``desktop:`` Runs the ``desktop-file-validate`` program against any 1407 ``.desktop`` files to validate their contents against the 1408 specification for ``.desktop`` files. 1409 1410- ``dev-deps:`` Checks that all packages except ``-dev`` or 1411 ``-staticdev`` packages do not depend on ``-dev`` packages, which 1412 would be a packaging bug. 1413 1414- ``dev-so:`` Checks that the ``.so`` symbolic links are in the 1415 ``-dev`` package and not in any of the other packages. In general, 1416 these symlinks are only useful for development purposes. Thus, the 1417 ``-dev`` package is the correct location for them. In very rare 1418 cases, such as dynamically loaded modules, these symlinks 1419 are needed instead in the main package. 1420 1421- ``empty-dirs:`` Checks that packages are not installing files to 1422 directories that are normally expected to be empty (such as ``/tmp``) 1423 The list of directories that are checked is specified by the 1424 :term:`QA_EMPTY_DIRS` variable. 1425 1426- ``file-rdeps:`` Checks that file-level dependencies identified by 1427 the OpenEmbedded build system at packaging time are satisfied. For 1428 example, a shell script might start with the line ``#!/bin/bash``. 1429 This line would translate to a file dependency on ``/bin/bash``. Of 1430 the three package managers that the OpenEmbedded build system 1431 supports, only RPM directly handles file-level dependencies, 1432 resolving them automatically to packages providing the files. 1433 However, the lack of that functionality in the other two package 1434 managers does not mean the dependencies do not still need resolving. 1435 This QA check attempts to ensure that explicitly declared 1436 :term:`RDEPENDS` exist to handle any file-level 1437 dependency detected in packaged files. 1438 1439- ``files-invalid:`` Checks for :term:`FILES` variable 1440 values that contain "//", which is invalid. 1441 1442- ``host-user-contaminated:`` Checks that no package produced by the 1443 recipe contains any files outside of ``/home`` with a user or group 1444 ID that matches the user running BitBake. A match usually indicates 1445 that the files are being installed with an incorrect UID/GID, since 1446 target IDs are independent from host IDs. For additional information, 1447 see the section describing the 1448 :ref:`ref-tasks-install` task. 1449 1450- ``incompatible-license:`` Report when packages are excluded from 1451 being created due to being marked with a license that is in 1452 :term:`INCOMPATIBLE_LICENSE`. 1453 1454- ``install-host-path:`` Checks the 1455 :ref:`ref-tasks-install` log for indications that 1456 paths to locations on the build host were used. Using such paths 1457 might result in host contamination of the build output. 1458 1459- ``installed-vs-shipped:`` Reports when files have been installed 1460 within :ref:`ref-tasks-install` but have not been included in any package by 1461 way of the :term:`FILES` variable. Files that do not 1462 appear in any package cannot be present in an image later on in the 1463 build process. Ideally, all installed files should be packaged or not 1464 installed at all. These files can be deleted at the end of 1465 :ref:`ref-tasks-install` if the files are not needed in any package. 1466 1467- ``invalid-chars:`` Checks that the recipe metadata variables 1468 :term:`DESCRIPTION`, 1469 :term:`SUMMARY`, :term:`LICENSE`, and 1470 :term:`SECTION` do not contain non-UTF-8 characters. 1471 Some package managers do not support such characters. 1472 1473- ``invalid-packageconfig:`` Checks that no undefined features are 1474 being added to :term:`PACKAGECONFIG`. For 1475 example, any name "foo" for which the following form does not exist:: 1476 1477 PACKAGECONFIG[foo] = "..." 1478 1479- ``la:`` Checks ``.la`` files for any :term:`TMPDIR` paths. Any ``.la`` 1480 file containing these paths is incorrect since ``libtool`` adds the 1481 correct sysroot prefix when using the files automatically itself. 1482 1483- ``ldflags:`` Ensures that the binaries were linked with the 1484 :term:`LDFLAGS` options provided by the build system. 1485 If this test fails, check that the :term:`LDFLAGS` variable is being 1486 passed to the linker command. 1487 1488- ``libdir:`` Checks for libraries being installed into incorrect 1489 (possibly hardcoded) installation paths. For example, this test will 1490 catch recipes that install ``/lib/bar.so`` when ``${base_libdir}`` is 1491 "lib32". Another example is when recipes install 1492 ``/usr/lib64/foo.so`` when ``${libdir}`` is "/usr/lib". 1493 1494- ``libexec:`` Checks if a package contains files in 1495 ``/usr/libexec``. This check is not performed if the ``libexecdir`` 1496 variable has been set explicitly to ``/usr/libexec``. 1497 1498- ``mime:`` Check that if a package contains mime type files (``.xml`` 1499 files in ``${datadir}/mime/packages``) that the recipe also inherits 1500 the :ref:`ref-classes-mime` class in order to ensure that these get 1501 properly installed. 1502 1503- ``mime-xdg:`` Checks that if a package contains a .desktop file with a 1504 'MimeType' key present, that the recipe inherits the 1505 :ref:`ref-classes-mime-xdg` class that is required in order for that 1506 to be activated. 1507 1508- ``missing-update-alternatives:`` Check that if a recipe sets the 1509 :term:`ALTERNATIVE` variable that the recipe also inherits 1510 :ref:`ref-classes-update-alternatives` such that the alternative will 1511 be correctly set up. 1512 1513- ``packages-list:`` Checks for the same package being listed 1514 multiple times through the :term:`PACKAGES` variable 1515 value. Installing the package in this manner can cause errors during 1516 packaging. 1517 1518- ``patch-fuzz:`` Checks for fuzz in patch files that may allow 1519 them to apply incorrectly if the underlying code changes. 1520 1521- ``patch-status:`` Checks that the ``Upstream-Status`` is specified and valid 1522 in the headers of patches for recipes. 1523 1524- ``pep517-backend:`` checks that a recipe inheriting 1525 :ref:`ref-classes-setuptools3` has a PEP517-compliant backend. 1526 1527- ``perllocalpod:`` Checks for ``perllocal.pod`` being erroneously 1528 installed and packaged by a recipe. 1529 1530- ``perm-config:`` Reports lines in ``fs-perms.txt`` that have an 1531 invalid format. 1532 1533- ``perm-line:`` Reports lines in ``fs-perms.txt`` that have an 1534 invalid format. 1535 1536- ``perm-link:`` Reports lines in ``fs-perms.txt`` that specify 1537 'link' where the specified target already exists. 1538 1539- ``perms:`` Currently, this check is unused but reserved. 1540 1541- ``pkgconfig:`` Checks ``.pc`` files for any 1542 :term:`TMPDIR`/:term:`WORKDIR` paths. 1543 Any ``.pc`` file containing these paths is incorrect since 1544 ``pkg-config`` itself adds the correct sysroot prefix when the files 1545 are accessed. 1546 1547- ``pkgname:`` Checks that all packages in 1548 :term:`PACKAGES` have names that do not contain 1549 invalid characters (i.e. characters other than 0-9, a-z, ., +, and 1550 -). 1551 1552- ``pkgv-undefined:`` Checks to see if the :term:`PKGV` variable is 1553 undefined during :ref:`ref-tasks-package`. 1554 1555- ``pkgvarcheck:`` Checks through the variables 1556 :term:`RDEPENDS`, 1557 :term:`RRECOMMENDS`, 1558 :term:`RSUGGESTS`, 1559 :term:`RCONFLICTS`, 1560 :term:`RPROVIDES`, 1561 :term:`RREPLACES`, :term:`FILES`, 1562 :term:`ALLOW_EMPTY`, ``pkg_preinst``, 1563 ``pkg_postinst``, ``pkg_prerm`` and ``pkg_postrm``, and reports if 1564 there are variable sets that are not package-specific. Using these 1565 variables without a package suffix is bad practice, and might 1566 unnecessarily complicate dependencies of other packages within the 1567 same recipe or have other unintended consequences. 1568 1569- ``pn-overrides:`` Checks that a recipe does not have a name 1570 (:term:`PN`) value that appears in 1571 :term:`OVERRIDES`. If a recipe is named such that 1572 its :term:`PN` value matches something already in :term:`OVERRIDES` (e.g. 1573 :term:`PN` happens to be the same as :term:`MACHINE` or 1574 :term:`DISTRO`), it can have unexpected consequences. 1575 For example, assignments such as ``FILES:${PN} = "xyz"`` effectively 1576 turn into ``FILES = "xyz"``. 1577 1578- ``rpaths:`` Checks for rpaths in the binaries that contain build 1579 system paths such as :term:`TMPDIR`. If this test fails, bad ``-rpath`` 1580 options are being passed to the linker commands and your binaries 1581 have potential security issues. 1582 1583- ``shebang-size:`` Check that the shebang line (``#!`` in the first line) 1584 in a packaged script is not longer than 128 characters, which can cause 1585 an error at runtime depending on the operating system. 1586 1587- ``split-strip:`` Reports that splitting or stripping debug symbols 1588 from binaries has failed. 1589 1590- ``staticdev:`` Checks for static library files (``*.a``) in 1591 non-``staticdev`` packages. 1592 1593- ``src-uri-bad:`` Checks that the :term:`SRC_URI` value set by a recipe 1594 does not contain a reference to ``${PN}`` (instead of the correct 1595 ``${BPN}``) nor refers to unstable Github archive tarballs. 1596 1597- ``symlink-to-sysroot:`` Checks for symlinks in packages that point 1598 into :term:`TMPDIR` on the host. Such symlinks will 1599 work on the host, but are clearly invalid when running on the target. 1600 1601- ``textrel:`` Checks for ELF binaries that contain relocations in 1602 their ``.text`` sections, which can result in a performance impact at 1603 runtime. See the explanation for the ``ELF binary`` message in 1604 ":doc:`/ref-manual/qa-checks`" for more information regarding runtime performance 1605 issues. 1606 1607- ``unhandled-features-check:`` check that if one of the variables that 1608 the :ref:`ref-classes-features_check` class supports (e.g. 1609 :term:`REQUIRED_DISTRO_FEATURES`) is set by a recipe, then the recipe 1610 also inherits :ref:`ref-classes-features_check` in order for the 1611 requirement to actually work. 1612 1613- ``unimplemented-ptest:`` Checks that ptests are implemented for upstream 1614 tests. 1615 1616- ``unlisted-pkg-lics:`` Checks that all declared licenses applying 1617 for a package are also declared on the recipe level (i.e. any license 1618 in ``LICENSE:*`` should appear in :term:`LICENSE`). 1619 1620- ``useless-rpaths:`` Checks for dynamic library load paths (rpaths) 1621 in the binaries that by default on a standard system are searched by 1622 the linker (e.g. ``/lib`` and ``/usr/lib``). While these paths will 1623 not cause any breakage, they do waste space and are unnecessary. 1624 1625- ``usrmerge:`` If ``usrmerge`` is in :term:`DISTRO_FEATURES`, this 1626 check will ensure that no package installs files to root (``/bin``, 1627 ``/sbin``, ``/lib``, ``/lib64``) directories. 1628 1629- ``var-undefined:`` Reports when variables fundamental to packaging 1630 (i.e. :term:`WORKDIR`, 1631 :term:`DEPLOY_DIR`, :term:`D`, 1632 :term:`PN`, and :term:`PKGD`) are undefined 1633 during :ref:`ref-tasks-package`. 1634 1635- ``version-going-backwards:`` If the :ref:`ref-classes-buildhistory` 1636 class is enabled, reports when a package being written out has a lower 1637 version than the previously written package under the same name. If 1638 you are placing output packages into a feed and upgrading packages on 1639 a target system using that feed, the version of a package going 1640 backwards can result in the target system not correctly upgrading to 1641 the "new" version of the package. 1642 1643 .. note:: 1644 1645 This is only relevant when you are using runtime package management 1646 on your target system. 1647 1648- ``virtual-slash:`` Checks to see if ``virtual/`` is being used in 1649 :term:`RDEPENDS` or :term:`RPROVIDES`, which is not good practice --- 1650 ``virtual/`` is a convention intended for use in the build context 1651 (i.e. :term:`PROVIDES` and :term:`DEPENDS`) rather than the runtime 1652 context. 1653 1654- ``xorg-driver-abi:`` Checks that all packages containing Xorg 1655 drivers have ABI dependencies. The ``xserver-xorg`` recipe provides 1656 driver ABI names. All drivers should depend on the ABI versions that 1657 they have been built against. Driver recipes that include 1658 ``xorg-driver-input.inc`` or ``xorg-driver-video.inc`` will 1659 automatically get these versions. Consequently, you should only need 1660 to explicitly add dependencies to binary driver recipes. 1661 1662.. _ref-classes-kernel: 1663 1664``kernel`` 1665========== 1666 1667The :ref:`ref-classes-kernel` class handles building Linux kernels. The class contains 1668code to build all kernel trees. All needed headers are staged into the 1669:term:`STAGING_KERNEL_DIR` directory to allow out-of-tree module builds 1670using the :ref:`ref-classes-module` class. 1671 1672If a file named ``defconfig`` is listed in :term:`SRC_URI`, then by default 1673:ref:`ref-tasks-configure` copies it as ``.config`` in the build directory, 1674so it is automatically used as the kernel configuration for the build. This 1675copy is not performed in case ``.config`` already exists there: this allows 1676recipes to produce a configuration by other means in 1677``do_configure:prepend``. 1678 1679Each built kernel module is packaged separately and inter-module 1680dependencies are created by parsing the ``modinfo`` output. If all modules 1681are required, then installing the ``kernel-modules`` package installs all 1682packages with modules and various other kernel packages such as 1683``kernel-vmlinux``. 1684 1685The :ref:`ref-classes-kernel` class contains logic that allows you to embed an initial 1686RAM filesystem (:term:`Initramfs`) image when you build the kernel image. For 1687information on how to build an :term:`Initramfs`, see the 1688":ref:`dev-manual/building:building an initial ram filesystem (Initramfs) image`" section in 1689the Yocto Project Development Tasks Manual. 1690 1691Various other classes are used by the :ref:`ref-classes-kernel` and :ref:`ref-classes-module` classes 1692internally including the :ref:`ref-classes-kernel-arch`, :ref:`ref-classes-module-base`, and 1693:ref:`ref-classes-linux-kernel-base` classes. 1694 1695.. _ref-classes-kernel-arch: 1696 1697``kernel-arch`` 1698=============== 1699 1700The :ref:`ref-classes-kernel-arch` class sets the ``ARCH`` environment variable for 1701Linux kernel compilation (including modules). 1702 1703.. _ref-classes-kernel-devicetree: 1704 1705``kernel-devicetree`` 1706===================== 1707 1708The :ref:`ref-classes-kernel-devicetree` class, which is inherited by the 1709:ref:`ref-classes-kernel` class, supports device tree generation. 1710 1711Its behavior is mainly controlled by the following variables: 1712 1713- :term:`KERNEL_DEVICETREE_BUNDLE`: whether to bundle the kernel and device tree 1714- :term:`KERNEL_DTBDEST`: directory where to install DTB files 1715- :term:`KERNEL_DTBVENDORED`: whether to keep vendor subdirectories 1716- :term:`KERNEL_DTC_FLAGS`: flags for ``dtc``, the Device Tree Compiler 1717- :term:`KERNEL_PACKAGE_NAME`: base name of the kernel packages 1718 1719.. _ref-classes-kernel-fitimage: 1720 1721``kernel-fitimage`` 1722=================== 1723 1724The :ref:`ref-classes-kernel-fitimage` class provides support to pack a kernel image, 1725device trees, a U-boot script, an :term:`Initramfs` bundle and a RAM disk 1726into a single FIT image. In theory, a FIT image can support any number 1727of kernels, U-boot scripts, :term:`Initramfs` bundles, RAM disks and device-trees. 1728However, :ref:`ref-classes-kernel-fitimage` currently only supports 1729limited usecases: just one kernel image, an optional U-boot script, 1730an optional :term:`Initramfs` bundle, an optional RAM disk, and any number of 1731device trees. 1732 1733To create a FIT image, it is required that :term:`KERNEL_CLASSES` 1734is set to include ":ref:`ref-classes-kernel-fitimage`" and one of :term:`KERNEL_IMAGETYPE`, 1735:term:`KERNEL_ALT_IMAGETYPE` or :term:`KERNEL_IMAGETYPES` to include "fitImage". 1736 1737The options for the device tree compiler passed to ``mkimage -D`` 1738when creating the FIT image are specified using the 1739:term:`UBOOT_MKIMAGE_DTCOPTS` variable. 1740 1741Only a single kernel can be added to the FIT image created by 1742:ref:`ref-classes-kernel-fitimage` and the kernel image in FIT is mandatory. The 1743address where the kernel image is to be loaded by U-Boot is 1744specified by :term:`UBOOT_LOADADDRESS` and the entrypoint by 1745:term:`UBOOT_ENTRYPOINT`. Setting :term:`FIT_ADDRESS_CELLS` to "2" 1746is necessary if such addresses are 64 bit ones. 1747 1748Multiple device trees can be added to the FIT image created by 1749:ref:`ref-classes-kernel-fitimage` and the device tree is optional. 1750The address where the device tree is to be loaded by U-Boot is 1751specified by :term:`UBOOT_DTBO_LOADADDRESS` for device tree overlays 1752and by :term:`UBOOT_DTB_LOADADDRESS` for device tree binaries. 1753 1754Only a single RAM disk can be added to the FIT image created by 1755:ref:`ref-classes-kernel-fitimage` and the RAM disk in FIT is optional. 1756The address where the RAM disk image is to be loaded by U-Boot 1757is specified by :term:`UBOOT_RD_LOADADDRESS` and the entrypoint by 1758:term:`UBOOT_RD_ENTRYPOINT`. The ramdisk is added to the FIT image when 1759:term:`INITRAMFS_IMAGE` is specified and requires that :term:`INITRAMFS_IMAGE_BUNDLE` 1760is not set to 1. 1761 1762Only a single :term:`Initramfs` bundle can be added to the FIT image created by 1763:ref:`ref-classes-kernel-fitimage` and the :term:`Initramfs` bundle in FIT is optional. 1764In case of :term:`Initramfs`, the kernel is configured to be bundled with the root filesystem 1765in the same binary (example: zImage-initramfs-:term:`MACHINE`.bin). 1766When the kernel is copied to RAM and executed, it unpacks the :term:`Initramfs` root filesystem. 1767The :term:`Initramfs` bundle can be enabled when :term:`INITRAMFS_IMAGE` 1768is specified and requires that :term:`INITRAMFS_IMAGE_BUNDLE` is set to 1. 1769The address where the :term:`Initramfs` bundle is to be loaded by U-boot is specified 1770by :term:`UBOOT_LOADADDRESS` and the entrypoint by :term:`UBOOT_ENTRYPOINT`. 1771 1772Only a single U-boot boot script can be added to the FIT image created by 1773:ref:`ref-classes-kernel-fitimage` and the boot script is optional. 1774The boot script is specified in the ITS file as a text file containing 1775U-boot commands. When using a boot script the user should configure the 1776U-boot :ref:`ref-tasks-install` task to copy the script to sysroot. 1777So the script can be included in the FIT image by the :ref:`ref-classes-kernel-fitimage` 1778class. At run-time, U-boot CONFIG_BOOTCOMMAND define can be configured to 1779load the boot script from the FIT image and execute it. 1780 1781The FIT image generated by the :ref:`ref-classes-kernel-fitimage` class is signed when the 1782variables :term:`UBOOT_SIGN_ENABLE`, :term:`UBOOT_MKIMAGE_DTCOPTS`, 1783:term:`UBOOT_SIGN_KEYDIR` and :term:`UBOOT_SIGN_KEYNAME` are set 1784appropriately. The default values used for :term:`FIT_HASH_ALG` and 1785:term:`FIT_SIGN_ALG` in :ref:`ref-classes-kernel-fitimage` are "sha256" and 1786"rsa2048" respectively. The keys for signing the FIT image can be generated using 1787the :ref:`ref-classes-kernel-fitimage` class when both :term:`FIT_GENERATE_KEYS` and 1788:term:`UBOOT_SIGN_ENABLE` are set to "1". 1789 1790 1791.. _ref-classes-kernel-grub: 1792 1793``kernel-grub`` 1794=============== 1795 1796The :ref:`ref-classes-kernel-grub` class updates the boot area and the boot menu with 1797the kernel as the priority boot mechanism while installing a RPM to 1798update the kernel on a deployed target. 1799 1800.. _ref-classes-kernel-module-split: 1801 1802``kernel-module-split`` 1803======================= 1804 1805The :ref:`ref-classes-kernel-module-split` class provides common functionality for 1806splitting Linux kernel modules into separate packages. 1807 1808.. _ref-classes-kernel-uboot: 1809 1810``kernel-uboot`` 1811================ 1812 1813The :ref:`ref-classes-kernel-uboot` class provides support for building from 1814vmlinux-style kernel sources. 1815 1816.. _ref-classes-kernel-uimage: 1817 1818``kernel-uimage`` 1819================= 1820 1821The :ref:`ref-classes-kernel-uimage` class provides support to pack uImage. 1822 1823.. _ref-classes-kernel-yocto: 1824 1825``kernel-yocto`` 1826================ 1827 1828The :ref:`ref-classes-kernel-yocto` class provides common functionality for building 1829from linux-yocto style kernel source repositories. 1830 1831.. _ref-classes-kernelsrc: 1832 1833``kernelsrc`` 1834============= 1835 1836The :ref:`ref-classes-kernelsrc` class sets the Linux kernel source and version. 1837 1838.. _ref-classes-lib_package: 1839 1840``lib_package`` 1841=============== 1842 1843The :ref:`ref-classes-lib_package` class supports recipes that build libraries and 1844produce executable binaries, where those binaries should not be 1845installed by default along with the library. Instead, the binaries are 1846added to a separate ``${``\ :term:`PN`\ ``}-bin`` package to 1847make their installation optional. 1848 1849.. _ref-classes-libc*: 1850 1851``libc*`` 1852========= 1853 1854The :ref:`ref-classes-libc*` classes support recipes that build packages with ``libc``: 1855 1856- The :ref:`libc-common <ref-classes-libc*>` class provides common support for building with 1857 ``libc``. 1858 1859- The :ref:`libc-package <ref-classes-libc*>` class supports packaging up ``glibc`` and 1860 ``eglibc``. 1861 1862.. _ref-classes-license: 1863 1864``license`` 1865=========== 1866 1867The :ref:`ref-classes-license` class provides license manifest creation and license 1868exclusion. This class is enabled by default using the default value for 1869the :term:`INHERIT_DISTRO` variable. 1870 1871.. _ref-classes-linux-kernel-base: 1872 1873``linux-kernel-base`` 1874===================== 1875 1876The :ref:`ref-classes-linux-kernel-base` class provides common functionality for 1877recipes that build out of the Linux kernel source tree. These builds 1878goes beyond the kernel itself. For example, the Perf recipe also 1879inherits this class. 1880 1881.. _ref-classes-linuxloader: 1882 1883``linuxloader`` 1884=============== 1885 1886Provides the function ``linuxloader()``, which gives the value of the 1887dynamic loader/linker provided on the platform. This value is used by a 1888number of other classes. 1889 1890.. _ref-classes-logging: 1891 1892``logging`` 1893=========== 1894 1895The :ref:`ref-classes-logging` class provides the standard shell functions used to log 1896messages for various BitBake severity levels (i.e. ``bbplain``, 1897``bbnote``, ``bbwarn``, ``bberror``, ``bbfatal``, and ``bbdebug``). 1898 1899This class is enabled by default since it is inherited by the :ref:`ref-classes-base` 1900class. 1901 1902.. _ref-classes-meson: 1903 1904``meson`` 1905========= 1906 1907The :ref:`ref-classes-meson` class allows to create recipes that build software 1908using the `Meson <https://mesonbuild.com/>`__ build system. You can use the 1909:term:`MESON_BUILDTYPE`, :term:`MESON_TARGET` and :term:`EXTRA_OEMESON` 1910variables to specify additional configuration options to be passed using the 1911``meson`` command line. 1912 1913.. _ref-classes-metadata_scm: 1914 1915``metadata_scm`` 1916================ 1917 1918The :ref:`ref-classes-metadata_scm` class provides functionality for querying the 1919branch and revision of a Source Code Manager (SCM) repository. 1920 1921The :ref:`ref-classes-base` class uses this class to print the revisions of 1922each layer before starting every build. The :ref:`ref-classes-metadata_scm` 1923class is enabled by default because it is inherited by the 1924:ref:`ref-classes-base` class. 1925 1926.. _ref-classes-mime: 1927 1928``mime`` 1929======== 1930 1931The :ref:`ref-classes-mime` class generates the proper post-install and post-remove 1932(postinst/postrm) scriptlets for packages that install MIME type files. 1933These scriptlets call ``update-mime-database`` to add the MIME types to 1934the shared database. 1935 1936.. _ref-classes-mime-xdg: 1937 1938``mime-xdg`` 1939============ 1940 1941The :ref:`ref-classes-mime-xdg` class generates the proper 1942post-install and post-remove (postinst/postrm) scriptlets for packages 1943that install ``.desktop`` files containing ``MimeType`` entries. 1944These scriptlets call ``update-desktop-database`` to add the MIME types 1945to the database of MIME types handled by desktop files. 1946 1947Thanks to this class, when users open a file through a file browser 1948on recently created images, they don't have to choose the application 1949to open the file from the pool of all known applications, even the ones 1950that cannot open the selected file. 1951 1952If you have recipes installing their ``.desktop`` files as absolute 1953symbolic links, the detection of such files cannot be done by the current 1954implementation of this class. In this case, you have to add the corresponding 1955package names to the :term:`MIME_XDG_PACKAGES` variable. 1956 1957.. _ref-classes-mirrors: 1958 1959``mirrors`` 1960=========== 1961 1962The :ref:`ref-classes-mirrors` class sets up some standard 1963:term:`MIRRORS` entries for source code mirrors. These 1964mirrors provide a fall-back path in case the upstream source specified 1965in :term:`SRC_URI` within recipes is unavailable. 1966 1967This class is enabled by default since it is inherited by the 1968:ref:`ref-classes-base` class. 1969 1970.. _ref-classes-module: 1971 1972``module`` 1973========== 1974 1975The :ref:`ref-classes-module` class provides support for building out-of-tree Linux 1976kernel modules. The class inherits the :ref:`ref-classes-module-base` and 1977:ref:`ref-classes-kernel-module-split` classes, and implements the 1978:ref:`ref-tasks-compile` and :ref:`ref-tasks-install` tasks. The class provides 1979everything needed to build and package a kernel module. 1980 1981For general information on out-of-tree Linux kernel modules, see the 1982":ref:`kernel-dev/common:incorporating out-of-tree modules`" 1983section in the Yocto Project Linux Kernel Development Manual. 1984 1985.. _ref-classes-module-base: 1986 1987``module-base`` 1988=============== 1989 1990The :ref:`ref-classes-module-base` class provides the base functionality for 1991building Linux kernel modules. Typically, a recipe that builds software that 1992includes one or more kernel modules and has its own means of building the module 1993inherits this class as opposed to inheriting the :ref:`ref-classes-module` 1994class. 1995 1996.. _ref-classes-multilib*: 1997 1998``multilib*`` 1999============= 2000 2001The :ref:`ref-classes-multilib*` classes provide support for building libraries with 2002different target optimizations or target architectures and installing 2003them side-by-side in the same image. 2004 2005For more information on using the Multilib feature, see the 2006":ref:`dev-manual/libraries:combining multiple versions of library files into one image`" 2007section in the Yocto Project Development Tasks Manual. 2008 2009.. _ref-classes-native: 2010 2011``native`` 2012========== 2013 2014The :ref:`ref-classes-native` class provides common functionality for recipes that 2015build tools to run on the :term:`Build Host` (i.e. tools that use the compiler 2016or other tools from the build host). 2017 2018You can create a recipe that builds tools that run natively on the host 2019a couple different ways: 2020 2021- Create a ``myrecipe-native.bb`` recipe that inherits the :ref:`ref-classes-native` 2022 class. If you use this method, you must order the inherit statement 2023 in the recipe after all other inherit statements so that the 2024 :ref:`ref-classes-native` class is inherited last. 2025 2026 .. note:: 2027 2028 When creating a recipe this way, the recipe name must follow this 2029 naming convention:: 2030 2031 myrecipe-native.bb 2032 2033 2034 Not using this naming convention can lead to subtle problems 2035 caused by existing code that depends on that naming convention. 2036 2037- Create or modify a target recipe that contains the following:: 2038 2039 BBCLASSEXTEND = "native" 2040 2041 Inside the 2042 recipe, use ``:class-native`` and ``:class-target`` overrides to 2043 specify any functionality specific to the respective native or target 2044 case. 2045 2046Although applied differently, the :ref:`ref-classes-native` class is used with both 2047methods. The advantage of the second method is that you do not need to 2048have two separate recipes (assuming you need both) for native and 2049target. All common parts of the recipe are automatically shared. 2050 2051.. _ref-classes-nativesdk: 2052 2053``nativesdk`` 2054============= 2055 2056The :ref:`ref-classes-nativesdk` class provides common functionality for recipes that 2057wish to build tools to run as part of an SDK (i.e. tools that run on 2058:term:`SDKMACHINE`). 2059 2060You can create a recipe that builds tools that run on the SDK machine a 2061couple different ways: 2062 2063- Create a ``nativesdk-myrecipe.bb`` recipe that inherits the 2064 :ref:`ref-classes-nativesdk` class. If you use this method, you must order the 2065 inherit statement in the recipe after all other inherit statements so 2066 that the :ref:`ref-classes-nativesdk` class is inherited last. 2067 2068- Create a :ref:`ref-classes-nativesdk` variant of any recipe by adding the following:: 2069 2070 BBCLASSEXTEND = "nativesdk" 2071 2072 Inside the 2073 recipe, use ``:class-nativesdk`` and ``:class-target`` overrides to 2074 specify any functionality specific to the respective SDK machine or 2075 target case. 2076 2077.. note:: 2078 2079 When creating a recipe, you must follow this naming convention:: 2080 2081 nativesdk-myrecipe.bb 2082 2083 2084 Not doing so can lead to subtle problems because there is code that 2085 depends on the naming convention. 2086 2087Although applied differently, the :ref:`ref-classes-nativesdk` class is used with both 2088methods. The advantage of the second method is that you do not need to 2089have two separate recipes (assuming you need both) for the SDK machine 2090and the target. All common parts of the recipe are automatically shared. 2091 2092.. _ref-classes-nopackages: 2093 2094``nopackages`` 2095============== 2096 2097Disables packaging tasks for those recipes and classes where packaging 2098is not needed. 2099 2100.. _ref-classes-nospdx: 2101 2102``nospdx`` 2103========== 2104 2105The :ref:`ref-classes-nospdx` allows a recipe to opt out of SPDX 2106generation provided by :ref:`ref-classes-create-spdx`. 2107 2108.. _ref-classes-npm: 2109 2110``npm`` 2111======= 2112 2113Provides support for building Node.js software fetched using the 2114:wikipedia:`node package manager (NPM) <Npm_(software)>`. 2115 2116.. note:: 2117 2118 Currently, recipes inheriting this class must use the ``npm://`` 2119 fetcher to have dependencies fetched and packaged automatically. 2120 2121For information on how to create NPM packages, see the 2122":ref:`dev-manual/packages:creating node package manager (npm) packages`" 2123section in the Yocto Project Development Tasks Manual. 2124 2125.. _ref-classes-oelint: 2126 2127``oelint`` 2128========== 2129 2130The :ref:`ref-classes-oelint` class is an obsolete lint checking tool available in 2131``meta/classes`` in the :term:`Source Directory`. 2132 2133There are some classes that could be generally useful in OE-Core but 2134are never actually used within OE-Core itself. The :ref:`ref-classes-oelint` class is 2135one such example. However, being aware of this class can reduce the 2136proliferation of different versions of similar classes across multiple 2137layers. 2138 2139.. _ref-classes-overlayfs: 2140 2141``overlayfs`` 2142============= 2143 2144It's often desired in Embedded System design to have a read-only root filesystem. 2145But a lot of different applications might want to have read-write access to 2146some parts of a filesystem. It can be especially useful when your update mechanism 2147overwrites the whole root filesystem, but you may want your application data to be preserved 2148between updates. The :ref:`ref-classes-overlayfs` class provides a way 2149to achieve that by means of ``overlayfs`` and at the same time keeping the base 2150root filesystem read-only. 2151 2152To use this class, set a mount point for a partition ``overlayfs`` is going to use as upper 2153layer in your machine configuration. The underlying file system can be anything that 2154is supported by ``overlayfs``. This has to be done in your machine configuration:: 2155 2156 OVERLAYFS_MOUNT_POINT[data] = "/data" 2157 2158.. note:: 2159 2160 * QA checks fail to catch file existence if you redefine this variable in your recipe! 2161 * Only the existence of the systemd mount unit file is checked, not its contents. 2162 * To get more details on ``overlayfs``, its internals and supported operations, please refer 2163 to the official documentation of the `Linux kernel <https://www.kernel.org/doc/html/latest/filesystems/overlayfs.html>`__. 2164 2165The class assumes you have a ``data.mount`` systemd unit defined elsewhere in your BSP 2166(e.g. in ``systemd-machine-units`` recipe) and it's installed into the image. 2167 2168Then you can specify writable directories on a recipe basis (e.g. in my-application.bb):: 2169 2170 OVERLAYFS_WRITABLE_PATHS[data] = "/usr/share/my-custom-application" 2171 2172To support several mount points you can use a different variable flag. Assuming we 2173want to have a writable location on the file system, but do not need that the data 2174survives a reboot, then we could have a ``mnt-overlay.mount`` unit for a ``tmpfs`` 2175file system. 2176 2177In your machine configuration:: 2178 2179 OVERLAYFS_MOUNT_POINT[mnt-overlay] = "/mnt/overlay" 2180 2181and then in your recipe:: 2182 2183 OVERLAYFS_WRITABLE_PATHS[mnt-overlay] = "/usr/share/another-application" 2184 2185On a practical note, your application recipe might require multiple 2186overlays to be mounted before running to avoid writing to the underlying 2187file system (which can be forbidden in case of read-only file system) 2188To achieve that :ref:`ref-classes-overlayfs` provides a ``systemd`` 2189helper service for mounting overlays. This helper service is named 2190``${PN}-overlays.service`` and can be depended on in your application recipe 2191(named ``application`` in the following example) ``systemd`` unit by adding 2192to the unit the following:: 2193 2194 [Unit] 2195 After=application-overlays.service 2196 Requires=application-overlays.service 2197 2198.. note:: 2199 2200 The class does not support the ``/etc`` directory itself, because ``systemd`` depends on it. 2201 In order to get ``/etc`` in overlayfs, see :ref:`ref-classes-overlayfs-etc`. 2202 2203.. _ref-classes-overlayfs-etc: 2204 2205``overlayfs-etc`` 2206================= 2207 2208In order to have the ``/etc`` directory in overlayfs a special handling at early 2209boot stage is required. The idea is to supply a custom init script that mounts 2210``/etc`` before launching the actual init program, because the latter already 2211requires ``/etc`` to be mounted. 2212 2213Example usage in image recipe:: 2214 2215 IMAGE_FEATURES += "overlayfs-etc" 2216 2217.. note:: 2218 2219 This class must not be inherited directly. Use :term:`IMAGE_FEATURES` or :term:`EXTRA_IMAGE_FEATURES` 2220 2221Your machine configuration should define at least the device, mount point, and file system type 2222you are going to use for ``overlayfs``:: 2223 2224 OVERLAYFS_ETC_MOUNT_POINT = "/data" 2225 OVERLAYFS_ETC_DEVICE = "/dev/mmcblk0p2" 2226 OVERLAYFS_ETC_FSTYPE ?= "ext4" 2227 2228To control more mount options you should consider setting mount options 2229(``defaults`` is used by default):: 2230 2231 OVERLAYFS_ETC_MOUNT_OPTIONS = "wsync" 2232 2233The class provides two options for ``/sbin/init`` generation: 2234 2235- The default option is to rename the original ``/sbin/init`` to ``/sbin/init.orig`` 2236 and place the generated init under original name, i.e. ``/sbin/init``. It has an advantage 2237 that you won't need to change any kernel parameters in order to make it work, 2238 but it poses a restriction that package-management can't be used, because updating 2239 the init manager would remove the generated script. 2240 2241- If you wish to keep original init as is, you can set:: 2242 2243 OVERLAYFS_ETC_USE_ORIG_INIT_NAME = "0" 2244 2245 Then the generated init will be named ``/sbin/preinit`` and you would need to extend your 2246 kernel parameters manually in your bootloader configuration. 2247 2248.. _ref-classes-own-mirrors: 2249 2250``own-mirrors`` 2251=============== 2252 2253The :ref:`ref-classes-own-mirrors` class makes it easier to set up your own 2254:term:`PREMIRRORS` from which to first fetch source 2255before attempting to fetch it from the upstream specified in 2256:term:`SRC_URI` within each recipe. 2257 2258To use this class, inherit it globally and specify 2259:term:`SOURCE_MIRROR_URL`. Here is an example:: 2260 2261 INHERIT += "own-mirrors" 2262 SOURCE_MIRROR_URL = "http://example.com/my-source-mirror" 2263 2264You can specify only a single URL 2265in :term:`SOURCE_MIRROR_URL`. 2266 2267.. _ref-classes-package: 2268 2269``package`` 2270=========== 2271 2272The :ref:`ref-classes-package` class supports generating packages from a build's 2273output. The core generic functionality is in ``package.bbclass``. The 2274code specific to particular package types resides in these 2275package-specific classes: :ref:`ref-classes-package_deb`, 2276:ref:`ref-classes-package_rpm`, :ref:`ref-classes-package_ipk`. 2277 2278You can control the list of resulting package formats by using the 2279:term:`PACKAGE_CLASSES` variable defined in your ``conf/local.conf`` 2280configuration file, which is located in the :term:`Build Directory`. 2281When defining the variable, you can specify one or more package types. 2282Since images are generated from packages, a packaging class is needed 2283to enable image generation. The first class listed in this variable is 2284used for image generation. 2285 2286If you take the optional step to set up a repository (package feed) on 2287the development host that can be used by DNF, you can install packages 2288from the feed while you are running the image on the target (i.e. 2289runtime installation of packages). For more information, see the 2290":ref:`dev-manual/packages:using runtime package management`" 2291section in the Yocto Project Development Tasks Manual. 2292 2293The package-specific class you choose can affect build-time performance 2294and has space ramifications. In general, building a package with IPK 2295takes about thirty percent less time as compared to using RPM to build 2296the same or similar package. This comparison takes into account a 2297complete build of the package with all dependencies previously built. 2298The reason for this discrepancy is because the RPM package manager 2299creates and processes more :term:`Metadata` than the IPK package 2300manager. Consequently, you might consider setting :term:`PACKAGE_CLASSES` to 2301":ref:`ref-classes-package_ipk`" if you are building smaller systems. 2302 2303Before making your package manager decision, however, you should 2304consider some further things about using RPM: 2305 2306- RPM starts to provide more abilities than IPK due to the fact that it 2307 processes more Metadata. For example, this information includes 2308 individual file types, file checksum generation and evaluation on 2309 install, sparse file support, conflict detection and resolution for 2310 Multilib systems, ACID style upgrade, and repackaging abilities for 2311 rollbacks. 2312 2313- For smaller systems, the extra space used for the Berkeley Database 2314 and the amount of metadata when using RPM can affect your ability to 2315 perform on-device upgrades. 2316 2317You can find additional information on the effects of the package class 2318at these two Yocto Project mailing list links: 2319 2320- :yocto_lists:`/pipermail/poky/2011-May/006362.html` 2321 2322- :yocto_lists:`/pipermail/poky/2011-May/006363.html` 2323 2324.. _ref-classes-package_deb: 2325 2326``package_deb`` 2327=============== 2328 2329The :ref:`ref-classes-package_deb` class provides support for creating packages that 2330use the Debian (i.e. ``.deb``) file format. The class ensures the 2331packages are written out in a ``.deb`` file format to the 2332``${``\ :term:`DEPLOY_DIR_DEB`\ ``}`` directory. 2333 2334This class inherits the :ref:`ref-classes-package` class and 2335is enabled through the :term:`PACKAGE_CLASSES` 2336variable in the ``local.conf`` file. 2337 2338.. _ref-classes-package_ipk: 2339 2340``package_ipk`` 2341=============== 2342 2343The :ref:`ref-classes-package_ipk` class provides support for creating packages that 2344use the IPK (i.e. ``.ipk``) file format. The class ensures the packages 2345are written out in a ``.ipk`` file format to the 2346``${``\ :term:`DEPLOY_DIR_IPK`\ ``}`` directory. 2347 2348This class inherits the :ref:`ref-classes-package` class and 2349is enabled through the :term:`PACKAGE_CLASSES` 2350variable in the ``local.conf`` file. 2351 2352.. _ref-classes-package_rpm: 2353 2354``package_rpm`` 2355=============== 2356 2357The :ref:`ref-classes-package_rpm` class provides support for creating packages that 2358use the RPM (i.e. ``.rpm``) file format. The class ensures the packages 2359are written out in a ``.rpm`` file format to the 2360``${``\ :term:`DEPLOY_DIR_RPM`\ ``}`` directory. 2361 2362This class inherits the :ref:`ref-classes-package` class and 2363is enabled through the :term:`PACKAGE_CLASSES` 2364variable in the ``local.conf`` file. 2365 2366.. _ref-classes-packagedata: 2367 2368``packagedata`` 2369=============== 2370 2371The :ref:`ref-classes-packagedata` class provides common functionality for reading 2372``pkgdata`` files found in :term:`PKGDATA_DIR`. These 2373files contain information about each output package produced by the 2374OpenEmbedded build system. 2375 2376This class is enabled by default because it is inherited by the 2377:ref:`ref-classes-package` class. 2378 2379.. _ref-classes-packagegroup: 2380 2381``packagegroup`` 2382================ 2383 2384The :ref:`ref-classes-packagegroup` class sets default values appropriate for package 2385group recipes (e.g. :term:`PACKAGES`, :term:`PACKAGE_ARCH`, :term:`ALLOW_EMPTY`, and 2386so forth). It is highly recommended that all package group recipes 2387inherit this class. 2388 2389For information on how to use this class, see the 2390":ref:`dev-manual/customizing-images:customizing images using custom package groups`" 2391section in the Yocto Project Development Tasks Manual. 2392 2393Previously, this class was called the ``task`` class. 2394 2395.. _ref-classes-patch: 2396 2397``patch`` 2398========= 2399 2400The :ref:`ref-classes-patch` class provides all functionality for applying patches 2401during the :ref:`ref-tasks-patch` task. 2402 2403This class is enabled by default because it is inherited by the 2404:ref:`ref-classes-base` class. 2405 2406.. _ref-classes-perlnative: 2407 2408``perlnative`` 2409============== 2410 2411When inherited by a recipe, the :ref:`ref-classes-perlnative` class supports using the 2412native version of Perl built by the build system rather than using the 2413version provided by the build host. 2414 2415.. _ref-classes-pypi: 2416 2417``pypi`` 2418======== 2419 2420The :ref:`ref-classes-pypi` class sets variables appropriately for recipes that build 2421Python modules from `PyPI <https://pypi.org/>`__, the Python Package Index. 2422By default it determines the PyPI package name based upon :term:`BPN` 2423(stripping the "python-" or "python3-" prefix off if present), however in 2424some cases you may need to set it manually in the recipe by setting 2425:term:`PYPI_PACKAGE`. 2426 2427Variables set by the :ref:`ref-classes-pypi` class include :term:`SRC_URI`, :term:`SECTION`, 2428:term:`HOMEPAGE`, :term:`UPSTREAM_CHECK_URI`, :term:`UPSTREAM_CHECK_REGEX` 2429and :term:`CVE_PRODUCT`. 2430 2431.. _ref-classes-python_flit_core: 2432 2433``python_flit_core`` 2434==================== 2435 2436The :ref:`ref-classes-python_flit_core` class enables building Python modules which declare 2437the `PEP-517 <https://www.python.org/dev/peps/pep-0517/>`__ compliant 2438``flit_core.buildapi`` ``build-backend`` in the ``[build-system]`` 2439section of ``pyproject.toml`` (See `PEP-518 <https://www.python.org/dev/peps/pep-0518/>`__). 2440 2441Python modules built with ``flit_core.buildapi`` are pure Python (no 2442``C`` or ``Rust`` extensions). 2443 2444Internally this uses the :ref:`ref-classes-python_pep517` class. 2445 2446.. _ref-classes-python_maturin: 2447 2448``python_maturin`` 2449================== 2450 2451The :ref:`ref-classes-python_maturin` class provides support for python-maturin, a replacement 2452for setuptools_rust and another "backend" for building Python Wheels. 2453 2454.. _ref-classes-python_mesonpy: 2455 2456``python_mesonpy`` 2457================== 2458 2459The :ref:`ref-classes-python_mesonpy` class enables building Python modules which use the 2460meson-python build system. 2461 2462Internally this uses the :ref:`ref-classes-python_pep517` class. 2463 2464.. _ref-classes-python_pep517: 2465 2466``python_pep517`` 2467================= 2468 2469The :ref:`ref-classes-python_pep517` class builds and installs a Python ``wheel`` binary 2470archive (see `PEP-517 <https://peps.python.org/pep-0517/>`__). 2471 2472Recipes wouldn't inherit this directly, instead typically another class will 2473inherit this and add the relevant native dependencies. 2474 2475Examples of classes which do this are :ref:`ref-classes-python_flit_core`, 2476:ref:`ref-classes-python_setuptools_build_meta`, and 2477:ref:`ref-classes-python_poetry_core`. 2478 2479.. _ref-classes-python_poetry_core: 2480 2481``python_poetry_core`` 2482====================== 2483 2484The :ref:`ref-classes-python_poetry_core` class enables building Python modules which use the 2485`Poetry Core <https://python-poetry.org>`__ build system. 2486 2487Internally this uses the :ref:`ref-classes-python_pep517` class. 2488 2489.. _ref-classes-python_pyo3: 2490 2491``python_pyo3`` 2492=============== 2493 2494The :ref:`ref-classes-python_pyo3` class helps make sure that Python extensions 2495written in Rust and built with `PyO3 <https://pyo3.rs/>`__, properly set up the 2496environment for cross compilation. 2497 2498This class is internal to the :ref:`ref-classes-python-setuptools3_rust` class 2499and is not meant to be used directly in recipes. 2500 2501.. _ref-classes-python-setuptools3_rust: 2502 2503``python-setuptools3_rust`` 2504=========================== 2505 2506The :ref:`ref-classes-python-setuptools3_rust` class enables building Python 2507extensions implemented in Rust with `PyO3 <https://pyo3.rs/>`__, which allows 2508to compile and distribute Python extensions written in Rust as easily 2509as if they were written in C. 2510 2511This class inherits the :ref:`ref-classes-setuptools3` and 2512:ref:`ref-classes-python_pyo3` classes. 2513 2514.. _ref-classes-pixbufcache: 2515 2516``pixbufcache`` 2517=============== 2518 2519The :ref:`ref-classes-pixbufcache` class generates the proper post-install and 2520post-remove (postinst/postrm) scriptlets for packages that install 2521pixbuf loaders, which are used with ``gdk-pixbuf``. These scriptlets 2522call ``update_pixbuf_cache`` to add the pixbuf loaders to the cache. 2523Since the cache files are architecture-specific, ``update_pixbuf_cache`` 2524is run using QEMU if the postinst scriptlets need to be run on the build 2525host during image creation. 2526 2527If the pixbuf loaders being installed are in packages other than the 2528recipe's main package, set 2529:term:`PIXBUF_PACKAGES` to specify the packages 2530containing the loaders. 2531 2532.. _ref-classes-pkgconfig: 2533 2534``pkgconfig`` 2535============= 2536 2537The :ref:`ref-classes-pkgconfig` class provides a standard way to get header and 2538library information by using ``pkg-config``. This class aims to smooth 2539integration of ``pkg-config`` into libraries that use it. 2540 2541During staging, BitBake installs ``pkg-config`` data into the 2542``sysroots/`` directory. By making use of sysroot functionality within 2543``pkg-config``, the :ref:`ref-classes-pkgconfig` class no longer has to manipulate the 2544files. 2545 2546.. _ref-classes-populate-sdk: 2547 2548``populate_sdk`` 2549================ 2550 2551The :ref:`ref-classes-populate-sdk` class provides support for SDK-only recipes. For 2552information on advantages gained when building a cross-development 2553toolchain using the :ref:`ref-tasks-populate_sdk` 2554task, see the ":ref:`sdk-manual/appendix-obtain:building an sdk installer`" 2555section in the Yocto Project Application Development and the Extensible 2556Software Development Kit (eSDK) manual. 2557 2558.. _ref-classes-populate-sdk-*: 2559 2560``populate_sdk_*`` 2561================== 2562 2563The :ref:`ref-classes-populate-sdk-*` classes support SDK creation and consist of the 2564following classes: 2565 2566- :ref:`populate_sdk_base <ref-classes-populate-sdk-*>`: The base class supporting SDK creation under 2567 all package managers (i.e. DEB, RPM, and opkg). 2568 2569- :ref:`populate_sdk_deb <ref-classes-populate-sdk-*>`: Supports creation of the SDK given the Debian 2570 package manager. 2571 2572- :ref:`populate_sdk_rpm <ref-classes-populate-sdk-*>`: Supports creation of the SDK given the RPM 2573 package manager. 2574 2575- :ref:`populate_sdk_ipk <ref-classes-populate-sdk-*>`: Supports creation of the SDK given the opkg 2576 (IPK format) package manager. 2577 2578- :ref:`populate_sdk_ext <ref-classes-populate-sdk-*>`: Supports extensible SDK creation under all 2579 package managers. 2580 2581The :ref:`populate_sdk_base <ref-classes-populate-sdk-*>` class inherits the appropriate 2582``populate_sdk_*`` (i.e. ``deb``, ``rpm``, and ``ipk``) based on 2583:term:`IMAGE_PKGTYPE`. 2584 2585The base class ensures all source and destination directories are 2586established and then populates the SDK. After populating the SDK, the 2587:ref:`populate_sdk_base <ref-classes-populate-sdk-*>` class constructs two sysroots: 2588``${``\ :term:`SDK_ARCH`\ ``}-nativesdk``, which 2589contains the cross-compiler and associated tooling, and the target, 2590which contains a target root filesystem that is configured for the SDK 2591usage. These two images reside in :term:`SDK_OUTPUT`, 2592which consists of the following:: 2593 2594 ${SDK_OUTPUT}/${SDK_ARCH}-nativesdk-pkgs 2595 ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/target-pkgs 2596 2597Finally, the base populate SDK class creates the toolchain environment 2598setup script, the tarball of the SDK, and the installer. 2599 2600The respective :ref:`populate_sdk_deb <ref-classes-populate-sdk-*>`, :ref:`populate_sdk_rpm <ref-classes-populate-sdk-*>`, and 2601:ref:`populate_sdk_ipk <ref-classes-populate-sdk-*>` classes each support the specific type of SDK. 2602These classes are inherited by and used with the :ref:`populate_sdk_base <ref-classes-populate-sdk-*>` 2603class. 2604 2605For more information on the cross-development toolchain generation, see 2606the ":ref:`overview-manual/concepts:cross-development toolchain generation`" 2607section in the Yocto Project Overview and Concepts Manual. For 2608information on advantages gained when building a cross-development 2609toolchain using the :ref:`ref-tasks-populate_sdk` 2610task, see the 2611":ref:`sdk-manual/appendix-obtain:building an sdk installer`" 2612section in the Yocto Project Application Development and the Extensible 2613Software Development Kit (eSDK) manual. 2614 2615.. _ref-classes-prexport: 2616 2617``prexport`` 2618============ 2619 2620The :ref:`ref-classes-prexport` class provides functionality for exporting 2621:term:`PR` values. 2622 2623.. note:: 2624 2625 This class is not intended to be used directly. Rather, it is enabled 2626 when using "``bitbake-prserv-tool export``". 2627 2628.. _ref-classes-primport: 2629 2630``primport`` 2631============ 2632 2633The :ref:`ref-classes-primport` class provides functionality for importing 2634:term:`PR` values. 2635 2636.. note:: 2637 2638 This class is not intended to be used directly. Rather, it is enabled 2639 when using "``bitbake-prserv-tool import``". 2640 2641.. _ref-classes-prserv: 2642 2643``prserv`` 2644========== 2645 2646The :ref:`ref-classes-prserv` class provides functionality for using a :ref:`PR 2647service <dev-manual/packages:working with a pr service>` in order to 2648automatically manage the incrementing of the :term:`PR` 2649variable for each recipe. 2650 2651This class is enabled by default because it is inherited by the 2652:ref:`ref-classes-package` class. However, the OpenEmbedded 2653build system will not enable the functionality of this class unless 2654:term:`PRSERV_HOST` has been set. 2655 2656.. _ref-classes-ptest: 2657 2658``ptest`` 2659========= 2660 2661The :ref:`ref-classes-ptest` class provides functionality for packaging and installing 2662runtime tests for recipes that build software that provides these tests. 2663 2664This class is intended to be inherited by individual recipes. However, 2665the class' functionality is largely disabled unless "ptest" appears in 2666:term:`DISTRO_FEATURES`. See the 2667":ref:`test-manual/ptest:testing packages with ptest`" 2668section in the Yocto Project Development Tasks Manual for more information 2669on ptest. 2670 2671.. _ref-classes-ptest-cargo: 2672 2673``ptest-cargo`` 2674=============== 2675 2676The :ref:`ref-classes-ptest-cargo` class is a class which extends the 2677:ref:`ref-classes-cargo` class and adds ``compile_ptest_cargo`` and 2678``install_ptest_cargo`` steps to respectively build and install 2679test suites defined in the ``Cargo.toml`` file, into a dedicated 2680``-ptest`` package. 2681 2682.. _ref-classes-ptest-gnome: 2683 2684``ptest-gnome`` 2685=============== 2686 2687Enables package tests (ptests) specifically for GNOME packages, which 2688have tests intended to be executed with ``gnome-desktop-testing``. 2689 2690For information on setting up and running ptests, see the 2691":ref:`test-manual/ptest:testing packages with ptest`" 2692section in the Yocto Project Development Tasks Manual. 2693 2694.. _ref-classes-python3-dir: 2695 2696``python3-dir`` 2697=============== 2698 2699The :ref:`ref-classes-python3-dir` class provides the base version, location, and site 2700package location for Python 3. 2701 2702.. _ref-classes-python3native: 2703 2704``python3native`` 2705================= 2706 2707The :ref:`ref-classes-python3native` class supports using the native version of Python 27083 built by the build system rather than support of the version provided 2709by the build host. 2710 2711.. _ref-classes-python3targetconfig: 2712 2713``python3targetconfig`` 2714======================= 2715 2716The :ref:`ref-classes-python3targetconfig` class supports using the native version of Python 27173 built by the build system rather than support of the version provided 2718by the build host, except that the configuration for the target machine 2719is accessible (such as correct installation directories). This also adds a 2720dependency on target ``python3``, so should only be used where appropriate 2721in order to avoid unnecessarily lengthening builds. 2722 2723.. _ref-classes-qemu: 2724 2725``qemu`` 2726======== 2727 2728The :ref:`ref-classes-qemu` class provides functionality for recipes that either need 2729QEMU or test for the existence of QEMU. Typically, this class is used to 2730run programs for a target system on the build host using QEMU's 2731application emulation mode. 2732 2733.. _ref-classes-recipe_sanity: 2734 2735``recipe_sanity`` 2736================= 2737 2738The :ref:`ref-classes-recipe_sanity` class checks for the presence of any host system 2739recipe prerequisites that might affect the build (e.g. variables that 2740are set or software that is present). 2741 2742.. _ref-classes-relocatable: 2743 2744``relocatable`` 2745=============== 2746 2747The :ref:`ref-classes-relocatable` class enables relocation of binaries when they are 2748installed into the sysroot. 2749 2750This class makes use of the :ref:`ref-classes-chrpath` class and is used by 2751both the :ref:`ref-classes-cross` and :ref:`ref-classes-native` classes. 2752 2753.. _ref-classes-remove-libtool: 2754 2755``remove-libtool`` 2756================== 2757 2758The :ref:`ref-classes-remove-libtool` class adds a post function to the 2759:ref:`ref-tasks-install` task to remove all ``.la`` files 2760installed by ``libtool``. Removing these files results in them being 2761absent from both the sysroot and target packages. 2762 2763If a recipe needs the ``.la`` files to be installed, then the recipe can 2764override the removal by setting ``REMOVE_LIBTOOL_LA`` to "0" as follows:: 2765 2766 REMOVE_LIBTOOL_LA = "0" 2767 2768.. note:: 2769 2770 The :ref:`ref-classes-remove-libtool` class is not enabled by default. 2771 2772.. _ref-classes-report-error: 2773 2774``report-error`` 2775================ 2776 2777The :ref:`ref-classes-report-error` class supports enabling the :ref:`error reporting 2778tool <dev-manual/error-reporting-tool:using the error reporting tool>`", 2779which allows you to submit build error information to a central database. 2780 2781The class collects debug information for recipe, recipe version, task, 2782machine, distro, build system, target system, host distro, branch, 2783commit, and log. From the information, report files using a JSON format 2784are created and stored in 2785``${``\ :term:`LOG_DIR`\ ``}/error-report``. 2786 2787.. _ref-classes-retain: 2788 2789``retain`` 2790========== 2791 2792The :ref:`ref-classes-retain` class can be used to create a tarball of the work 2793directory for a recipe when one of its tasks fails, or any other nominated 2794directories. It is useful in cases where the environment in which builds are run 2795is ephemeral or otherwise inaccessible for examination during debugging. 2796 2797To enable, add the following to your configuration:: 2798 2799 INHERIT += "retain" 2800 2801The class can be disabled for specific recipes using the :term:`RETAIN_ENABLED` 2802variable. 2803 2804.. _ref-classes-rm-work: 2805 2806``rm_work`` 2807=========== 2808 2809The :ref:`ref-classes-rm-work` class supports deletion of temporary workspace, which 2810can ease your hard drive demands during builds. 2811 2812The OpenEmbedded build system can use a substantial amount of disk space 2813during the build process. A portion of this space is the work files 2814under the ``${TMPDIR}/work`` directory for each recipe. Once the build 2815system generates the packages for a recipe, the work files for that 2816recipe are no longer needed. However, by default, the build system 2817preserves these files for inspection and possible debugging purposes. If 2818you would rather have these files deleted to save disk space as the build 2819progresses, you can enable :ref:`ref-classes-rm-work` by adding the following to 2820your ``local.conf`` file, which is found in the :term:`Build Directory`:: 2821 2822 INHERIT += "rm_work" 2823 2824If you are modifying and building source code out of the work directory for a 2825recipe, enabling :ref:`ref-classes-rm-work` will potentially result in your 2826changes to the source being lost. To exclude some recipes from having their work 2827directories deleted by :ref:`ref-classes-rm-work`, you can add the names of the 2828recipe or recipes you are working on to the :term:`RM_WORK_EXCLUDE` variable, 2829which can also be set in your ``local.conf`` file. Here is an example:: 2830 2831 RM_WORK_EXCLUDE += "busybox glibc" 2832 2833.. _ref-classes-rootfs*: 2834 2835``rootfs*`` 2836=========== 2837 2838The :ref:`ref-classes-rootfs*` classes support creating the root filesystem for an 2839image and consist of the following classes: 2840 2841- The :ref:`rootfs-postcommands <ref-classes-rootfs*>` class, which defines filesystem 2842 post-processing functions for image recipes. 2843 2844- The :ref:`rootfs_deb <ref-classes-rootfs*>` class, which supports creation of root filesystems 2845 for images built using ``.deb`` packages. 2846 2847- The :ref:`rootfs_rpm <ref-classes-rootfs*>` class, which supports creation of root filesystems 2848 for images built using ``.rpm`` packages. 2849 2850- The :ref:`rootfs_ipk <ref-classes-rootfs*>` class, which supports creation of root filesystems 2851 for images built using ``.ipk`` packages. 2852 2853- The :ref:`rootfsdebugfiles <ref-classes-rootfs*>` class, which installs additional files found 2854 on the build host directly into the root filesystem. 2855 2856The root filesystem is created from packages using one of the 2857:ref:`ref-classes-rootfs*` files as determined by the :term:`PACKAGE_CLASSES` 2858variable. 2859 2860For information on how root filesystem images are created, see the 2861":ref:`overview-manual/concepts:image generation`" 2862section in the Yocto Project Overview and Concepts Manual. 2863 2864.. _ref-classes-rust: 2865 2866``rust`` 2867======== 2868 2869The :ref:`ref-classes-rust` class is an internal class which is just used 2870in the "rust" recipe, to build the Rust compiler and runtime 2871library. Except for this recipe, it is not intended to be used directly. 2872 2873.. _ref-classes-rust-common: 2874 2875``rust-common`` 2876=============== 2877 2878The :ref:`ref-classes-rust-common` class is an internal class to the 2879:ref:`ref-classes-cargo_common` and :ref:`ref-classes-rust` classes and is not 2880intended to be used directly. 2881 2882.. _ref-classes-sanity: 2883 2884``sanity`` 2885========== 2886 2887The :ref:`ref-classes-sanity` class checks to see if prerequisite software is present 2888on the host system so that users can be notified of potential problems 2889that might affect their build. The class also performs basic user 2890configuration checks from the ``local.conf`` configuration file to 2891prevent common mistakes that cause build failures. Distribution policy 2892usually determines whether to include this class. 2893 2894.. _ref-classes-scons: 2895 2896``scons`` 2897========= 2898 2899The :ref:`ref-classes-scons` class supports recipes that need to build software 2900that uses the SCons build system. You can use the :term:`EXTRA_OESCONS` 2901variable to specify additional configuration options you want to pass SCons 2902command line. 2903 2904.. _ref-classes-sdl: 2905 2906``sdl`` 2907======= 2908 2909The :ref:`ref-classes-sdl` class supports recipes that need to build software that uses 2910the Simple DirectMedia Layer (SDL) library. 2911 2912.. _ref-classes-python_setuptools_build_meta: 2913 2914``python_setuptools_build_meta`` 2915================================ 2916 2917The :ref:`ref-classes-python_setuptools_build_meta` class enables building 2918Python modules which declare the 2919`PEP-517 <https://www.python.org/dev/peps/pep-0517/>`__ compliant 2920``setuptools.build_meta`` ``build-backend`` in the ``[build-system]`` 2921section of ``pyproject.toml`` (See `PEP-518 <https://www.python.org/dev/peps/pep-0518/>`__). 2922 2923Python modules built with ``setuptools.build_meta`` can be pure Python or 2924include ``C`` or ``Rust`` extensions). 2925 2926Internally this uses the :ref:`ref-classes-python_pep517` class. 2927 2928.. _ref-classes-setuptools3: 2929 2930``setuptools3`` 2931=============== 2932 2933The :ref:`ref-classes-setuptools3` class supports Python version 3.x extensions 2934that use build systems based on ``setuptools`` (e.g. only have a ``setup.py`` 2935and have not migrated to the official ``pyproject.toml`` format). If your recipe 2936uses these build systems, the recipe needs to inherit the 2937:ref:`ref-classes-setuptools3` class. 2938 2939 .. note:: 2940 2941 The :ref:`ref-classes-setuptools3` class :ref:`ref-tasks-compile` task now calls 2942 ``setup.py bdist_wheel`` to build the ``wheel`` binary archive format 2943 (See `PEP-427 <https://www.python.org/dev/peps/pep-0427/>`__). 2944 2945 A consequence of this is that legacy software still using deprecated 2946 ``distutils`` from the Python standard library cannot be packaged as 2947 ``wheels``. A common solution is the replace 2948 ``from distutils.core import setup`` with ``from setuptools import setup``. 2949 2950 .. note:: 2951 2952 The :ref:`ref-classes-setuptools3` class :ref:`ref-tasks-install` task now 2953 installs the ``wheel`` binary archive. In current versions of 2954 ``setuptools`` the legacy ``setup.py install`` method is deprecated. If 2955 the ``setup.py`` cannot be used with wheels, for example it creates files 2956 outside of the Python module or standard entry points, then 2957 :ref:`ref-classes-setuptools3_legacy` should be used. 2958 2959.. _ref-classes-setuptools3_legacy: 2960 2961``setuptools3_legacy`` 2962====================== 2963 2964The :ref:`ref-classes-setuptools3_legacy` class supports 2965Python version 3.x extensions that use build systems based on ``setuptools`` 2966(e.g. only have a ``setup.py`` and have not migrated to the official 2967``pyproject.toml`` format). Unlike :ref:`ref-classes-setuptools3`, 2968this uses the traditional ``setup.py`` ``build`` and ``install`` commands and 2969not wheels. This use of ``setuptools`` like this is 2970`deprecated <https://github.com/pypa/setuptools/blob/main/CHANGES.rst#v5830>`__ 2971but still relatively common. 2972 2973.. _ref-classes-setuptools3-base: 2974 2975``setuptools3-base`` 2976==================== 2977 2978The :ref:`ref-classes-setuptools3-base` class provides a reusable base for 2979other classes that support building Python version 3.x extensions. If you need 2980functionality that is not provided by the :ref:`ref-classes-setuptools3` class, 2981you may want to ``inherit setuptools3-base``. Some recipes do not need the tasks 2982in the :ref:`ref-classes-setuptools3` class and inherit this class instead. 2983 2984.. _ref-classes-sign_rpm: 2985 2986``sign_rpm`` 2987============ 2988 2989The :ref:`ref-classes-sign_rpm` class supports generating signed RPM packages. 2990 2991.. _ref-classes-siteinfo: 2992 2993``siteinfo`` 2994============ 2995 2996The :ref:`ref-classes-siteinfo` class provides information about the targets 2997that might be needed by other classes or recipes. 2998 2999As an example, consider Autotools, which can require tests that must 3000execute on the target hardware. Since this is not possible in general 3001when cross compiling, site information is used to provide cached test 3002results so these tests can be skipped over but still make the correct 3003values available. The ``meta/site directory`` contains test results 3004sorted into different categories such as architecture, endianness, and 3005the ``libc`` used. Site information provides a list of files containing 3006data relevant to the current build in the :term:`CONFIG_SITE` variable that 3007Autotools automatically picks up. 3008 3009The class also provides variables like :term:`SITEINFO_ENDIANNESS` and 3010:term:`SITEINFO_BITS` that can be used elsewhere in the metadata. 3011 3012.. _ref-classes-sstate: 3013 3014``sstate`` 3015========== 3016 3017The :ref:`ref-classes-sstate` class provides support for Shared State (sstate). 3018By default, the class is enabled through the :term:`INHERIT_DISTRO` variable's 3019default value. 3020 3021For more information on sstate, see the 3022":ref:`overview-manual/concepts:shared state cache`" 3023section in the Yocto Project Overview and Concepts Manual. 3024 3025.. _ref-classes-staging: 3026 3027``staging`` 3028=========== 3029 3030The :ref:`ref-classes-staging` class installs files into individual recipe work 3031directories for sysroots. The class contains the following key tasks: 3032 3033- The :ref:`ref-tasks-populate_sysroot` task, 3034 which is responsible for handing the files that end up in the recipe 3035 sysroots. 3036 3037- The 3038 :ref:`ref-tasks-prepare_recipe_sysroot` 3039 task (a "partner" task to the ``populate_sysroot`` task), which 3040 installs the files into the individual recipe work directories (i.e. 3041 :term:`WORKDIR`). 3042 3043The code in the :ref:`ref-classes-staging` class is complex and basically works 3044in two stages: 3045 3046- *Stage One:* The first stage addresses recipes that have files they 3047 want to share with other recipes that have dependencies on the 3048 originating recipe. Normally these dependencies are installed through 3049 the :ref:`ref-tasks-install` task into 3050 ``${``\ :term:`D`\ ``}``. The :ref:`ref-tasks-populate_sysroot` task 3051 copies a subset of these files into ``${SYSROOT_DESTDIR}``. This 3052 subset of files is controlled by the 3053 :term:`SYSROOT_DIRS`, 3054 :term:`SYSROOT_DIRS_NATIVE`, and 3055 :term:`SYSROOT_DIRS_IGNORE` 3056 variables. 3057 3058 .. note:: 3059 3060 Additionally, a recipe can customize the files further by 3061 declaring a processing function in the :term:`SYSROOT_PREPROCESS_FUNCS` 3062 variable. 3063 3064 A shared state (sstate) object is built from these files and the 3065 files are placed into a subdirectory of 3066 :ref:`structure-build-tmp-sysroots-components`. 3067 The files are scanned for hardcoded paths to the original 3068 installation location. If the location is found in text files, the 3069 hardcoded locations are replaced by tokens and a list of the files 3070 needing such replacements is created. These adjustments are referred 3071 to as "FIXMEs". The list of files that are scanned for paths is 3072 controlled by the :term:`SSTATE_SCAN_FILES` 3073 variable. 3074 3075- *Stage Two:* The second stage addresses recipes that want to use 3076 something from another recipe and declare a dependency on that recipe 3077 through the :term:`DEPENDS` variable. The recipe will 3078 have a 3079 :ref:`ref-tasks-prepare_recipe_sysroot` 3080 task and when this task executes, it creates the ``recipe-sysroot`` 3081 and ``recipe-sysroot-native`` in the recipe work directory (i.e. 3082 :term:`WORKDIR`). The OpenEmbedded build system 3083 creates hard links to copies of the relevant files from 3084 ``sysroots-components`` into the recipe work directory. 3085 3086 .. note:: 3087 3088 If hard links are not possible, the build system uses actual 3089 copies. 3090 3091 The build system then addresses any "FIXMEs" to paths as defined from 3092 the list created in the first stage. 3093 3094 Finally, any files in ``${bindir}`` within the sysroot that have the 3095 prefix "``postinst-``" are executed. 3096 3097 .. note:: 3098 3099 Although such sysroot post installation scripts are not 3100 recommended for general use, the files do allow some issues such 3101 as user creation and module indexes to be addressed. 3102 3103 Because recipes can have other dependencies outside of :term:`DEPENDS` 3104 (e.g. ``do_unpack[depends] += "tar-native:do_populate_sysroot"``), 3105 the sysroot creation function ``extend_recipe_sysroot`` is also added 3106 as a pre-function for those tasks whose dependencies are not through 3107 :term:`DEPENDS` but operate similarly. 3108 3109 When installing dependencies into the sysroot, the code traverses the 3110 dependency graph and processes dependencies in exactly the same way 3111 as the dependencies would or would not be when installed from sstate. 3112 This processing means, for example, a native tool would have its 3113 native dependencies added but a target library would not have its 3114 dependencies traversed or installed. The same sstate dependency code 3115 is used so that builds should be identical regardless of whether 3116 sstate was used or not. For a closer look, see the 3117 ``setscene_depvalid()`` function in the :ref:`ref-classes-sstate` class. 3118 3119 The build system is careful to maintain manifests of the files it 3120 installs so that any given dependency can be installed as needed. The 3121 sstate hash of the installed item is also stored so that if it 3122 changes, the build system can reinstall it. 3123 3124.. _ref-classes-syslinux: 3125 3126``syslinux`` 3127============ 3128 3129The :ref:`ref-classes-syslinux` class provides syslinux-specific functions for 3130building bootable images. 3131 3132The class supports the following variables: 3133 3134- :term:`INITRD`: Indicates list of filesystem images to 3135 concatenate and use as an initial RAM disk (initrd). This variable is 3136 optional. 3137 3138- :term:`ROOTFS`: Indicates a filesystem image to include 3139 as the root filesystem. This variable is optional. 3140 3141- :term:`AUTO_SYSLINUXMENU`: Enables creating 3142 an automatic menu when set to "1". 3143 3144- :term:`LABELS`: Lists targets for automatic 3145 configuration. 3146 3147- :term:`APPEND`: Lists append string overrides for each 3148 label. 3149 3150- :term:`SYSLINUX_OPTS`: Lists additional options 3151 to add to the syslinux file. Semicolon characters separate multiple 3152 options. 3153 3154- :term:`SYSLINUX_SPLASH`: Lists a background 3155 for the VGA boot menu when you are using the boot menu. 3156 3157- :term:`SYSLINUX_DEFAULT_CONSOLE`: Set 3158 to "console=ttyX" to change kernel boot default console. 3159 3160- :term:`SYSLINUX_SERIAL`: Sets an alternate 3161 serial port. Or, turns off serial when the variable is set with an 3162 empty string. 3163 3164- :term:`SYSLINUX_SERIAL_TTY`: Sets an 3165 alternate "console=tty..." kernel boot argument. 3166 3167.. _ref-classes-systemd: 3168 3169``systemd`` 3170=========== 3171 3172The :ref:`ref-classes-systemd` class provides support for recipes that install 3173systemd unit files. 3174 3175The functionality for this class is disabled unless you have "systemd" 3176in :term:`DISTRO_FEATURES`. 3177 3178Under this class, the recipe or Makefile (i.e. whatever the recipe is 3179calling during the :ref:`ref-tasks-install` task) 3180installs unit files into 3181``${``\ :term:`D`\ ``}${systemd_unitdir}/system``. If the unit 3182files being installed go into packages other than the main package, you 3183need to set :term:`SYSTEMD_PACKAGES` in your 3184recipe to identify the packages in which the files will be installed. 3185 3186You should set :term:`SYSTEMD_SERVICE` to the 3187name of the service file. You should also use a package name override to 3188indicate the package to which the value applies. If the value applies to 3189the recipe's main package, use ``${``\ :term:`PN`\ ``}``. Here 3190is an example from the connman recipe:: 3191 3192 SYSTEMD_SERVICE:${PN} = "connman.service" 3193 3194Services are set up to start on boot automatically 3195unless you have set 3196:term:`SYSTEMD_AUTO_ENABLE` to "disable". 3197 3198For more information on :ref:`ref-classes-systemd`, see the 3199":ref:`dev-manual/init-manager:selecting an initialization manager`" 3200section in the Yocto Project Development Tasks Manual. 3201 3202.. _ref-classes-systemd-boot: 3203 3204``systemd-boot`` 3205================ 3206 3207The :ref:`ref-classes-systemd-boot` class provides functions specific to the 3208systemd-boot bootloader for building bootable images. This is an 3209internal class and is not intended to be used directly. 3210 3211.. note:: 3212 3213 The :ref:`ref-classes-systemd-boot` class is a result from merging the ``gummiboot`` class 3214 used in previous Yocto Project releases with the ``systemd`` project. 3215 3216Set the :term:`EFI_PROVIDER` variable to ":ref:`ref-classes-systemd-boot`" to 3217use this class. Doing so creates a standalone EFI bootloader that is not 3218dependent on systemd. 3219 3220For information on more variables used and supported in this class, see 3221the :term:`SYSTEMD_BOOT_CFG`, 3222:term:`SYSTEMD_BOOT_ENTRIES`, and 3223:term:`SYSTEMD_BOOT_TIMEOUT` variables. 3224 3225You can also see the `Systemd-boot 3226documentation <https://www.freedesktop.org/wiki/Software/systemd/systemd-boot/>`__ 3227for more information. 3228 3229.. _ref-classes-terminal: 3230 3231``terminal`` 3232============ 3233 3234The :ref:`ref-classes-terminal` class provides support for starting a terminal 3235session. The :term:`OE_TERMINAL` variable controls which terminal emulator is 3236used for the session. 3237 3238Other classes use the :ref:`ref-classes-terminal` class anywhere a separate 3239terminal session needs to be started. For example, the :ref:`ref-classes-patch` 3240class assuming :term:`PATCHRESOLVE` is set to "user", the 3241:ref:`ref-classes-cml1` class, and the :ref:`ref-classes-devshell` class all 3242use the :ref:`ref-classes-terminal` class. 3243 3244.. _ref-classes-testimage: 3245 3246``testimage`` 3247============= 3248 3249The :ref:`ref-classes-testimage` class supports running automated tests against 3250images using QEMU and on actual hardware. The classes handle loading the 3251tests and starting the image. To use the classes, you need to perform 3252steps to set up the environment. 3253 3254To enable this class, add the following to your configuration:: 3255 3256 IMAGE_CLASSES += "testimage" 3257 3258The tests are commands that run on the target system over ``ssh``. Each 3259test is written in Python and makes use of the ``unittest`` module. 3260 3261The :ref:`ref-classes-testimage` class runs tests on an image when called using the 3262following:: 3263 3264 $ bitbake -c testimage image 3265 3266Alternatively, if you wish to have tests automatically run for each image 3267after it is built, you can set :term:`TESTIMAGE_AUTO`:: 3268 3269 TESTIMAGE_AUTO = "1" 3270 3271For information on how to enable, run, and create new tests, see the 3272":ref:`test-manual/runtime-testing:performing automated runtime testing`" 3273section in the Yocto Project Test Environment Manual. 3274 3275.. _ref-classes-testsdk: 3276 3277``testsdk`` 3278=========== 3279 3280This class supports running automated tests against software development 3281kits (SDKs). The :ref:`ref-classes-testsdk` class runs tests on an SDK when called 3282using the following:: 3283 3284 $ bitbake -c testsdk image 3285 3286.. note:: 3287 3288 Best practices include using :term:`IMAGE_CLASSES` rather than 3289 :term:`INHERIT` to inherit the :ref:`ref-classes-testsdk` class for automated SDK 3290 testing. 3291 3292.. _ref-classes-texinfo: 3293 3294``texinfo`` 3295=========== 3296 3297This class should be inherited by recipes whose upstream packages invoke 3298the ``texinfo`` utilities at build-time. Native and cross recipes are 3299made to use the dummy scripts provided by ``texinfo-dummy-native``, for 3300improved performance. Target architecture recipes use the genuine 3301Texinfo utilities. By default, they use the Texinfo utilities on the 3302host system. 3303 3304.. note:: 3305 3306 If you want to use the Texinfo recipe shipped with the build system, 3307 you can remove "texinfo-native" from :term:`ASSUME_PROVIDED` and makeinfo 3308 from :term:`SANITY_REQUIRED_UTILITIES`. 3309 3310.. _ref-classes-toaster: 3311 3312``toaster`` 3313=========== 3314 3315The :ref:`ref-classes-toaster` class collects information about packages and images and 3316sends them as events that the BitBake user interface can receive. The 3317class is enabled when the Toaster user interface is running. 3318 3319This class is not intended to be used directly. 3320 3321.. _ref-classes-toolchain-scripts: 3322 3323``toolchain-scripts`` 3324===================== 3325 3326The :ref:`ref-classes-toolchain-scripts` class provides the scripts used for setting up 3327the environment for installed SDKs. 3328 3329.. _ref-classes-typecheck: 3330 3331``typecheck`` 3332============= 3333 3334The :ref:`ref-classes-typecheck` class provides support for validating the values of 3335variables set at the configuration level against their defined types. 3336The OpenEmbedded build system allows you to define the type of a 3337variable using the "type" varflag. Here is an example:: 3338 3339 IMAGE_FEATURES[type] = "list" 3340 3341.. _ref-classes-uboot-config: 3342 3343``uboot-config`` 3344================ 3345 3346The :ref:`ref-classes-uboot-config` class provides support for U-Boot configuration for 3347a machine. Specify the machine in your recipe as follows:: 3348 3349 UBOOT_CONFIG ??= <default> 3350 UBOOT_CONFIG[foo] = "config,images,binary" 3351 3352You can also specify the machine using this method:: 3353 3354 UBOOT_MACHINE = "config" 3355 3356See the :term:`UBOOT_CONFIG` and :term:`UBOOT_MACHINE` variables for additional 3357information. 3358 3359.. _ref-classes-uboot-sign: 3360 3361``uboot-sign`` 3362============== 3363 3364The :ref:`ref-classes-uboot-sign` class provides support for U-Boot verified boot. 3365It is intended to be inherited from U-Boot recipes. 3366 3367The variables used by this class are: 3368 3369- :term:`SPL_MKIMAGE_DTCOPTS`: DTC options for U-Boot ``mkimage`` when 3370 building the FIT image. 3371- :term:`SPL_SIGN_ENABLE`: enable signing the FIT image. 3372- :term:`SPL_SIGN_KEYDIR`: directory containing the signing keys. 3373- :term:`SPL_SIGN_KEYNAME`: base filename of the signing keys. 3374- :term:`UBOOT_FIT_ADDRESS_CELLS`: ``#address-cells`` value for the FIT image. 3375- :term:`UBOOT_FIT_DESC`: description string encoded into the FIT image. 3376- :term:`UBOOT_FIT_GENERATE_KEYS`: generate the keys if they don't exist yet. 3377- :term:`UBOOT_FIT_HASH_ALG`: hash algorithm for the FIT image. 3378- :term:`UBOOT_FIT_KEY_GENRSA_ARGS`: ``openssl genrsa`` arguments. 3379- :term:`UBOOT_FIT_KEY_REQ_ARGS`: ``openssl req`` arguments. 3380- :term:`UBOOT_FIT_SIGN_ALG`: signature algorithm for the FIT image. 3381- :term:`UBOOT_FIT_SIGN_NUMBITS`: size of the private key for FIT image 3382 signing. 3383- :term:`UBOOT_FIT_KEY_SIGN_PKCS`: algorithm for the public key certificate 3384 for FIT image signing. 3385- :term:`UBOOT_FITIMAGE_ENABLE`: enable the generation of a U-Boot FIT image. 3386- :term:`UBOOT_MKIMAGE_DTCOPTS`: DTC options for U-Boot ``mkimage`` when 3387 rebuilding the FIT image containing the kernel. 3388 3389See U-Boot's documentation for details about `verified boot 3390<https://source.denx.de/u-boot/u-boot/-/blob/master/doc/uImage.FIT/verified-boot.txt>`__ 3391and the `signature process 3392<https://source.denx.de/u-boot/u-boot/-/blob/master/doc/uImage.FIT/signature.txt>`__. 3393 3394See also the description of :ref:`ref-classes-kernel-fitimage` class, which this class 3395imitates. 3396 3397.. _ref-classes-uki: 3398 3399``uki`` 3400======= 3401 3402The :ref:`ref-classes-uki` class provides support for `Unified Kernel Image 3403(UKI) <https://uapi-group.org/specifications/specs/unified_kernel_image/>`__ 3404format. UKIs combine kernel, :term:`Initramfs`, signatures, metadata etc to a 3405single UEFI firmware compatible binary. The class is intended to be inherited 3406by rootfs image recipes. The build configuration should also use an 3407:term:`Initramfs`, ``systemd-boot`` as boot menu provider and have UEFI support 3408on target hardware. Using ``systemd`` as init is recommended. Image builds 3409should create an ESP partition for UEFI firmware and copy ``systemd-boot`` and 3410UKI files there. Sample configuration for Wic images is provided in 3411:oe_git:`scripts/lib/wic/canned-wks/efi-uki-bootdisk.wks.in 3412<openembedded-core/tree/scripts/lib/wic/canned-wks/efi-uki-bootdisk.wks.in>`. 3413UKIs are generated using ``systemd`` reference implementation `ukify 3414<https://www.freedesktop.org/software/systemd/man/latest/ukify.html>`__. 3415This class uses a number of variables but tries to find sensible defaults for 3416them. 3417 3418The variables used by this class are: 3419 3420- :term:`EFI_ARCH`: architecture name within EFI standard, set in 3421 :oe_git:`meta/conf/image-uefi.conf 3422 <openembedded-core/tree/meta/conf/image-uefi.conf>` 3423- :term:`IMAGE_EFI_BOOT_FILES`: files to install to EFI boot partition 3424 created by the ``bootimg-efi`` Wic plugin 3425- :term:`INITRAMFS_IMAGE`: initramfs recipe name 3426- :term:`KERNEL_DEVICETREE`: optional devicetree files to embed into UKI 3427- :term:`UKIFY_CMD`: `ukify 3428 <https://www.freedesktop.org/software/systemd/man/latest/ukify.html>`__ 3429 command to build the UKI image 3430- :term:`UKI_CMDLINE`: kernel command line to use with UKI 3431- :term:`UKI_CONFIG_FILE`: optional config file for `ukify 3432 <https://www.freedesktop.org/software/systemd/man/latest/ukify.html>`__ 3433- :term:`UKI_FILENAME`: output file name for the UKI image 3434- :term:`UKI_KERNEL_FILENAME`: kernel image file name 3435- :term:`UKI_SB_CERT`: optional UEFI secureboot certificate matching the 3436 private key 3437- :term:`UKI_SB_KEY`: optional UEFI secureboot private key to sign UKI with 3438 3439For examples on how to use this class see oeqa selftest 3440:oe_git:`meta/lib/oeqa/selftest/cases/uki.py 3441<openembedded-core/tree/meta/lib/oeqa/selftest/cases/uki.py>`. 3442Also an oeqa runtime test :oe_git:`meta/lib/oeqa/runtime/cases/uki.py 3443<openembedded-core/tree/meta/lib/oeqa/runtime/cases/uki.py>` is provided which 3444verifies that the target system booted the same UKI binary as was set at 3445buildtime via :term:`UKI_FILENAME`. 3446 3447.. _ref-classes-uninative: 3448 3449``uninative`` 3450============= 3451 3452Attempts to isolate the build system from the host distribution's C 3453library in order to make re-use of native shared state artifacts across 3454different host distributions practical. With this class enabled, a 3455tarball containing a pre-built C library is downloaded at the start of 3456the build. In the Poky reference distribution this is enabled by default 3457through ``meta/conf/distro/include/yocto-uninative.inc``. Other 3458distributions that do not derive from poky can also 3459"``require conf/distro/include/yocto-uninative.inc``" to use this. 3460Alternatively if you prefer, you can build the uninative-tarball recipe 3461yourself, publish the resulting tarball (e.g. via HTTP) and set 3462``UNINATIVE_URL`` and ``UNINATIVE_CHECKSUM`` appropriately. For an 3463example, see the ``meta/conf/distro/include/yocto-uninative.inc``. 3464 3465The :ref:`ref-classes-uninative` class is also used unconditionally by the extensible 3466SDK. When building the extensible SDK, ``uninative-tarball`` is built 3467and the resulting tarball is included within the SDK. 3468 3469.. _ref-classes-update-alternatives: 3470 3471``update-alternatives`` 3472======================= 3473 3474The :ref:`ref-classes-update-alternatives` class helps the alternatives system when 3475multiple sources provide the same command. This situation occurs when 3476several programs that have the same or similar function are installed 3477with the same name. For example, the ``ar`` command is available from 3478the ``busybox``, ``binutils`` and ``elfutils`` packages. The 3479:ref:`ref-classes-update-alternatives` class handles renaming the binaries so that 3480multiple packages can be installed without conflicts. The ``ar`` command 3481still works regardless of which packages are installed or subsequently 3482removed. The class renames the conflicting binary in each package and 3483symlinks the highest priority binary during installation or removal of 3484packages. 3485 3486To use this class, you need to define a number of variables: 3487 3488- :term:`ALTERNATIVE` 3489 3490- :term:`ALTERNATIVE_LINK_NAME` 3491 3492- :term:`ALTERNATIVE_TARGET` 3493 3494- :term:`ALTERNATIVE_PRIORITY` 3495 3496These variables list alternative commands needed by a package, provide 3497pathnames for links, default links for targets, and so forth. For 3498details on how to use this class, see the comments in the 3499:yocto_git:`update-alternatives.bbclass </poky/tree/meta/classes-recipe/update-alternatives.bbclass>` 3500file. 3501 3502.. note:: 3503 3504 You can use the ``update-alternatives`` command directly in your recipes. 3505 However, this class simplifies things in most cases. 3506 3507.. _ref-classes-update-rc.d: 3508 3509``update-rc.d`` 3510=============== 3511 3512The :ref:`ref-classes-update-rc.d` class uses ``update-rc.d`` to safely install an 3513initialization script on behalf of the package. The OpenEmbedded build 3514system takes care of details such as making sure the script is stopped 3515before a package is removed and started when the package is installed. 3516 3517Three variables control this class: :term:`INITSCRIPT_PACKAGES`, 3518:term:`INITSCRIPT_NAME` and :term:`INITSCRIPT_PARAMS`. See the variable links 3519for details. 3520 3521.. _ref-classes-useradd: 3522 3523``useradd*`` 3524============ 3525 3526The :ref:`useradd* <ref-classes-useradd>` classes support the addition of users or groups for 3527usage by the package on the target. For example, if you have packages 3528that contain system services that should be run under their own user or 3529group, you can use these classes to enable creation of the user or 3530group. The :oe_git:`meta-skeleton/recipes-skeleton/useradd/useradd-example.bb 3531</openembedded-core/tree/meta-skeleton/recipes-skeleton/useradd/useradd-example.bb>` 3532recipe in the :term:`Source Directory` provides a simple 3533example that shows how to add three users and groups to two packages. 3534 3535The :ref:`useradd_base <ref-classes-useradd>` class provides basic functionality for user or 3536groups settings. 3537 3538The :ref:`useradd* <ref-classes-useradd>` classes support the 3539:term:`USERADD_PACKAGES`, 3540:term:`USERADD_PARAM`, 3541:term:`GROUPADD_PARAM`, and 3542:term:`GROUPMEMS_PARAM` variables. 3543 3544The :ref:`useradd-staticids <ref-classes-useradd>` class supports the addition of users or groups 3545that have static user identification (``uid``) and group identification 3546(``gid``) values. 3547 3548The default behavior of the OpenEmbedded build system for assigning 3549``uid`` and ``gid`` values when packages add users and groups during 3550package install time is to add them dynamically. This works fine for 3551programs that do not care what the values of the resulting users and 3552groups become. In these cases, the order of the installation determines 3553the final ``uid`` and ``gid`` values. However, if non-deterministic 3554``uid`` and ``gid`` values are a problem, you can override the default, 3555dynamic application of these values by setting static values. When you 3556set static values, the OpenEmbedded build system looks in 3557:term:`BBPATH` for ``files/passwd`` and ``files/group`` 3558files for the values. 3559 3560To use static ``uid`` and ``gid`` values, you need to set some variables. See 3561the :term:`USERADDEXTENSION`, :term:`USERADD_UID_TABLES`, 3562:term:`USERADD_GID_TABLES`, and :term:`USERADD_ERROR_DYNAMIC` variables. 3563You can also see the :ref:`ref-classes-useradd` class for additional 3564information. 3565 3566.. note:: 3567 3568 You do not use the :ref:`useradd-staticids <ref-classes-useradd>` class directly. You either enable 3569 or disable the class by setting the :term:`USERADDEXTENSION` variable. If you 3570 enable or disable the class in a configured system, :term:`TMPDIR` might 3571 contain incorrect ``uid`` and ``gid`` values. Deleting the :term:`TMPDIR` 3572 directory will correct this condition. 3573 3574.. _ref-classes-utility-tasks: 3575 3576``utility-tasks`` 3577================= 3578 3579The :ref:`ref-classes-utility-tasks` class provides support for various 3580"utility" type tasks that are applicable to all recipes, such as 3581:ref:`ref-tasks-clean` and :ref:`ref-tasks-listtasks`. 3582 3583This class is enabled by default because it is inherited by the 3584:ref:`ref-classes-base` class. 3585 3586.. _ref-classes-utils: 3587 3588``utils`` 3589========= 3590 3591The :ref:`ref-classes-utils` class provides some useful Python functions that are 3592typically used in inline Python expressions (e.g. ``${@...}``). One 3593example use is for ``bb.utils.contains()``. 3594 3595This class is enabled by default because it is inherited by the 3596:ref:`ref-classes-base` class. 3597 3598.. _ref-classes-vala: 3599 3600``vala`` 3601======== 3602 3603The :ref:`ref-classes-vala` class supports recipes that need to build software written 3604using the Vala programming language. 3605 3606.. _ref-classes-vex: 3607 3608``vex`` 3609======== 3610 3611The :ref:`ref-classes-vex` class is used to generate metadata needed by external 3612tools to check for vulnerabilities, for example CVEs. It can be used as a 3613replacement for :ref:`ref-classes-cve-check`. 3614 3615In order to use this class, inherit the class in the ``local.conf`` file and it 3616will add the ``generate_vex`` task for every recipe:: 3617 3618 INHERIT += "vex" 3619 3620If an image is built it will generate a report in :term:`DEPLOY_DIR_IMAGE` for 3621all the packages used, it will also generate a file for all recipes used in the 3622build. 3623 3624Variables use the ``CVE_CHECK`` prefix to keep compatibility with the 3625:ref:`ref-classes-cve-check` class. 3626 3627Example usage:: 3628 3629 bitbake -c generate_vex openssl 3630 3631.. _ref-classes-waf: 3632 3633``waf`` 3634======= 3635 3636The :ref:`ref-classes-waf` class supports recipes that need to build software that uses 3637the Waf build system. You can use the 3638:term:`EXTRA_OECONF` or 3639:term:`PACKAGECONFIG_CONFARGS` variables 3640to specify additional configuration options to be passed on the Waf 3641command line. 3642 3643.. _ref-classes-yocto-check-layer: 3644 3645``yocto-check-layer`` 3646===================== 3647 3648The :ref:`ref-classes-yocto-check-layer` class is used by the 3649:oe_git:`yocto-check-layer </openembedded-core/tree/scripts/yocto-check-layer>` 3650script to ensure that packages from Yocto Project Compatible layers don't skip 3651required QA checks listed in :term:`CHECKLAYER_REQUIRED_TESTS` defined by the 3652:ref:`ref-classes-insane` class. 3653 3654It adds an anonymous python function with extra processing to all recipes, 3655and globally inheriting this class with :term:`INHERIT` is not advised. Instead 3656the ``yocto-check-layer`` script should be used as it handles usage of this 3657class. 3658 3659For more information on the Yocto Project 3660Compatible layers, see the :ref:`dev-manual/layers:Making Sure Your Layer is 3661Compatible With Yocto Project` section of the Yocto Project Development Manual. 3662