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