[yocto] Conditional Configuration Fragments (Build Flavours)

Tim O' Callaghan tocallaghan at meyn.com
Mon Jun 16 02:41:53 PDT 2014


Hi,

This problem is similar to the 'build flavour' problem. That is you have a vanilla build, that you want to adjust to taste (e.g. different package configurations.) I'm migrating from 1.2 to 1.6, and I was about to send a post to the list about this, to see if anyone had solved it in an off the shelf-standard yocto way yet. 

The approach I use, is the inclusion of an externally generated file to set flavor specific configurations. This file is put in your build/conf, and then included in the recipes that need flavoring.
e.g. a sample flavour include file:
------ build/conf/flavor.inc -----
# create variable for flavouring
FLAVOUR_IMAGE_KERNELTYPE="DEBUG"
# IIRC export into global namespace, to that the build system uses is in hash generation, 
# and the variable is exported into the shell environment during build
export FLAVOUR_IMAGE_KERNELTYPE
------ cut -------

Then in the recipes that require flavouring you add:
-----
require flavour.inc
-----

You can then use the FLAVOUR_IMAGE_KERNELTYPE in the recipe for picking the right build options, or set other appropriate stuff. do_compile_prepend is useful for that. As the flavor variable is also exported in the build shell environment for the recipe, compile time decisions can be made for application pre-configuration purposes.

Am I right in assuming that 'build flavours' or something like it is not a standard feature? 

Tim.

-----Original Message-----
From: yocto-bounces at yoctoproject.org [mailto:yocto-bounces at yoctoproject.org] On Behalf Of Paul Eggleton
Sent: dinsdag 10 juni 2014 18:09
To: Bruce Ashfield; Pierre Yves MORDRET
Cc: yocto at yoctoproject.org
Subject: Re: [yocto] Conditional Configuration Fragments

On Tuesday 10 June 2014 12:04:19 Bruce Ashfield wrote:
> On 14-06-10 11:11 AM, Pierre Yves MORDRET wrote:
> > On Monday 09 June 2014 09:56:20 Paul Eggleton
<paul.eggleton at linux.intel.com> wrote:
> >> On Monday 09 June 2014 12:41:36 Bruce Ashfield wrote:
> >>> On 14-06-09 11:26 AM, Pierre Yves MORDRET wrote:
> >>>> Hello,
> >>>> 
> >>>> I really don't know whether this is feasible or not, but I'm 
> >>>> trying to build a yocto image (custom image) with conditional 
> >>>> configuration fragments.
> >>>> 
> >>>> Today I have 2 image type: one for deployment purpose and another 
> >>>> for debug purpose. Debug images is only a superset of deployment 
> >>>> image with additional debug capabilities: nothing else.
> >>>> 
> >>>> However now I would like to add additional linux kernel features 
> >>>> to this debug image (ex: CONFIG_DEBUG_INFO=y).
> >>>> 
> >>>> I want to add this feature into debug image, but NOT in 
> >>>> deployment image.
> >>>> 
> >>>> I was thinking to create a .bbappend to my linux .bb file, but 
> >>>> again I don't see how to use .bbappend in a conditional way 
> >>>> (based on image name for instance)
> >>>> 
> >>>> Do you have any idea to perform such request ?
> >>> 
> >>> Fragments are either just added to the SRC_URI or KERNEL_FEATURES 
> >>> via the normal variable assignment rules.
> >>> 
> >>> So if you have something that you can test on (image/distro 
> >>> feature as an example), you can use anonymous python and do a 
> >>> conditional assignment.
> >>> 
> >>> Others on the list may have more elegant suggestions!
> >> 
> >> This can't work for what Pierre is asking for. You can't have a 
> >> single recipe built differently depending on what image is being 
> >> built - our system does not work that way. At a basic level, 
> >> recipes create packages, and then the image recipe selects which 
> >> packages should go into the image.
> >> 
> >> Given that the kernel does not produce named packages in our 
> >> system, I'm not sure we currently have a way to build two different 
> >> kernel recipes and select one in one image and another in another 
> >> image (which is the way we normally handle this kind of requirement 
> >> with other recipes.) Probably the only way to do this is to have 
> >> two completely separate build directories.
> > 
> > Many Thanks for your answers.
> > Thus I was thinking of making 2 separate linux.bb, one for 
> > deployment and the other for debug (i.e. linux-debug.bb) and update 
> > PREFERRED_PROVIDER_virtual/kernel accordingly. But is there an 
> > automatic way to select proper .bb (linux.bb or linux-debug.bb) file 
> > like setting this variable(PREFERRED_PROVIDER_virtual/kernel) within 
> > the .bb image file ? Won't it work ?
> > 
> > Another option which is coming on top of my mind:
> > SRC_URI_append_<image-name> = " file://configuration_segment.cfg"
> > Is it something realistic and working ?
> 
> The image name would have to be an OVERRIDE value for variables.
> Last I checked it wasn't, but perhaps Paul can straighten out that 
> point as well :)

No, you can't do this, nor can you select PREFERRED_PROVIDER from the image. 
You cannot influence the building of other recipes from the image recipe at all.

As I said before, the only way to make this work would be if the kernel produced uniquely named packages that could be selected from the image; our kernel recipes don't currently do that though, and it would be a fairly major change in order to do that.

Cheers,
Paul

-- 

Paul Eggleton
Intel Open Source Technology Centre
--
_______________________________________________
yocto mailing list
yocto at yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto



More information about the yocto mailing list