Once all the .bb
files have been
parsed, BitBake starts to build the target (core-image-sato
in the previous section's example) and looks for providers of that target.
Once a provider is selected, BitBake resolves all the dependencies for
the target.
In the case of core-image-sato
, it would lead to
packagegroup-core-x11-sato
,
which in turn leads to recipes like matchbox-terminal
,
pcmanfm
and gthumb
.
These recipes in turn depend on eglibc
and the toolchain.
Sometimes a target might have multiple providers. A common example is "virtual/kernel", which is provided by each kernel package. Each machine often selects the best kernel provider by using a line similar to the following in the machine configuration file:
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto"
The default PREFERRED_PROVIDER
is the provider with the same name as the target.
Understanding how providers are chosen is made complicated by the fact
that multiple versions might exist.
BitBake defaults to the highest version of a provider.
Version comparisons are made using the same method as Debian.
You can use the
PREFERRED_VERSION
variable to specify a particular version (usually in the distro configuration).
You can influence the order by using the
DEFAULT_PREFERENCE
variable.
By default, files have a preference of "0".
Setting the DEFAULT_PREFERENCE
to "-1" makes the
package unlikely to be used unless it is explicitly referenced.
Setting the DEFAULT_PREFERENCE
to "1" makes it likely the package is used.
PREFERRED_VERSION
overrides any DEFAULT_PREFERENCE
setting.
DEFAULT_PREFERENCE
is often used to mark newer and more experimental package
versions until they have undergone sufficient testing to be considered stable.
In summary, BitBake has created a list of providers, which is prioritized, for each target.