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