* What are _virtual providers? and other Suffixes?
@ 2013-08-19 22:51 Brad Litterell
2013-08-20 22:27 ` Paul Eggleton
0 siblings, 1 reply; 7+ messages in thread
From: Brad Litterell @ 2013-08-19 22:51 UTC (permalink / raw)
To: yocto@yoctoproject.org
[-- Attachment #1: Type: text/plain, Size: 1088 bytes --]
I searched the Yocto Mega Manual, but am still somewhat mystified by the suffix formatting of various variable - especially virtual ones like this:
PREFERRED_PROVIDER_virtual/gettext = "gettext"
PREFERRED_PROVIDER_virtual/kernel_am335x-evm = "linux-ti-staging"
PREFERRED_PROVIDER_virtual/bootloader_am335x-evm = "u-boot-ti-staging"
Also, there seems to be some sort of prioritization going on with the multiple levels underscore characters in places like this:
# Set the PREFERRED_PROVIDER for jpeg functionality based on the MACHINE
# architecture. For armv7a devices libjpeg-turbo should be used to take
# advantage of the SIMD instructions.
PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
PREFERRED_PROVIDER_jpeg_armv5te = "jpeg"
(all examples from the arago project in arago-prefs.inc)
Is there a succinct way of viewing these suffixes that will allow me to wrap my head around their various & myriad versions?
Am I right in assuming the "variable name" consists of the uppercase parse (regardless of number of underscores)?
Thanks,
Brad
[-- Attachment #2: Type: text/html, Size: 4556 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: What are _virtual providers? and other Suffixes?
2013-08-19 22:51 What are _virtual providers? and other Suffixes? Brad Litterell
@ 2013-08-20 22:27 ` Paul Eggleton
2013-08-20 23:16 ` Brad Litterell
0 siblings, 1 reply; 7+ messages in thread
From: Paul Eggleton @ 2013-08-20 22:27 UTC (permalink / raw)
To: Brad Litterell; +Cc: yocto
Hi Brad,
On Monday 19 August 2013 22:51:04 Brad Litterell wrote:
> I searched the Yocto Mega Manual, but am still somewhat mystified by the
> suffix formatting of various variable - especially virtual ones like this:
>
>
> PREFERRED_PROVIDER_virtual/gettext = "gettext"
>
> PREFERRED_PROVIDER_virtual/kernel_am335x-evm = "linux-ti-staging"
>
> PREFERRED_PROVIDER_virtual/bootloader_am335x-evm = "u-boot-ti-staging"
These are setting PREFERRED_PROVIDER for a number of targets. "virtual/xyz" is
a convention we use where there are multiple providers for a particular
component, so a recipe that requires that component can have virtual/xyz in
its DEPENDS, each provider declares virtual/xyz in its PROVIDES, and then in
configuration the desired recipe to provide that can be selected via
PREFERRED_PROVIDER_virtual/xyz = "...".
The second two examples have an additional override which makes them only
applicable for a specific machine (am335x-evm). If you want to know how this
mechanism works have a look at this:
http://docs.openembedded.org/bitbake/html/ch02.html#id439023
(We're in the process of updating the BitBake manual, so this old version will have to suffice.)
> Also, there seems to be some sort of prioritization going on with the
> multiple levels underscore characters in places like this:
>
>
> # Set the PREFERRED_PROVIDER for jpeg functionality based on the MACHINE
>
> # architecture. For armv7a devices libjpeg-turbo should be used to take
>
> # advantage of the SIMD instructions.
>
> PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
>
> PREFERRED_PROVIDER_jpeg_armv5te = "jpeg"
>
>
> (all examples from the arago project in arago-prefs.inc)
>
> Is there a succinct way of viewing these suffixes that will allow me to wrap
> my head around their various & myriad versions?
OVERRIDES is listed in order so that overrides for the later items are
preferred. If you run bitbake -e | less and search for OVERRIDES (with the /
key) you can see what the value is for the global environment; here is an
example for my current configuration:
# $OVERRIDES [3 operations]
# set conf/bitbake.conf:670
# "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:build-${BUILD_OS}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}:forcevariable"
# set conf/bitbake.conf:671
# [vardepsexclude] "MACHINEOVERRIDES"
# postdot /home/paul/poky/poky/meta/conf/distro/include/tclibc-eglibc.inc:9
# "${LIBCOVERRIDE}"
# computed:
# "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:build-${BUILD_OS}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}:forcevariable${LIBCOVERRIDE}"
OVERRIDES="linux:i586:build-linux:pn-bblayers:x86:qemuall:qemux86:poky:class-target:forcevariable:libc-glibc"
Putting the values of all these variables into OVERRIDES gives us a way of
setting variable values per-machine, per-architecture etc. Based on the
above value, if I had:
SOMEVAR = "value1"
SOMEVAR_qemux86 = "anothervalue"
SOMEVAR_i586 = "yetanothervalue"
The computed value of SOMEVAR would be "anothervalue". If MACHINE were
changed to, say, "qemumips", then OVERRIDES would change and the value
of SOMEVAR would become "value1".
> Am I right in assuming the "variable name" consists of the uppercase parse
> (regardless of number of underscores)?
That is our (fairly strict) convention in OpenEmbedded, but FWIW I don't
think bitbake itself enforces that; it's all dependent on what is in OVERRIDES
and where the _ character appears in the left hand side of the assignment
statement.
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: What are _virtual providers? and other Suffixes?
2013-08-20 22:27 ` Paul Eggleton
@ 2013-08-20 23:16 ` Brad Litterell
2013-08-20 23:33 ` Paul Eggleton
0 siblings, 1 reply; 7+ messages in thread
From: Brad Litterell @ 2013-08-20 23:16 UTC (permalink / raw)
To: Paul Eggleton; +Cc: <yocto@yoctoproject.org>
Hi Paul,
Thanks for taking the time to explain, very enlightening. I think I understood it, please allow me to play back my understanding:
1. _virtual is part of the variable name, and is not a special type of override.
2. PREFERRED_PROVIDER_virtual/kernel_am335x-evm breaks into: "PREFERRED_PROVIDER_virtual/kernel" with an override condition of "am335x-evm"
3. So for the jpeg case:
>> PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
>>
>> PREFERRED_PROVIDER_jpeg_armv5te = "jpeg"
Could this have also been _virtual/jpeg? It's just that some components use the _virtual convention and others don't?
Do I have it right?
Thanks,
Brad
On Aug 20, 2013, at 3:27 PM, Paul Eggleton <paul.eggleton@linux.intel.com>
wrote:
> Hi Brad,
>
> On Monday 19 August 2013 22:51:04 Brad Litterell wrote:
>> I searched the Yocto Mega Manual, but am still somewhat mystified by the
>> suffix formatting of various variable - especially virtual ones like this:
>>
>>
>> PREFERRED_PROVIDER_virtual/gettext = "gettext"
>>
>> PREFERRED_PROVIDER_virtual/kernel_am335x-evm = "linux-ti-staging"
>>
>> PREFERRED_PROVIDER_virtual/bootloader_am335x-evm = "u-boot-ti-staging"
>
> These are setting PREFERRED_PROVIDER for a number of targets. "virtual/xyz" is
> a convention we use where there are multiple providers for a particular
> component, so a recipe that requires that component can have virtual/xyz in
> its DEPENDS, each provider declares virtual/xyz in its PROVIDES, and then in
> configuration the desired recipe to provide that can be selected via
> PREFERRED_PROVIDER_virtual/xyz = "...".
>
> The second two examples have an additional override which makes them only
> applicable for a specific machine (am335x-evm). If you want to know how this
> mechanism works have a look at this:
>
> http://docs.openembedded.org/bitbake/html/ch02.html#id439023
>
> (We're in the process of updating the BitBake manual, so this old version will have to suffice.)
>
>> Also, there seems to be some sort of prioritization going on with the
>> multiple levels underscore characters in places like this:
>>
>>
>> # Set the PREFERRED_PROVIDER for jpeg functionality based on the MACHINE
>>
>> # architecture. For armv7a devices libjpeg-turbo should be used to take
>>
>> # advantage of the SIMD instructions.
>>
>> PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
>>
>> PREFERRED_PROVIDER_jpeg_armv5te = "jpeg"
>>
>>
>> (all examples from the arago project in arago-prefs.inc)
>>
>> Is there a succinct way of viewing these suffixes that will allow me to wrap
>> my head around their various & myriad versions?
>
> OVERRIDES is listed in order so that overrides for the later items are
> preferred. If you run bitbake -e | less and search for OVERRIDES (with the /
> key) you can see what the value is for the global environment; here is an
> example for my current configuration:
>
> # $OVERRIDES [3 operations]
> # set conf/bitbake.conf:670
> # "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:build-${BUILD_OS}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}:forcevariable"
> # set conf/bitbake.conf:671
> # [vardepsexclude] "MACHINEOVERRIDES"
> # postdot /home/paul/poky/poky/meta/conf/distro/include/tclibc-eglibc.inc:9
> # "${LIBCOVERRIDE}"
> # computed:
> # "${TARGET_OS}:${TRANSLATED_TARGET_ARCH}:build-${BUILD_OS}:pn-${PN}:${MACHINEOVERRIDES}:${DISTROOVERRIDES}:${CLASSOVERRIDE}:forcevariable${LIBCOVERRIDE}"
> OVERRIDES="linux:i586:build-linux:pn-bblayers:x86:qemuall:qemux86:poky:class-target:forcevariable:libc-glibc"
>
> Putting the values of all these variables into OVERRIDES gives us a way of
> setting variable values per-machine, per-architecture etc. Based on the
> above value, if I had:
>
> SOMEVAR = "value1"
> SOMEVAR_qemux86 = "anothervalue"
> SOMEVAR_i586 = "yetanothervalue"
>
> The computed value of SOMEVAR would be "anothervalue". If MACHINE were
> changed to, say, "qemumips", then OVERRIDES would change and the value
> of SOMEVAR would become "value1".
>
>> Am I right in assuming the "variable name" consists of the uppercase parse
>> (regardless of number of underscores)?
>
> That is our (fairly strict) convention in OpenEmbedded, but FWIW I don't
> think bitbake itself enforces that; it's all dependent on what is in OVERRIDES
> and where the _ character appears in the left hand side of the assignment
> statement.
>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: What are _virtual providers? and other Suffixes?
2013-08-20 23:16 ` Brad Litterell
@ 2013-08-20 23:33 ` Paul Eggleton
2013-08-20 23:42 ` Brad Litterell
0 siblings, 1 reply; 7+ messages in thread
From: Paul Eggleton @ 2013-08-20 23:33 UTC (permalink / raw)
To: Brad Litterell; +Cc: yocto
On Tuesday 20 August 2013 23:16:56 Brad Litterell wrote:
> Thanks for taking the time to explain, very enlightening. I think I
> understood it, please allow me to play back my understanding:
>
> 1. _virtual is part of the variable name, and is not a special type of
> override.
Actually, virtual/kernel is an override as well. The way a few variables,
including PREFERRED_PROVIDER, are used is that OVERRIDES is set to include the
item being dealt with when the variable is read, thus specifically with
PREFERRED_PROVIDER you always override it with the name of the target you wish
to select the provider for.
> 2. PREFERRED_PROVIDER_virtual/kernel_am335x-evm breaks into:
> "PREFERRED_PROVIDER_virtual/kernel" with an override condition of
> "am335x-evm"
Outside of the part of the code where it's actually read, yes. Within that
code the override "virtual/kernel" will be applied when it's looking to see
what the provider for "virtual/kernel" should be, and thus it will get the
appropriate value for the PREFERRED_PROVIDER variable. So technically the
variable is just PREFERRED_PROVIDER.
> 3. So for the jpeg case:
> >> PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
> >>
> >> PREFERRED_PROVIDER_jpeg_armv5te = "jpeg"
>
> Could this have also been _virtual/jpeg? It's just that some components use
> the _virtual convention and others don't?
The prefix is virtual/ not _virtual, and as I mentioned earlier virtual/ is
just a convention (although there are a few isolated parts of the code that
specifically look for the virtual/ prefix). The mechanism will work in the same
way here; recipes that need jpeg decoding have "jpeg" in DEPENDS and providing
libjpeg-turbo has jpeg in its PROVIDES, which it does, we can select between
two different recipes providing that - jpeg and libjpeg-turbo (where the latter
is provided at all of course, i.e. when you have the meta-oe layer in your
configuration).
I don't think there's any special reason we don't have virtual/jpeg rather
than jpeg here other than that having multiple jpeg decoding libraries is a
relatively new situation compared to others such as virtual/kernel, and there
are already a bunch of recipes out there referring to "jpeg" in their DEPENDS.
(One wonders why there is a need for multiple jpeg decoding libraries in the
first place, but that's a different can of worms...)
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: What are _virtual providers? and other Suffixes?
2013-08-20 23:33 ` Paul Eggleton
@ 2013-08-20 23:42 ` Brad Litterell
2013-08-21 14:26 ` Paul Eggleton
0 siblings, 1 reply; 7+ messages in thread
From: Brad Litterell @ 2013-08-20 23:42 UTC (permalink / raw)
To: Paul Eggleton; +Cc: <yocto@yoctoproject.org>
Hi Paul,
Thanks - that makes it clearer. But now I have one other question to ask:
if virtual/xyz is added to overrides when the item is dealt with, then in that case P_P_virtual/xyz_am335 has two overrides hanging off of the base variable PREFERRED_PROVIDER.
You also said earlier that the latest override applies, so is there some rule for multiple conditionals on a variable?
E.g. What happens in a case like the following?
OVERRIDES="foo1:bar2:car3"
VARIABLE_foo1_bar2 = "both"
VARIABLE_car3 = "last one"
what does VARIABLE wind up? The first is "more specific" in that it matches two values in overrides, whereas car is last, but less specific.
Thanks & sorry if I'm missing something simple.
Brad
On Aug 20, 2013, at 4:33 PM, Paul Eggleton <paul.eggleton@linux.intel.com>
wrote:
> On Tuesday 20 August 2013 23:16:56 Brad Litterell wrote:
>> Thanks for taking the time to explain, very enlightening. I think I
>> understood it, please allow me to play back my understanding:
>>
>> 1. _virtual is part of the variable name, and is not a special type of
>> override.
>
> Actually, virtual/kernel is an override as well. The way a few variables,
> including PREFERRED_PROVIDER, are used is that OVERRIDES is set to include the
> item being dealt with when the variable is read, thus specifically with
> PREFERRED_PROVIDER you always override it with the name of the target you wish
> to select the provider for.
>
>> 2. PREFERRED_PROVIDER_virtual/kernel_am335x-evm breaks into:
>> "PREFERRED_PROVIDER_virtual/kernel" with an override condition of
>> "am335x-evm"
>
> Outside of the part of the code where it's actually read, yes. Within that
> code the override "virtual/kernel" will be applied when it's looking to see
> what the provider for "virtual/kernel" should be, and thus it will get the
> appropriate value for the PREFERRED_PROVIDER variable. So technically the
> variable is just PREFERRED_PROVIDER.
>
>> 3. So for the jpeg case:
>>>> PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
>>>>
>>>> PREFERRED_PROVIDER_jpeg_armv5te = "jpeg"
>>
>> Could this have also been _virtual/jpeg? It's just that some components use
>> the _virtual convention and others don't?
>
> The prefix is virtual/ not _virtual, and as I mentioned earlier virtual/ is
> just a convention (although there are a few isolated parts of the code that
> specifically look for the virtual/ prefix). The mechanism will work in the same
> way here; recipes that need jpeg decoding have "jpeg" in DEPENDS and providing
> libjpeg-turbo has jpeg in its PROVIDES, which it does, we can select between
> two different recipes providing that - jpeg and libjpeg-turbo (where the latter
> is provided at all of course, i.e. when you have the meta-oe layer in your
> configuration).
>
> I don't think there's any special reason we don't have virtual/jpeg rather
> than jpeg here other than that having multiple jpeg decoding libraries is a
> relatively new situation compared to others such as virtual/kernel, and there
> are already a bunch of recipes out there referring to "jpeg" in their DEPENDS.
> (One wonders why there is a need for multiple jpeg decoding libraries in the
> first place, but that's a different can of worms...)
>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: What are _virtual providers? and other Suffixes?
2013-08-20 23:42 ` Brad Litterell
@ 2013-08-21 14:26 ` Paul Eggleton
2013-08-21 16:27 ` Brad Litterell
0 siblings, 1 reply; 7+ messages in thread
From: Paul Eggleton @ 2013-08-21 14:26 UTC (permalink / raw)
To: Brad Litterell; +Cc: yocto
Hi Brad,
On Tuesday 20 August 2013 23:42:36 Brad Litterell wrote:
> Thanks - that makes it clearer. But now I have one other question to ask:
>
> if virtual/xyz is added to overrides when the item is dealt with, then in
> that case P_P_virtual/xyz_am335 has two overrides hanging off of the base
> variable PREFERRED_PROVIDER.
>
> You also said earlier that the latest override applies, so is there some
> rule for multiple conditionals on a variable?
Yes, effectively all must be in OVERRIDES for the assignment statement to take
effect.
> E.g. What happens in a case like the following?
>
> OVERRIDES="foo1:bar2:car3"
>
> VARIABLE_foo1_bar2 = "both"
> VARIABLE_car3 = "last one"
>
> what does VARIABLE wind up? The first is "more specific" in that it matches
> two values in overrides, whereas car is last, but less specific.
I would have thought that the value would have been "last one" however
experimentation shows that "both" is what you actually get. I'm not exactly
sure why. In practice I don't think we hit this kind of situation too often
though, i.e. a mix of double and single overrides where the single override
needs to take precedence.
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: What are _virtual providers? and other Suffixes?
2013-08-21 14:26 ` Paul Eggleton
@ 2013-08-21 16:27 ` Brad Litterell
0 siblings, 0 replies; 7+ messages in thread
From: Brad Litterell @ 2013-08-21 16:27 UTC (permalink / raw)
To: Paul Eggleton; +Cc: <yocto@yoctoproject.org>
Paul, thanks so much!
On Aug 21, 2013, at 7:26 AM, Paul Eggleton <paul.eggleton@linux.intel.com> wrote:
> Hi Brad,
>
> On Tuesday 20 August 2013 23:42:36 Brad Litterell wrote:
>> Thanks - that makes it clearer. But now I have one other question to ask:
>>
>> if virtual/xyz is added to overrides when the item is dealt with, then in
>> that case P_P_virtual/xyz_am335 has two overrides hanging off of the base
>> variable PREFERRED_PROVIDER.
>>
>> You also said earlier that the latest override applies, so is there some
>> rule for multiple conditionals on a variable?
>
> Yes, effectively all must be in OVERRIDES for the assignment statement to take
> effect.
>
>> E.g. What happens in a case like the following?
>>
>> OVERRIDES="foo1:bar2:car3"
>>
>> VARIABLE_foo1_bar2 = "both"
>> VARIABLE_car3 = "last one"
>>
>> what does VARIABLE wind up? The first is "more specific" in that it matches
>> two values in overrides, whereas car is last, but less specific.
>
> I would have thought that the value would have been "last one" however
> experimentation shows that "both" is what you actually get. I'm not exactly
> sure why. In practice I don't think we hit this kind of situation too often
> though, i.e. a mix of double and single overrides where the single override
> needs to take precedence.
>
> Cheers,
> Paul
>
> --
>
> Paul Eggleton
> Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-08-21 16:27 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-19 22:51 What are _virtual providers? and other Suffixes? Brad Litterell
2013-08-20 22:27 ` Paul Eggleton
2013-08-20 23:16 ` Brad Litterell
2013-08-20 23:33 ` Paul Eggleton
2013-08-20 23:42 ` Brad Litterell
2013-08-21 14:26 ` Paul Eggleton
2013-08-21 16:27 ` Brad Litterell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.