1.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
2
3Writing a New Recipe
4********************
5
6Recipes (``.bb`` files) are fundamental components in the Yocto Project
7environment. Each software component built by the OpenEmbedded build
8system requires a recipe to define the component. This section describes
9how to create, write, and test a new recipe.
10
11.. note::
12
13   For information on variables that are useful for recipes and for
14   information about recipe naming issues, see the
15   ":ref:`ref-manual/varlocality:recipes`" section of the Yocto Project
16   Reference Manual.
17
18Overview
19========
20
21The following figure shows the basic process for creating a new recipe.
22The remainder of the section provides details for the steps.
23
24.. image:: figures/recipe-workflow.png
25   :align: center
26   :width: 50%
27
28Locate or Automatically Create a Base Recipe
29============================================
30
31You can always write a recipe from scratch. However, there are three choices
32that can help you quickly get started with a new recipe:
33
34-  ``devtool add``: A command that assists in creating a recipe and an
35   environment conducive to development.
36
37-  ``recipetool create``: A command provided by the Yocto Project that
38   automates creation of a base recipe based on the source files.
39
40-  *Existing Recipes:* Location and modification of an existing recipe
41   that is similar in function to the recipe you need.
42
43.. note::
44
45   For information on recipe syntax, see the
46   ":ref:`dev-manual/new-recipe:recipe syntax`" section.
47
48Creating the Base Recipe Using ``devtool add``
49----------------------------------------------
50
51The ``devtool add`` command uses the same logic for auto-creating the
52recipe as ``recipetool create``, which is listed below. Additionally,
53however, ``devtool add`` sets up an environment that makes it easy for
54you to patch the source and to make changes to the recipe as is often
55necessary when adding a recipe to build a new piece of software to be
56included in a build.
57
58You can find a complete description of the ``devtool add`` command in
59the ":ref:`sdk-manual/extensible:a closer look at \`\`devtool add\`\``" section
60in the Yocto Project Application Development and the Extensible Software
61Development Kit (eSDK) manual.
62
63Creating the Base Recipe Using ``recipetool create``
64----------------------------------------------------
65
66``recipetool create`` automates creation of a base recipe given a set of
67source code files. As long as you can extract or point to the source
68files, the tool will construct a recipe and automatically configure all
69pre-build information into the recipe. For example, suppose you have an
70application that builds using Autotools. Creating the base recipe using
71``recipetool`` results in a recipe that has the pre-build dependencies,
72license requirements, and checksums configured.
73
74To run the tool, you just need to be in your :term:`Build Directory` and
75have sourced the build environment setup script (i.e.
76:ref:`structure-core-script`). To get help on the tool, use the following
77command::
78
79   $ recipetool -h
80   NOTE: Starting bitbake server...
81   usage: recipetool [-d] [-q] [--color COLOR] [-h] <subcommand> ...
82
83   OpenEmbedded recipe tool
84
85   options:
86     -d, --debug     Enable debug output
87     -q, --quiet     Print only errors
88     --color COLOR   Colorize output (where COLOR is auto, always, never)
89     -h, --help      show this help message and exit
90
91   subcommands:
92     create          Create a new recipe
93     newappend       Create a bbappend for the specified target in the specified
94                       layer
95     setvar          Set a variable within a recipe
96     appendfile      Create/update a bbappend to replace a target file
97     appendsrcfiles  Create/update a bbappend to add or replace source files
98     appendsrcfile   Create/update a bbappend to add or replace a source file
99   Use recipetool <subcommand> --help to get help on a specific command
100
101Running ``recipetool create -o OUTFILE`` creates the base recipe and
102locates it properly in the layer that contains your source files.
103Here are some syntax examples:
104
105 - Use this syntax to generate a recipe based on source. Once generated,
106   the recipe resides in the existing source code layer::
107
108      recipetool create -o OUTFILE source
109
110 - Use this syntax to generate a recipe using code that
111   you extract from source. The extracted code is placed in its own layer
112   defined by :term:`EXTERNALSRC`::
113
114      recipetool create -o OUTFILE -x EXTERNALSRC source
115
116 - Use this syntax to generate a recipe based on source. The options
117   direct ``recipetool`` to generate debugging information. Once generated,
118   the recipe resides in the existing source code layer::
119
120      recipetool create -d -o OUTFILE source
121
122Locating and Using a Similar Recipe
123-----------------------------------
124
125Before writing a recipe from scratch, it is often useful to discover
126whether someone else has already written one that meets (or comes close
127to meeting) your needs. The Yocto Project and OpenEmbedded communities
128maintain many recipes that might be candidates for what you are doing.
129You can find a good central index of these recipes in the
130:oe_layerindex:`OpenEmbedded Layer Index <>`.
131
132Working from an existing recipe or a skeleton recipe is the best way to
133get started. Here are some points on both methods:
134
135-  *Locate and modify a recipe that is close to what you want to do:*
136   This method works when you are familiar with the current recipe
137   space. The method does not work so well for those new to the Yocto
138   Project or writing recipes.
139
140   Some risks associated with this method are using a recipe that has
141   areas totally unrelated to what you are trying to accomplish with
142   your recipe, not recognizing areas of the recipe that you might have
143   to add from scratch, and so forth. All these risks stem from
144   unfamiliarity with the existing recipe space.
145
146-  *Use and modify the following skeleton recipe:* If for some reason
147   you do not want to use ``recipetool`` and you cannot find an existing
148   recipe that is close to meeting your needs, you can use the following
149   structure to provide the fundamental areas of a new recipe::
150
151      DESCRIPTION = ""
152      HOMEPAGE = ""
153      LICENSE = ""
154      SECTION = ""
155      DEPENDS = ""
156      LIC_FILES_CHKSUM = ""
157
158      SRC_URI = ""
159
160Storing and Naming the Recipe
161=============================
162
163Once you have your base recipe, you should put it in your own layer and
164name it appropriately. Locating it correctly ensures that the
165OpenEmbedded build system can find it when you use BitBake to process
166the recipe.
167
168-  *Storing Your Recipe:* The OpenEmbedded build system locates your
169   recipe through the layer's ``conf/layer.conf`` file and the
170   :term:`BBFILES` variable. This
171   variable sets up a path from which the build system can locate
172   recipes. Here is the typical use::
173
174      BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
175                  ${LAYERDIR}/recipes-*/*/*.bbappend"
176
177   Consequently, you need to be sure you locate your new recipe inside
178   your layer such that it can be found.
179
180   You can find more information on how layers are structured in the
181   ":ref:`dev-manual/layers:understanding and creating layers`" section.
182
183-  *Naming Your Recipe:* When you name your recipe, you need to follow
184   this naming convention::
185
186      basename_version.bb
187
188   Use lower-cased characters and do not include the reserved suffixes
189   ``-native``, ``-cross``, ``-initial``, or ``-dev`` casually (i.e. do not use
190   them as part of your recipe name unless the string applies). Here are some
191   examples:
192
193   .. code-block:: none
194
195      cups_1.7.0.bb
196      gawk_4.0.2.bb
197      irssi_0.8.16-rc1.bb
198
199Running a Build on the Recipe
200=============================
201
202Creating a new recipe is usually an iterative process that requires
203using BitBake to process the recipe multiple times in order to
204progressively discover and add information to the recipe file.
205
206Assuming you have sourced the build environment setup script (i.e.
207:ref:`structure-core-script`) and you are in the :term:`Build Directory`, use
208BitBake to process your recipe. All you need to provide is the
209``basename`` of the recipe as described in the previous section::
210
211   $ bitbake basename
212
213During the build, the OpenEmbedded build system creates a temporary work
214directory for each recipe
215(``${``\ :term:`WORKDIR`\ ``}``)
216where it keeps extracted source files, log files, intermediate
217compilation and packaging files, and so forth.
218
219The path to the per-recipe temporary work directory depends on the
220context in which it is being built. The quickest way to find this path
221is to have BitBake return it by running the following::
222
223   $ bitbake -e basename | grep ^WORKDIR=
224
225As an example, assume a Source Directory
226top-level folder named ``poky``, a default :term:`Build Directory` at
227``poky/build``, and a ``qemux86-poky-linux`` machine target system.
228Furthermore, suppose your recipe is named ``foo_1.3.0.bb``. In this
229case, the work directory the build system uses to build the package
230would be as follows::
231
232   poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
233
234Inside this directory you can find sub-directories such as ``image``,
235``packages-split``, and ``temp``. After the build, you can examine these
236to determine how well the build went.
237
238.. note::
239
240   You can find log files for each task in the recipe's ``temp``
241   directory (e.g. ``poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0/temp``).
242   Log files are named ``log.taskname`` (e.g. ``log.do_configure``,
243   ``log.do_fetch``, and ``log.do_compile``).
244
245You can find more information about the build process in
246":doc:`/overview-manual/development-environment`"
247chapter of the Yocto Project Overview and Concepts Manual.
248
249Fetching Code
250=============
251
252The first thing your recipe must do is specify how to fetch the source
253files. Fetching is controlled mainly through the
254:term:`SRC_URI` variable. Your recipe
255must have a :term:`SRC_URI` variable that points to where the source is
256located. For a graphical representation of source locations, see the
257":ref:`overview-manual/concepts:sources`" section in
258the Yocto Project Overview and Concepts Manual.
259
260The :ref:`ref-tasks-fetch` task uses the prefix of each entry in the
261:term:`SRC_URI` variable value to determine which
262:ref:`fetcher <bitbake-user-manual/bitbake-user-manual-fetching:fetchers>`
263to use to get your source files. It is the :term:`SRC_URI` variable that triggers
264the fetcher. The :ref:`ref-tasks-patch` task uses the variable after source is
265fetched to apply patches. The OpenEmbedded build system uses
266:term:`FILESOVERRIDES` for scanning directory locations for local files in
267:term:`SRC_URI`.
268
269The :term:`SRC_URI` variable in your recipe must define each unique location
270for your source files. It is good practice to not hard-code version
271numbers in a URL used in :term:`SRC_URI`. Rather than hard-code these
272values, use ``${``\ :term:`PV`\ ``}``,
273which causes the fetch process to use the version specified in the
274recipe filename. Specifying the version in this manner means that
275upgrading the recipe to a future version is as simple as renaming the
276recipe to match the new version.
277
278Here is a simple example from the
279``meta/recipes-devtools/strace/strace_5.5.bb`` recipe where the source
280comes from a single tarball. Notice the use of the
281:term:`PV` variable::
282
283   SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
284
285Files mentioned in :term:`SRC_URI` whose names end in a typical archive
286extension (e.g. ``.tar``, ``.tar.gz``, ``.tar.bz2``, ``.zip``, and so
287forth), are automatically extracted during the
288:ref:`ref-tasks-unpack` task. For
289another example that specifies these types of files, see the
290":ref:`dev-manual/new-recipe:building an autotooled package`" section.
291
292Another way of specifying source is from an SCM. For Git repositories,
293you must specify :term:`SRCREV` and you should specify :term:`PV` to include
294the revision with :term:`SRCPV`. Here is an example from the recipe
295``meta/recipes-core/musl/gcompat_git.bb``::
296
297   SRC_URI = "git://git.adelielinux.org/adelie/gcompat.git;protocol=https;branch=current"
298
299   PV = "1.0.0+1.1+git${SRCPV}"
300   SRCREV = "af5a49e489fdc04b9cf02547650d7aeaccd43793"
301
302If your :term:`SRC_URI` statement includes URLs pointing to individual files
303fetched from a remote server other than a version control system,
304BitBake attempts to verify the files against checksums defined in your
305recipe to ensure they have not been tampered with or otherwise modified
306since the recipe was written. Multiple checksums are supported:
307``SRC_URI[md5sum]``, ``SRC_URI[sha1sum]``, ``SRC_URI[sha256sum]``.
308``SRC_URI[sha384sum]`` and ``SRC_URI[sha512sum]``, but only
309``SRC_URI[sha256sum]`` is commonly used.
310
311.. note::
312
313   ``SRC_URI[md5sum]`` used to also be commonly used, but it is deprecated
314   and should be replaced by ``SRC_URI[sha256sum]`` when updating existing
315   recipes.
316
317If your :term:`SRC_URI` variable points to more than a single URL (excluding
318SCM URLs), you need to provide the ``sha256`` checksum for each URL. For these
319cases, you provide a name for each URL as part of the :term:`SRC_URI` and then
320reference that name in the subsequent checksum statements. Here is an example
321combining lines from the files ``git.inc`` and ``git_2.24.1.bb``::
322
323   SRC_URI = "${KERNELORG_MIRROR}/software/scm/git/git-${PV}.tar.gz;name=tarball \
324              ${KERNELORG_MIRROR}/software/scm/git/git-manpages-${PV}.tar.gz;name=manpages"
325
326   SRC_URI[tarball.sha256sum] = "ad5334956301c86841eb1e5b1bb20884a6bad89a10a6762c958220c7cf64da02"
327   SRC_URI[manpages.sha256sum] = "9a7ae3a093bea39770eb96ca3e5b40bff7af0b9f6123f089d7821d0e5b8e1230"
328
329The proper value for the ``sha256`` checksum might be available together
330with other signatures on the download page for the upstream source (e.g.
331``md5``, ``sha1``, ``sha256``, ``GPG``, and so forth). Because the
332OpenEmbedded build system typically only deals with ``sha256sum``,
333you should verify all the signatures you find by hand.
334
335If no :term:`SRC_URI` checksums are specified when you attempt to build the
336recipe, or you provide an incorrect checksum, the build will produce an
337error for each missing or incorrect checksum. As part of the error
338message, the build system provides the checksum string corresponding to
339the fetched file. Once you have the correct checksums, you can copy and
340paste them into your recipe and then run the build again to continue.
341
342.. note::
343
344   As mentioned, if the upstream source provides signatures for
345   verifying the downloaded source code, you should verify those
346   manually before setting the checksum values in the recipe and
347   continuing with the build.
348
349This final example is a bit more complicated and is from the
350``meta/recipes-sato/rxvt-unicode/rxvt-unicode_9.20.bb`` recipe. The
351example's :term:`SRC_URI` statement identifies multiple files as the source
352files for the recipe: a tarball, a patch file, a desktop file, and an icon::
353
354   SRC_URI = "http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-${PV}.tar.bz2 \
355              file://xwc.patch \
356              file://rxvt.desktop \
357              file://rxvt.png"
358
359When you specify local files using the ``file://`` URI protocol, the
360build system fetches files from the local machine. The path is relative
361to the :term:`FILESPATH` variable
362and searches specific directories in a certain order:
363``${``\ :term:`BP`\ ``}``,
364``${``\ :term:`BPN`\ ``}``, and
365``files``. The directories are assumed to be subdirectories of the
366directory in which the recipe or append file resides. For another
367example that specifies these types of files, see the
368"`building a single .c file package`_" section.
369
370The previous example also specifies a patch file. Patch files are files
371whose names usually end in ``.patch`` or ``.diff`` but can end with
372compressed suffixes such as ``diff.gz`` and ``patch.bz2``, for example.
373The build system automatically applies patches as described in the
374":ref:`dev-manual/new-recipe:patching code`" section.
375
376Fetching Code Through Firewalls
377-------------------------------
378
379Some users are behind firewalls and need to fetch code through a proxy.
380See the ":doc:`/ref-manual/faq`" chapter for advice.
381
382Limiting the Number of Parallel Connections
383-------------------------------------------
384
385Some users are behind firewalls or use servers where the number of parallel
386connections is limited. In such cases, you can limit the number of fetch
387tasks being run in parallel by adding the following to your ``local.conf``
388file::
389
390   do_fetch[number_threads] = "4"
391
392Unpacking Code
393==============
394
395During the build, the
396:ref:`ref-tasks-unpack` task unpacks
397the source with ``${``\ :term:`S`\ ``}``
398pointing to where it is unpacked.
399
400If you are fetching your source files from an upstream source archived
401tarball and the tarball's internal structure matches the common
402convention of a top-level subdirectory named
403``${``\ :term:`BPN`\ ``}-${``\ :term:`PV`\ ``}``,
404then you do not need to set :term:`S`. However, if :term:`SRC_URI` specifies to
405fetch source from an archive that does not use this convention, or from
406an SCM like Git or Subversion, your recipe needs to define :term:`S`.
407
408If processing your recipe using BitBake successfully unpacks the source
409files, you need to be sure that the directory pointed to by ``${S}``
410matches the structure of the source.
411
412Patching Code
413=============
414
415Sometimes it is necessary to patch code after it has been fetched. Any
416files mentioned in :term:`SRC_URI` whose names end in ``.patch`` or
417``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz``,
418``patch.bz2``, etc.) are treated as patches. The
419:ref:`ref-tasks-patch` task
420automatically applies these patches.
421
422The build system should be able to apply patches with the "-p1" option
423(i.e. one directory level in the path will be stripped off). If your
424patch needs to have more directory levels stripped off, specify the
425number of levels using the "striplevel" option in the :term:`SRC_URI` entry
426for the patch. Alternatively, if your patch needs to be applied in a
427specific subdirectory that is not specified in the patch file, use the
428"patchdir" option in the entry.
429
430As with all local files referenced in
431:term:`SRC_URI` using ``file://``,
432you should place patch files in a directory next to the recipe either
433named the same as the base name of the recipe
434(:term:`BP` and
435:term:`BPN`) or "files".
436
437Licensing
438=========
439
440Your recipe needs to define variables related to the license
441under whith the software is distributed. See the
442:ref:`contributor-guide/recipe-style-guide:recipe license fields`
443section in the Contributor Guide for details.
444
445Dependencies
446============
447
448Most software packages have a short list of other packages that they
449require, which are called dependencies. These dependencies fall into two
450main categories: build-time dependencies, which are required when the
451software is built; and runtime dependencies, which are required to be
452installed on the target in order for the software to run.
453
454Within a recipe, you specify build-time dependencies using the
455:term:`DEPENDS` variable. Although there are nuances,
456items specified in :term:`DEPENDS` should be names of other
457recipes. It is important that you specify all build-time dependencies
458explicitly.
459
460Another consideration is that configure scripts might automatically
461check for optional dependencies and enable corresponding functionality
462if those dependencies are found. If you wish to make a recipe that is
463more generally useful (e.g. publish the recipe in a layer for others to
464use), instead of hard-disabling the functionality, you can use the
465:term:`PACKAGECONFIG` variable to allow functionality and the
466corresponding dependencies to be enabled and disabled easily by other
467users of the recipe.
468
469Similar to build-time dependencies, you specify runtime dependencies
470through a variable -
471:term:`RDEPENDS`, which is
472package-specific. All variables that are package-specific need to have
473the name of the package added to the end as an override. Since the main
474package for a recipe has the same name as the recipe, and the recipe's
475name can be found through the
476``${``\ :term:`PN`\ ``}`` variable, then
477you specify the dependencies for the main package by setting
478``RDEPENDS:${PN}``. If the package were named ``${PN}-tools``, then you
479would set ``RDEPENDS:${PN}-tools``, and so forth.
480
481Some runtime dependencies will be set automatically at packaging time.
482These dependencies include any shared library dependencies (i.e. if a
483package "example" contains "libexample" and another package "mypackage"
484contains a binary that links to "libexample" then the OpenEmbedded build
485system will automatically add a runtime dependency to "mypackage" on
486"example"). See the
487":ref:`overview-manual/concepts:automatically added runtime dependencies`"
488section in the Yocto Project Overview and Concepts Manual for further
489details.
490
491Configuring the Recipe
492======================
493
494Most software provides some means of setting build-time configuration
495options before compilation. Typically, setting these options is
496accomplished by running a configure script with options, or by modifying
497a build configuration file.
498
499.. note::
500
501   As of Yocto Project Release 1.7, some of the core recipes that
502   package binary configuration scripts now disable the scripts due to
503   the scripts previously requiring error-prone path substitution. The
504   OpenEmbedded build system uses ``pkg-config`` now, which is much more
505   robust. You can find a list of the ``*-config`` scripts that are disabled
506   in the ":ref:`migration-1.7-binary-configuration-scripts-disabled`" section
507   in the Yocto Project Reference Manual.
508
509A major part of build-time configuration is about checking for
510build-time dependencies and possibly enabling optional functionality as
511a result. You need to specify any build-time dependencies for the
512software you are building in your recipe's
513:term:`DEPENDS` value, in terms of
514other recipes that satisfy those dependencies. You can often find
515build-time or runtime dependencies described in the software's
516documentation.
517
518The following list provides configuration items of note based on how
519your software is built:
520
521-  *Autotools:* If your source files have a ``configure.ac`` file, then
522   your software is built using Autotools. If this is the case, you just
523   need to modify the configuration.
524
525   When using Autotools, your recipe needs to inherit the
526   :ref:`ref-classes-autotools` class and it does not have to
527   contain a :ref:`ref-tasks-configure` task. However, you might still want to
528   make some adjustments. For example, you can set :term:`EXTRA_OECONF` or
529   :term:`PACKAGECONFIG_CONFARGS` to pass any needed configure options that
530   are specific to the recipe.
531
532-  *CMake:* If your source files have a ``CMakeLists.txt`` file, then
533   your software is built using CMake. If this is the case, you just
534   need to modify the configuration.
535
536   When you use CMake, your recipe needs to inherit the
537   :ref:`ref-classes-cmake` class and it does not have to contain a
538   :ref:`ref-tasks-configure` task. You can make some adjustments by setting
539   :term:`EXTRA_OECMAKE` to pass any needed configure options that are
540   specific to the recipe.
541
542   .. note::
543
544      If you need to install one or more custom CMake toolchain files
545      that are supplied by the application you are building, install the
546      files to ``${D}${datadir}/cmake/Modules`` during :ref:`ref-tasks-install`.
547
548-  *Other:* If your source files do not have a ``configure.ac`` or
549   ``CMakeLists.txt`` file, then your software is built using some
550   method other than Autotools or CMake. If this is the case, you
551   normally need to provide a
552   :ref:`ref-tasks-configure` task
553   in your recipe unless, of course, there is nothing to configure.
554
555   Even if your software is not being built by Autotools or CMake, you
556   still might not need to deal with any configuration issues. You need
557   to determine if configuration is even a required step. You might need
558   to modify a Makefile or some configuration file used for the build to
559   specify necessary build options. Or, perhaps you might need to run a
560   provided, custom configure script with the appropriate options.
561
562   For the case involving a custom configure script, you would run
563   ``./configure --help`` and look for the options you need to set.
564
565Once configuration succeeds, it is always good practice to look at the
566``log.do_configure`` file to ensure that the appropriate options have
567been enabled and no additional build-time dependencies need to be added
568to :term:`DEPENDS`. For example, if the configure script reports that it
569found something not mentioned in :term:`DEPENDS`, or that it did not find
570something that it needed for some desired optional functionality, then
571you would need to add those to :term:`DEPENDS`. Looking at the log might
572also reveal items being checked for, enabled, or both that you do not
573want, or items not being found that are in :term:`DEPENDS`, in which case
574you would need to look at passing extra options to the configure script
575as needed. For reference information on configure options specific to
576the software you are building, you can consult the output of the
577``./configure --help`` command within ``${S}`` or consult the software's
578upstream documentation.
579
580Using Headers to Interface with Devices
581=======================================
582
583If your recipe builds an application that needs to communicate with some
584device or needs an API into a custom kernel, you will need to provide
585appropriate header files. Under no circumstances should you ever modify
586the existing
587``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc`` file.
588These headers are used to build ``libc`` and must not be compromised
589with custom or machine-specific header information. If you customize
590``libc`` through modified headers all other applications that use
591``libc`` thus become affected.
592
593.. note::
594
595   Never copy and customize the ``libc`` header file (i.e.
596   ``meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc``).
597
598The correct way to interface to a device or custom kernel is to use a
599separate package that provides the additional headers for the driver or
600other unique interfaces. When doing so, your application also becomes
601responsible for creating a dependency on that specific provider.
602
603Consider the following:
604
605-  Never modify ``linux-libc-headers.inc``. Consider that file to be
606   part of the ``libc`` system, and not something you use to access the
607   kernel directly. You should access ``libc`` through specific ``libc``
608   calls.
609
610-  Applications that must talk directly to devices should either provide
611   necessary headers themselves, or establish a dependency on a special
612   headers package that is specific to that driver.
613
614For example, suppose you want to modify an existing header that adds I/O
615control or network support. If the modifications are used by a small
616number programs, providing a unique version of a header is easy and has
617little impact. When doing so, bear in mind the guidelines in the
618previous list.
619
620.. note::
621
622   If for some reason your changes need to modify the behavior of the ``libc``,
623   and subsequently all other applications on the system, use a ``.bbappend``
624   to modify the ``linux-kernel-headers.inc`` file. However, take care to not
625   make the changes machine specific.
626
627Consider a case where your kernel is older and you need an older
628``libc`` ABI. The headers installed by your recipe should still be a
629standard mainline kernel, not your own custom one.
630
631When you use custom kernel headers you need to get them from
632:term:`STAGING_KERNEL_DIR`,
633which is the directory with kernel headers that are required to build
634out-of-tree modules. Your recipe will also need the following::
635
636   do_configure[depends] += "virtual/kernel:do_shared_workdir"
637
638Compilation
639===========
640
641During a build, the :ref:`ref-tasks-compile` task happens after source is fetched,
642unpacked, and configured. If the recipe passes through :ref:`ref-tasks-compile`
643successfully, nothing needs to be done.
644
645However, if the compile step fails, you need to diagnose the failure.
646Here are some common issues that cause failures.
647
648.. note::
649
650   For cases where improper paths are detected for configuration files
651   or for when libraries/headers cannot be found, be sure you are using
652   the more robust ``pkg-config``. See the note in section
653   ":ref:`dev-manual/new-recipe:Configuring the Recipe`" for additional information.
654
655-  *Parallel build failures:* These failures manifest themselves as
656   intermittent errors, or errors reporting that a file or directory
657   that should be created by some other part of the build process could
658   not be found. This type of failure can occur even if, upon
659   inspection, the file or directory does exist after the build has
660   failed, because that part of the build process happened in the wrong
661   order.
662
663   To fix the problem, you need to either satisfy the missing dependency
664   in the Makefile or whatever script produced the Makefile, or (as a
665   workaround) set :term:`PARALLEL_MAKE` to an empty string::
666
667      PARALLEL_MAKE = ""
668
669   For information on parallel Makefile issues, see the
670   ":ref:`dev-manual/debugging:debugging parallel make races`" section.
671
672-  *Improper host path usage:* This failure applies to recipes building
673   for the target or ":ref:`ref-classes-nativesdk`" only. The
674   failure occurs when the compilation process uses improper headers,
675   libraries, or other files from the host system when cross-compiling for
676   the target.
677
678   To fix the problem, examine the ``log.do_compile`` file to identify
679   the host paths being used (e.g. ``/usr/include``, ``/usr/lib``, and
680   so forth) and then either add configure options, apply a patch, or do
681   both.
682
683-  *Failure to find required libraries/headers:* If a build-time
684   dependency is missing because it has not been declared in
685   :term:`DEPENDS`, or because the
686   dependency exists but the path used by the build process to find the
687   file is incorrect and the configure step did not detect it, the
688   compilation process could fail. For either of these failures, the
689   compilation process notes that files could not be found. In these
690   cases, you need to go back and add additional options to the
691   configure script as well as possibly add additional build-time
692   dependencies to :term:`DEPENDS`.
693
694   Occasionally, it is necessary to apply a patch to the source to
695   ensure the correct paths are used. If you need to specify paths to
696   find files staged into the sysroot from other recipes, use the
697   variables that the OpenEmbedded build system provides (e.g.
698   :term:`STAGING_BINDIR`, :term:`STAGING_INCDIR`, :term:`STAGING_DATADIR`, and so
699   forth).
700
701Installing
702==========
703
704During :ref:`ref-tasks-install`, the task copies the built files along with their
705hierarchy to locations that would mirror their locations on the target
706device. The installation process copies files from the
707``${``\ :term:`S`\ ``}``,
708``${``\ :term:`B`\ ``}``, and
709``${``\ :term:`WORKDIR`\ ``}``
710directories to the ``${``\ :term:`D`\ ``}``
711directory to create the structure as it should appear on the target
712system.
713
714How your software is built affects what you must do to be sure your
715software is installed correctly. The following list describes what you
716must do for installation depending on the type of build system used by
717the software being built:
718
719-  *Autotools and CMake:* If the software your recipe is building uses
720   Autotools or CMake, the OpenEmbedded build system understands how to
721   install the software. Consequently, you do not have to have a
722   :ref:`ref-tasks-install` task as part of your recipe. You just need to make
723   sure the install portion of the build completes with no issues.
724   However, if you wish to install additional files not already being
725   installed by ``make install``, you should do this using a
726   ``do_install:append`` function using the install command as described
727   in the "Manual" bulleted item later in this list.
728
729-  *Other (using* ``make install``\ *)*: You need to define a :ref:`ref-tasks-install`
730   function in your recipe. The function should call
731   ``oe_runmake install`` and will likely need to pass in the
732   destination directory as well. How you pass that path is dependent on
733   how the ``Makefile`` being run is written (e.g. ``DESTDIR=${D}``,
734   ``PREFIX=${D}``, ``INSTALLROOT=${D}``, and so forth).
735
736   For an example recipe using ``make install``, see the
737   ":ref:`dev-manual/new-recipe:building a makefile-based package`" section.
738
739-  *Manual:* You need to define a :ref:`ref-tasks-install` function in your
740   recipe. The function must first use ``install -d`` to create the
741   directories under
742   ``${``\ :term:`D`\ ``}``. Once the
743   directories exist, your function can use ``install`` to manually
744   install the built software into the directories.
745
746   You can find more information on ``install`` at
747   https://www.gnu.org/software/coreutils/manual/html_node/install-invocation.html.
748
749For the scenarios that do not use Autotools or CMake, you need to track
750the installation and diagnose and fix any issues until everything
751installs correctly. You need to look in the default location of
752``${D}``, which is ``${WORKDIR}/image``, to be sure your files have been
753installed correctly.
754
755.. note::
756
757   -  During the installation process, you might need to modify some of
758      the installed files to suit the target layout. For example, you
759      might need to replace hard-coded paths in an initscript with
760      values of variables provided by the build system, such as
761      replacing ``/usr/bin/`` with ``${bindir}``. If you do perform such
762      modifications during :ref:`ref-tasks-install`, be sure to modify the
763      destination file after copying rather than before copying.
764      Modifying after copying ensures that the build system can
765      re-execute :ref:`ref-tasks-install` if needed.
766
767   -  ``oe_runmake install``, which can be run directly or can be run
768      indirectly by the :ref:`ref-classes-autotools` and
769      :ref:`ref-classes-cmake` classes, runs ``make install`` in parallel.
770      Sometimes, a Makefile can have missing dependencies between targets that
771      can result in race conditions. If you experience intermittent failures
772      during :ref:`ref-tasks-install`, you might be able to work around them by
773      disabling parallel Makefile installs by adding the following to the
774      recipe::
775
776         PARALLEL_MAKEINST = ""
777
778      See :term:`PARALLEL_MAKEINST` for additional information.
779
780   -  If you need to install one or more custom CMake toolchain files
781      that are supplied by the application you are building, install the
782      files to ``${D}${datadir}/cmake/Modules`` during
783      :ref:`ref-tasks-install`.
784
785Enabling System Services
786========================
787
788If you want to install a service, which is a process that usually starts
789on boot and runs in the background, then you must include some
790additional definitions in your recipe.
791
792If you are adding services and the service initialization script or the
793service file itself is not installed, you must provide for that
794installation in your recipe using a ``do_install:append`` function. If
795your recipe already has a :ref:`ref-tasks-install` function, update the function
796near its end rather than adding an additional ``do_install:append``
797function.
798
799When you create the installation for your services, you need to
800accomplish what is normally done by ``make install``. In other words,
801make sure your installation arranges the output similar to how it is
802arranged on the target system.
803
804The OpenEmbedded build system provides support for starting services two
805different ways:
806
807-  *SysVinit:* SysVinit is a system and service manager that manages the
808   init system used to control the very basic functions of your system.
809   The init program is the first program started by the Linux kernel
810   when the system boots. Init then controls the startup, running and
811   shutdown of all other programs.
812
813   To enable a service using SysVinit, your recipe needs to inherit the
814   :ref:`ref-classes-update-rc.d` class. The class helps
815   facilitate safely installing the package on the target.
816
817   You will need to set the
818   :term:`INITSCRIPT_PACKAGES`,
819   :term:`INITSCRIPT_NAME`,
820   and
821   :term:`INITSCRIPT_PARAMS`
822   variables within your recipe.
823
824-  *systemd:* System Management Daemon (systemd) was designed to replace
825   SysVinit and to provide enhanced management of services. For more
826   information on systemd, see the systemd homepage at
827   https://freedesktop.org/wiki/Software/systemd/.
828
829   To enable a service using systemd, your recipe needs to inherit the
830   :ref:`ref-classes-systemd` class. See the ``systemd.bbclass`` file
831   located in your :term:`Source Directory` section for more information.
832
833Packaging
834=========
835
836Successful packaging is a combination of automated processes performed
837by the OpenEmbedded build system and some specific steps you need to
838take. The following list describes the process:
839
840-  *Splitting Files*: The :ref:`ref-tasks-package` task splits the files produced
841   by the recipe into logical components. Even software that produces a
842   single binary might still have debug symbols, documentation, and
843   other logical components that should be split out. The :ref:`ref-tasks-package`
844   task ensures that files are split up and packaged correctly.
845
846-  *Running QA Checks*: The :ref:`ref-classes-insane` class adds a
847   step to the package generation process so that output quality
848   assurance checks are generated by the OpenEmbedded build system. This
849   step performs a range of checks to be sure the build's output is free
850   of common problems that show up during runtime. For information on
851   these checks, see the :ref:`ref-classes-insane` class and
852   the ":ref:`ref-manual/qa-checks:qa error and warning messages`"
853   chapter in the Yocto Project Reference Manual.
854
855-  *Hand-Checking Your Packages*: After you build your software, you
856   need to be sure your packages are correct. Examine the
857   ``${``\ :term:`WORKDIR`\ ``}/packages-split``
858   directory and make sure files are where you expect them to be. If you
859   discover problems, you can set
860   :term:`PACKAGES`,
861   :term:`FILES`,
862   ``do_install(:append)``, and so forth as needed.
863
864-  *Splitting an Application into Multiple Packages*: If you need to
865   split an application into several packages, see the
866   ":ref:`dev-manual/new-recipe:splitting an application into multiple packages`"
867   section for an example.
868
869-  *Installing a Post-Installation Script*: For an example showing how
870   to install a post-installation script, see the
871   ":ref:`dev-manual/new-recipe:post-installation scripts`" section.
872
873-  *Marking Package Architecture*: Depending on what your recipe is
874   building and how it is configured, it might be important to mark the
875   packages produced as being specific to a particular machine, or to
876   mark them as not being specific to a particular machine or
877   architecture at all.
878
879   By default, packages apply to any machine with the same architecture
880   as the target machine. When a recipe produces packages that are
881   machine-specific (e.g. the
882   :term:`MACHINE` value is passed
883   into the configure script or a patch is applied only for a particular
884   machine), you should mark them as such by adding the following to the
885   recipe::
886
887      PACKAGE_ARCH = "${MACHINE_ARCH}"
888
889   On the other hand, if the recipe produces packages that do not
890   contain anything specific to the target machine or architecture at
891   all (e.g. recipes that simply package script files or configuration
892   files), you should use the :ref:`ref-classes-allarch` class to
893   do this for you by adding this to your recipe::
894
895      inherit allarch
896
897   Ensuring that the package architecture is correct is not critical
898   while you are doing the first few builds of your recipe. However, it
899   is important in order to ensure that your recipe rebuilds (or does
900   not rebuild) appropriately in response to changes in configuration,
901   and to ensure that you get the appropriate packages installed on the
902   target machine, particularly if you run separate builds for more than
903   one target machine.
904
905Sharing Files Between Recipes
906=============================
907
908Recipes often need to use files provided by other recipes on the build
909host. For example, an application linking to a common library needs
910access to the library itself and its associated headers. The way this
911access is accomplished is by populating a sysroot with files. Each
912recipe has two sysroots in its work directory, one for target files
913(``recipe-sysroot``) and one for files that are native to the build host
914(``recipe-sysroot-native``).
915
916.. note::
917
918   You could find the term "staging" used within the Yocto project
919   regarding files populating sysroots (e.g. the :term:`STAGING_DIR`
920   variable).
921
922Recipes should never populate the sysroot directly (i.e. write files
923into sysroot). Instead, files should be installed into standard
924locations during the
925:ref:`ref-tasks-install` task within
926the ``${``\ :term:`D`\ ``}`` directory. The
927reason for this limitation is that almost all files that populate the
928sysroot are cataloged in manifests in order to ensure the files can be
929removed later when a recipe is either modified or removed. Thus, the
930sysroot is able to remain free from stale files.
931
932A subset of the files installed by the :ref:`ref-tasks-install` task are
933used by the :ref:`ref-tasks-populate_sysroot` task as defined by the
934:term:`SYSROOT_DIRS` variable to automatically populate the sysroot. It
935is possible to modify the list of directories that populate the sysroot.
936The following example shows how you could add the ``/opt`` directory to
937the list of directories within a recipe::
938
939   SYSROOT_DIRS += "/opt"
940
941.. note::
942
943   The `/sysroot-only` is to be used by recipes that generate artifacts
944   that are not included in the target filesystem, allowing them to share
945   these artifacts without needing to use the :term:`DEPLOY_DIR`.
946
947For a more complete description of the :ref:`ref-tasks-populate_sysroot`
948task and its associated functions, see the
949:ref:`staging <ref-classes-staging>` class.
950
951Using Virtual Providers
952=======================
953
954Prior to a build, if you know that several different recipes provide the
955same functionality, you can use a virtual provider (i.e. ``virtual/*``)
956as a placeholder for the actual provider. The actual provider is
957determined at build-time.
958
959A common scenario where a virtual provider is used would be for the kernel
960recipe. Suppose you have three kernel recipes whose :term:`PN` values map to
961``kernel-big``, ``kernel-mid``, and ``kernel-small``. Furthermore, each of
962these recipes in some way uses a :term:`PROVIDES` statement that essentially
963identifies itself as being able to provide ``virtual/kernel``. Here is one way
964through the :ref:`ref-classes-kernel` class::
965
966   PROVIDES += "virtual/kernel"
967
968Any recipe that inherits the :ref:`ref-classes-kernel` class is
969going to utilize a :term:`PROVIDES` statement that identifies that recipe as
970being able to provide the ``virtual/kernel`` item.
971
972Now comes the time to actually build an image and you need a kernel
973recipe, but which one? You can configure your build to call out the
974kernel recipe you want by using the :term:`PREFERRED_PROVIDER` variable. As
975an example, consider the :yocto_git:`x86-base.inc
976</poky/tree/meta/conf/machine/include/x86/x86-base.inc>` include file, which is a
977machine (i.e. :term:`MACHINE`) configuration file. This include file is the
978reason all x86-based machines use the ``linux-yocto`` kernel. Here are the
979relevant lines from the include file::
980
981   PREFERRED_PROVIDER_virtual/kernel ??= "linux-yocto"
982   PREFERRED_VERSION_linux-yocto ??= "4.15%"
983
984When you use a virtual provider, you do not have to "hard code" a recipe
985name as a build dependency. You can use the
986:term:`DEPENDS` variable to state the
987build is dependent on ``virtual/kernel`` for example::
988
989   DEPENDS = "virtual/kernel"
990
991During the build, the OpenEmbedded build system picks
992the correct recipe needed for the ``virtual/kernel`` dependency based on
993the :term:`PREFERRED_PROVIDER` variable. If you want to use the small kernel
994mentioned at the beginning of this section, configure your build as
995follows::
996
997   PREFERRED_PROVIDER_virtual/kernel ??= "kernel-small"
998
999.. note::
1000
1001   Any recipe that :term:`PROVIDES` a ``virtual/*`` item that is ultimately not
1002   selected through :term:`PREFERRED_PROVIDER` does not get built. Preventing these
1003   recipes from building is usually the desired behavior since this mechanism's
1004   purpose is to select between mutually exclusive alternative providers.
1005
1006The following lists specific examples of virtual providers:
1007
1008-  ``virtual/kernel``: Provides the name of the kernel recipe to use
1009   when building a kernel image.
1010
1011-  ``virtual/bootloader``: Provides the name of the bootloader to use
1012   when building an image.
1013
1014-  ``virtual/libgbm``: Provides ``gbm.pc``.
1015
1016-  ``virtual/egl``: Provides ``egl.pc`` and possibly ``wayland-egl.pc``.
1017
1018-  ``virtual/libgl``: Provides ``gl.pc`` (i.e. libGL).
1019
1020-  ``virtual/libgles1``: Provides ``glesv1_cm.pc`` (i.e. libGLESv1_CM).
1021
1022-  ``virtual/libgles2``: Provides ``glesv2.pc`` (i.e. libGLESv2).
1023
1024.. note::
1025
1026   Virtual providers only apply to build time dependencies specified with
1027   :term:`PROVIDES` and :term:`DEPENDS`. They do not apply to runtime
1028   dependencies specified with :term:`RPROVIDES` and :term:`RDEPENDS`.
1029
1030Properly Versioning Pre-Release Recipes
1031=======================================
1032
1033Sometimes the name of a recipe can lead to versioning problems when the
1034recipe is upgraded to a final release. For example, consider the
1035``irssi_0.8.16-rc1.bb`` recipe file in the list of example recipes in
1036the ":ref:`dev-manual/new-recipe:storing and naming the recipe`" section.
1037This recipe is at a release candidate stage (i.e. "rc1"). When the recipe is
1038released, the recipe filename becomes ``irssi_0.8.16.bb``. The version
1039change from ``0.8.16-rc1`` to ``0.8.16`` is seen as a decrease by the
1040build system and package managers, so the resulting packages will not
1041correctly trigger an upgrade.
1042
1043In order to ensure the versions compare properly, the recommended
1044convention is to use a tilde (``~``) character as follows::
1045
1046  PV = 0.8.16~rc1
1047
1048This way ``0.8.16~rc1`` sorts before ``0.8.16``. See the
1049":ref:`contributor-guide/recipe-style-guide:version policy`" section in the
1050Yocto Project and OpenEmbedded Contributor Guide for more details about
1051versioning code corresponding to a pre-release or to a specific Git commit.
1052
1053Post-Installation Scripts
1054=========================
1055
1056Post-installation scripts run immediately after installing a package on
1057the target or during image creation when a package is included in an
1058image. To add a post-installation script to a package, add a
1059``pkg_postinst:``\ `PACKAGENAME`\ ``()`` function to the recipe file
1060(``.bb``) and replace `PACKAGENAME` with the name of the package you want
1061to attach to the ``postinst`` script. To apply the post-installation
1062script to the main package for the recipe, which is usually what is
1063required, specify
1064``${``\ :term:`PN`\ ``}`` in place of
1065PACKAGENAME.
1066
1067A post-installation function has the following structure::
1068
1069   pkg_postinst:PACKAGENAME() {
1070       # Commands to carry out
1071   }
1072
1073The script defined in the post-installation function is called when the
1074root filesystem is created. If the script succeeds, the package is
1075marked as installed.
1076
1077.. note::
1078
1079   Any RPM post-installation script that runs on the target should
1080   return a 0 exit code. RPM does not allow non-zero exit codes for
1081   these scripts, and the RPM package manager will cause the package to
1082   fail installation on the target.
1083
1084Sometimes it is necessary for the execution of a post-installation
1085script to be delayed until the first boot. For example, the script might
1086need to be executed on the device itself. To delay script execution
1087until boot time, you must explicitly mark post installs to defer to the
1088target. You can use ``pkg_postinst_ontarget()`` or call
1089``postinst_intercept delay_to_first_boot`` from ``pkg_postinst()``. Any
1090failure of a ``pkg_postinst()`` script (including exit 1) triggers an
1091error during the
1092:ref:`ref-tasks-rootfs` task.
1093
1094If you have recipes that use ``pkg_postinst`` function and they require
1095the use of non-standard native tools that have dependencies during
1096root filesystem construction, you need to use the
1097:term:`PACKAGE_WRITE_DEPS`
1098variable in your recipe to list these tools. If you do not use this
1099variable, the tools might be missing and execution of the
1100post-installation script is deferred until first boot. Deferring the
1101script to the first boot is undesirable and impossible for read-only
1102root filesystems.
1103
1104.. note::
1105
1106   There is equivalent support for pre-install, pre-uninstall, and post-uninstall
1107   scripts by way of ``pkg_preinst``, ``pkg_prerm``, and ``pkg_postrm``,
1108   respectively. These scrips work in exactly the same way as does
1109   ``pkg_postinst`` with the exception that they run at different times. Also,
1110   because of when they run, they are not applicable to being run at image
1111   creation time like ``pkg_postinst``.
1112
1113Testing
1114=======
1115
1116The final step for completing your recipe is to be sure that the
1117software you built runs correctly. To accomplish runtime testing, add
1118the build's output packages to your image and test them on the target.
1119
1120For information on how to customize your image by adding specific
1121packages, see ":ref:`dev-manual/customizing-images:customizing images`" section.
1122
1123Examples
1124========
1125
1126To help summarize how to write a recipe, this section provides some
1127recipe examples given various scenarios:
1128
1129-  `Building a single .c file package`_
1130
1131-  `Building a Makefile-based package`_
1132
1133-  `Building an Autotooled package`_
1134
1135-  `Building a Meson package`_
1136
1137-  `Splitting an application into multiple packages`_
1138
1139-  `Packaging externally produced binaries`_
1140
1141Building a Single .c File Package
1142---------------------------------
1143
1144Building an application from a single file that is stored locally (e.g. under
1145``files``) requires a recipe that has the file listed in the :term:`SRC_URI`
1146variable. Additionally, you need to manually write the :ref:`ref-tasks-compile`
1147and :ref:`ref-tasks-install` tasks. The :term:`S` variable defines the
1148directory containing the source code, which is set to :term:`WORKDIR` in this
1149case --- the directory BitBake uses for the build::
1150
1151   SUMMARY = "Simple helloworld application"
1152   SECTION = "examples"
1153   LICENSE = "MIT"
1154   LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
1155
1156   SRC_URI = "file://helloworld.c"
1157
1158   S = "${WORKDIR}"
1159
1160   do_compile() {
1161       ${CC} ${LDFLAGS} helloworld.c -o helloworld
1162   }
1163
1164   do_install() {
1165       install -d ${D}${bindir}
1166       install -m 0755 helloworld ${D}${bindir}
1167   }
1168
1169By default, the ``helloworld``, ``helloworld-dbg``, and ``helloworld-dev`` packages
1170are built. For information on how to customize the packaging process, see the
1171":ref:`dev-manual/new-recipe:splitting an application into multiple packages`"
1172section.
1173
1174Building a Makefile-Based Package
1175---------------------------------
1176
1177Applications built with GNU ``make`` require a recipe that has the source archive
1178listed in :term:`SRC_URI`. You do not need to add a :ref:`ref-tasks-compile`
1179step since by default BitBake starts the ``make`` command to compile the
1180application. If you need additional ``make`` options, you should store them in
1181the :term:`EXTRA_OEMAKE` or :term:`PACKAGECONFIG_CONFARGS` variables. BitBake
1182passes these options into the GNU ``make`` invocation. Note that a
1183:ref:`ref-tasks-install` task is still required. Otherwise, BitBake runs an
1184empty :ref:`ref-tasks-install` task by default.
1185
1186Some applications might require extra parameters to be passed to the
1187compiler. For example, the application might need an additional header
1188path. You can accomplish this by adding to the :term:`CFLAGS` variable. The
1189following example shows this::
1190
1191   CFLAGS:prepend = "-I ${S}/include "
1192
1193In the following example, ``lz4`` is a makefile-based package::
1194
1195   SUMMARY = "Extremely Fast Compression algorithm"
1196   DESCRIPTION = "LZ4 is a very fast lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems."
1197   HOMEPAGE = "https://github.com/lz4/lz4"
1198
1199   LICENSE = "BSD-2-Clause | GPL-2.0-only"
1200   LIC_FILES_CHKSUM = "file://lib/LICENSE;md5=ebc2ea4814a64de7708f1571904b32cc \
1201                       file://programs/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
1202                       file://LICENSE;md5=d57c0d21cb917fb4e0af2454aa48b956 \
1203                       "
1204
1205   PE = "1"
1206
1207   SRCREV = "d44371841a2f1728a3f36839fd4b7e872d0927d3"
1208
1209   SRC_URI = "git://github.com/lz4/lz4.git;branch=release;protocol=https \
1210              file://CVE-2021-3520.patch \
1211              "
1212   UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>.*)"
1213
1214   S = "${WORKDIR}/git"
1215
1216   CVE_STATUS[CVE-2014-4715] = "fixed-version: Fixed in r118, which is larger than the current version"
1217
1218   EXTRA_OEMAKE = "PREFIX=${prefix} CC='${CC}' CFLAGS='${CFLAGS}' DESTDIR=${D} LIBDIR=${libdir} INCLUDEDIR=${includedir} BUILD_STATIC=no"
1219
1220   do_install() {
1221           oe_runmake install
1222   }
1223
1224   BBCLASSEXTEND = "native nativesdk"
1225
1226Building an Autotooled Package
1227------------------------------
1228
1229Applications built with the Autotools such as ``autoconf`` and ``automake``
1230require a recipe that has a source archive listed in :term:`SRC_URI` and also
1231inherit the :ref:`ref-classes-autotools` class, which contains the definitions
1232of all the steps needed to build an Autotool-based application. The result of
1233the build is automatically packaged. And, if the application uses NLS for
1234localization, packages with local information are generated (one package per
1235language). Here is one example: (``hello_2.3.bb``)::
1236
1237   SUMMARY = "GNU Helloworld application"
1238   SECTION = "examples"
1239   LICENSE = "GPL-2.0-or-later"
1240   LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
1241
1242   SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
1243
1244   inherit autotools gettext
1245
1246The variable :term:`LIC_FILES_CHKSUM` is used to track source license changes
1247as described in the ":ref:`dev-manual/licenses:tracking license changes`"
1248section in the Yocto Project Overview and Concepts Manual. You can quickly
1249create Autotool-based recipes in a manner similar to the previous example.
1250
1251.. _ref-building-meson-package:
1252
1253Building a Meson Package
1254------------------------
1255
1256Applications built with the `Meson build system <https://mesonbuild.com/>`__
1257just need a recipe that has sources described in :term:`SRC_URI` and inherits
1258the :ref:`ref-classes-meson` class.
1259
1260The :oe_git:`ipcalc recipe </meta-openembedded/tree/meta-networking/recipes-support/ipcalc>`
1261is a simple example of an application without dependencies::
1262
1263   SUMMARY = "Tool to assist in network address calculations for IPv4 and IPv6."
1264   HOMEPAGE = "https://gitlab.com/ipcalc/ipcalc"
1265
1266   SECTION = "net"
1267
1268   LICENSE = "GPL-2.0-only"
1269   LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
1270
1271   SRC_URI = "git://gitlab.com/ipcalc/ipcalc.git;protocol=https;branch=master"
1272   SRCREV = "4c4261a47f355946ee74013d4f5d0494487cc2d6"
1273
1274   S = "${WORKDIR}/git"
1275
1276   inherit meson
1277
1278Applications with dependencies are likely to inherit the
1279:ref:`ref-classes-pkgconfig` class, as ``pkg-config`` is the default method
1280used by Meson to find dependencies and compile applications against them.
1281
1282Splitting an Application into Multiple Packages
1283-----------------------------------------------
1284
1285You can use the variables :term:`PACKAGES` and :term:`FILES` to split an
1286application into multiple packages.
1287
1288Here is an example that uses the ``libxpm`` recipe. By default,
1289this recipe generates a single package that contains the library along
1290with a few binaries. You can modify the recipe to split the binaries
1291into separate packages::
1292
1293   require xorg-lib-common.inc
1294
1295   SUMMARY = "Xpm: X Pixmap extension library"
1296   LICENSE = "MIT"
1297   LIC_FILES_CHKSUM = "file://COPYING;md5=51f4270b012ecd4ab1a164f5f4ed6cf7"
1298   DEPENDS += "libxext libsm libxt"
1299   PE = "1"
1300
1301   XORG_PN = "libXpm"
1302
1303   PACKAGES =+ "sxpm cxpm"
1304   FILES:cxpm = "${bindir}/cxpm"
1305   FILES:sxpm = "${bindir}/sxpm"
1306
1307In the previous example, we want to ship the ``sxpm`` and ``cxpm``
1308binaries in separate packages. Since ``bindir`` would be packaged into
1309the main :term:`PN` package by default, we prepend the :term:`PACKAGES` variable
1310so additional package names are added to the start of list. This results
1311in the extra ``FILES:*`` variables then containing information that
1312define which files and directories go into which packages. Files
1313included by earlier packages are skipped by latter packages. Thus, the
1314main :term:`PN` package does not include the above listed files.
1315
1316Packaging Externally Produced Binaries
1317--------------------------------------
1318
1319Sometimes, you need to add pre-compiled binaries to an image. For
1320example, suppose that there are binaries for proprietary code,
1321created by a particular division of a company. Your part of the company
1322needs to use those binaries as part of an image that you are building
1323using the OpenEmbedded build system. Since you only have the binaries
1324and not the source code, you cannot use a typical recipe that expects to
1325fetch the source specified in
1326:term:`SRC_URI` and then compile it.
1327
1328One method is to package the binaries and then install them as part of
1329the image. Generally, it is not a good idea to package binaries since,
1330among other things, it can hinder the ability to reproduce builds and
1331could lead to compatibility problems with ABI in the future. However,
1332sometimes you have no choice.
1333
1334The easiest solution is to create a recipe that uses the
1335:ref:`ref-classes-bin-package` class and to be sure that you are using default
1336locations for build artifacts.  In most cases, the
1337:ref:`ref-classes-bin-package` class handles "skipping" the configure and
1338compile steps as well as sets things up to grab packages from the appropriate
1339area. In particular, this class sets ``noexec`` on both the
1340:ref:`ref-tasks-configure` and :ref:`ref-tasks-compile` tasks, sets
1341``FILES:${PN}`` to "/" so that it picks up all files, and sets up a
1342:ref:`ref-tasks-install` task, which effectively copies all files from ``${S}``
1343to ``${D}``. The :ref:`ref-classes-bin-package` class works well when the files
1344extracted into ``${S}`` are already laid out in the way they should be laid out
1345on the target. For more information on these variables, see the :term:`FILES`,
1346:term:`PN`, :term:`S`, and :term:`D` variables in the Yocto Project Reference
1347Manual's variable glossary.
1348
1349.. note::
1350
1351   -  Using :term:`DEPENDS` is a good
1352      idea even for components distributed in binary form, and is often
1353      necessary for shared libraries. For a shared library, listing the
1354      library dependencies in :term:`DEPENDS` makes sure that the libraries
1355      are available in the staging sysroot when other recipes link
1356      against the library, which might be necessary for successful
1357      linking.
1358
1359   -  Using :term:`DEPENDS` also allows runtime dependencies between
1360      packages to be added automatically. See the
1361      ":ref:`overview-manual/concepts:automatically added runtime dependencies`"
1362      section in the Yocto Project Overview and Concepts Manual for more
1363      information.
1364
1365If you cannot use the :ref:`ref-classes-bin-package` class, you need to be sure you are
1366doing the following:
1367
1368-  Create a recipe where the
1369   :ref:`ref-tasks-configure` and
1370   :ref:`ref-tasks-compile` tasks do
1371   nothing: It is usually sufficient to just not define these tasks in
1372   the recipe, because the default implementations do nothing unless a
1373   Makefile is found in
1374   ``${``\ :term:`S`\ ``}``.
1375
1376   If ``${S}`` might contain a Makefile, or if you inherit some class
1377   that replaces :ref:`ref-tasks-configure` and :ref:`ref-tasks-compile` with custom
1378   versions, then you can use the
1379   ``[``\ :ref:`noexec <bitbake-user-manual/bitbake-user-manual-metadata:variable flags>`\ ``]``
1380   flag to turn the tasks into no-ops, as follows::
1381
1382      do_configure[noexec] = "1"
1383      do_compile[noexec] = "1"
1384
1385   Unlike :ref:`bitbake-user-manual/bitbake-user-manual-metadata:deleting a task`,
1386   using the flag preserves the dependency chain from the :ref:`ref-tasks-fetch`,
1387   :ref:`ref-tasks-unpack`, and :ref:`ref-tasks-patch` tasks to the
1388   :ref:`ref-tasks-install` task.
1389
1390-  Make sure your :ref:`ref-tasks-install` task installs the binaries
1391   appropriately.
1392
1393-  Ensure that you set up :term:`FILES`
1394   (usually
1395   ``FILES:${``\ :term:`PN`\ ``}``) to
1396   point to the files you have installed, which of course depends on
1397   where you have installed them and whether those files are in
1398   different locations than the defaults.
1399
1400Following Recipe Style Guidelines
1401=================================
1402
1403When writing recipes, it is good to conform to existing style guidelines.
1404See the ":doc:`../contributor-guide/recipe-style-guide`" in the Yocto Project
1405and OpenEmbedded Contributor Guide for reference.
1406
1407It is common for existing recipes to deviate a bit from this style.
1408However, aiming for at least a consistent style is a good idea. Some
1409practices, such as omitting spaces around ``=`` operators in assignments
1410or ordering recipe components in an erratic way, are widely seen as poor
1411style.
1412
1413Recipe Syntax
1414=============
1415
1416Understanding recipe file syntax is important for writing recipes. The
1417following list overviews the basic items that make up a BitBake recipe
1418file. For more complete BitBake syntax descriptions, see the
1419":doc:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata`"
1420chapter of the BitBake User Manual.
1421
1422-  *Variable Assignments and Manipulations:* Variable assignments allow
1423   a value to be assigned to a variable. The assignment can be static
1424   text or might include the contents of other variables. In addition to
1425   the assignment, appending and prepending operations are also
1426   supported.
1427
1428   The following example shows some of the ways you can use variables in
1429   recipes::
1430
1431      S = "${WORKDIR}/postfix-${PV}"
1432      CFLAGS += "-DNO_ASM"
1433      CFLAGS:append = " --enable-important-feature"
1434
1435-  *Functions:* Functions provide a series of actions to be performed.
1436   You usually use functions to override the default implementation of a
1437   task function or to complement a default function (i.e. append or
1438   prepend to an existing function). Standard functions use ``sh`` shell
1439   syntax, although access to OpenEmbedded variables and internal
1440   methods are also available.
1441
1442   Here is an example function from the ``sed`` recipe::
1443
1444      do_install () {
1445          autotools_do_install
1446          install -d ${D}${base_bindir}
1447          mv ${D}${bindir}/sed ${D}${base_bindir}/sed
1448          rmdir ${D}${bindir}/
1449      }
1450
1451   It is
1452   also possible to implement new functions that are called between
1453   existing tasks as long as the new functions are not replacing or
1454   complementing the default functions. You can implement functions in
1455   Python instead of shell. Both of these options are not seen in the
1456   majority of recipes.
1457
1458-  *Keywords:* BitBake recipes use only a few keywords. You use keywords
1459   to include common functions (``inherit``), load parts of a recipe
1460   from other files (``include`` and ``require``) and export variables
1461   to the environment (``export``).
1462
1463   The following example shows the use of some of these keywords::
1464
1465      export POSTCONF = "${STAGING_BINDIR}/postconf"
1466      inherit autoconf
1467      require otherfile.inc
1468
1469-  *Comments (#):* Any lines that begin with the hash character (``#``)
1470   are treated as comment lines and are ignored::
1471
1472      # This is a comment
1473
1474This next list summarizes the most important and most commonly used
1475parts of the recipe syntax. For more information on these parts of the
1476syntax, you can reference the
1477":doc:`bitbake:bitbake-user-manual/bitbake-user-manual-metadata`" chapter
1478in the BitBake User Manual.
1479
1480-  *Line Continuation (\\):* Use the backward slash (``\``) character to
1481   split a statement over multiple lines. Place the slash character at
1482   the end of the line that is to be continued on the next line::
1483
1484       VAR = "A really long \
1485              line"
1486
1487   .. note::
1488
1489      You cannot have any characters including spaces or tabs after the
1490      slash character.
1491
1492-  *Using Variables (${VARNAME}):* Use the ``${VARNAME}`` syntax to
1493   access the contents of a variable::
1494
1495      SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz"
1496
1497   .. note::
1498
1499      It is important to understand that the value of a variable
1500      expressed in this form does not get substituted automatically. The
1501      expansion of these expressions happens on-demand later (e.g.
1502      usually when a function that makes reference to the variable
1503      executes). This behavior ensures that the values are most
1504      appropriate for the context in which they are finally used. On the
1505      rare occasion that you do need the variable expression to be
1506      expanded immediately, you can use the
1507      :=
1508      operator instead of
1509      =
1510      when you make the assignment, but this is not generally needed.
1511
1512-  *Quote All Assignments ("value"):* Use double quotes around values in
1513   all variable assignments (e.g. ``"value"``). Here is an example::
1514
1515      VAR1 = "${OTHERVAR}"
1516      VAR2 = "The version is ${PV}"
1517
1518-  *Conditional Assignment (?=):* Conditional assignment is used to
1519   assign a value to a variable, but only when the variable is currently
1520   unset. Use the question mark followed by the equal sign (``?=``) to
1521   make a "soft" assignment used for conditional assignment. Typically,
1522   "soft" assignments are used in the ``local.conf`` file for variables
1523   that are allowed to come through from the external environment.
1524
1525   Here is an example where ``VAR1`` is set to "New value" if it is
1526   currently empty. However, if ``VAR1`` has already been set, it
1527   remains unchanged::
1528
1529      VAR1 ?= "New value"
1530
1531   In this next example, ``VAR1`` is left with the value "Original value"::
1532
1533      VAR1 = "Original value"
1534      VAR1 ?= "New value"
1535
1536-  *Appending (+=):* Use the plus character followed by the equals sign
1537   (``+=``) to append values to existing variables.
1538
1539   .. note::
1540
1541      This operator adds a space between the existing content of the
1542      variable and the new content.
1543
1544   Here is an example::
1545
1546      SRC_URI += "file://fix-makefile.patch"
1547
1548-  *Prepending (=+):* Use the equals sign followed by the plus character
1549   (``=+``) to prepend values to existing variables.
1550
1551   .. note::
1552
1553      This operator adds a space between the new content and the
1554      existing content of the variable.
1555
1556   Here is an example::
1557
1558      VAR =+ "Starts"
1559
1560-  *Appending (:append):* Use the ``:append`` operator to append values
1561   to existing variables. This operator does not add any additional
1562   space. Also, the operator is applied after all the ``+=``, and ``=+``
1563   operators have been applied and after all ``=`` assignments have
1564   occurred. This means that if ``:append`` is used in a recipe, it can
1565   only be overridden by another layer using the special ``:remove``
1566   operator, which in turn will prevent further layers from adding it back.
1567
1568   The following example shows the space being explicitly added to the
1569   start to ensure the appended value is not merged with the existing
1570   value::
1571
1572      CFLAGS:append = " --enable-important-feature"
1573
1574   You can also use
1575   the ``:append`` operator with overrides, which results in the actions
1576   only being performed for the specified target or machine::
1577
1578      CFLAGS:append:sh4 = " --enable-important-sh4-specific-feature"
1579
1580-  *Prepending (:prepend):* Use the ``:prepend`` operator to prepend
1581   values to existing variables. This operator does not add any
1582   additional space. Also, the operator is applied after all the ``+=``,
1583   and ``=+`` operators have been applied and after all ``=``
1584   assignments have occurred.
1585
1586   The following example shows the space being explicitly added to the
1587   end to ensure the prepended value is not merged with the existing
1588   value::
1589
1590      CFLAGS:prepend = "-I${S}/myincludes "
1591
1592   You can also use the
1593   ``:prepend`` operator with overrides, which results in the actions
1594   only being performed for the specified target or machine::
1595
1596      CFLAGS:prepend:sh4 = "-I${S}/myincludes "
1597
1598-  *Overrides:* You can use overrides to set a value conditionally,
1599   typically based on how the recipe is being built. For example, to set
1600   the :term:`KBRANCH` variable's
1601   value to "standard/base" for any target
1602   :term:`MACHINE`, except for
1603   qemuarm where it should be set to "standard/arm-versatile-926ejs",
1604   you would do the following::
1605
1606      KBRANCH = "standard/base"
1607      KBRANCH:qemuarm = "standard/arm-versatile-926ejs"
1608
1609   Overrides are also used to separate
1610   alternate values of a variable in other situations. For example, when
1611   setting variables such as
1612   :term:`FILES` and
1613   :term:`RDEPENDS` that are
1614   specific to individual packages produced by a recipe, you should
1615   always use an override that specifies the name of the package.
1616
1617-  *Indentation:* Use spaces for indentation rather than tabs. For
1618   shell functions, both currently work. However, it is a policy
1619   decision of the Yocto Project to use tabs in shell functions. Realize
1620   that some layers have a policy to use spaces for all indentation.
1621
1622-  *Using Python for Complex Operations:* For more advanced processing,
1623   it is possible to use Python code during variable assignments (e.g.
1624   search and replacement on a variable).
1625
1626   You indicate Python code using the ``${@python_code}`` syntax for the
1627   variable assignment::
1628
1629      SRC_URI = "ftp://ftp.info-zip.org/pub/infozip/src/zip${@d.getVar('PV',1).replace('.', '')}.tgz
1630
1631-  *Shell Function Syntax:* Write shell functions as if you were writing
1632   a shell script when you describe a list of actions to take. You
1633   should ensure that your script works with a generic ``sh`` and that
1634   it does not require any ``bash`` or other shell-specific
1635   functionality. The same considerations apply to various system
1636   utilities (e.g. ``sed``, ``grep``, ``awk``, and so forth) that you
1637   might wish to use. If in doubt, you should check with multiple
1638   implementations --- including those from BusyBox.
1639
1640