[OE-core] uninative and recipe parsing

Cuero Bugot cbugot at sierrawireless.com
Mon Mar 12 11:04:44 UTC 2018


Hi all,

When you add several layers, recipe parsing can take a (very) long time. In our case it takes more than a couple minutes [1]. Fortunately it is supposed to happens once, except when you use uninative (poky's default) where it happens twice (the two first times you build).
I think this is not an intentional behavior so I dug it a little bit and here is what I found:

When inheriting meta/classes/uninative.bbclass, it registers 2 functions on build events: one to fetch the uninative tarball (at bb.event.BuildStarted) and the other one to set variables in the datastore (at bb.event.ConfigParsed).
The function that set the variables [2] to the datastore first check that the uninative blob is in the build tree, so even though it is supposed to happen at recipe parsing, the variable are only really set when the build really start (bb.event.BuildStarted), after the recipes have been parsed!

So I think there is bug in the current behavior as:
	* Either the uninative variables are not important for the recipe parsing, and then they should be added in BB_HASHCONFIG_WHITELIST
	* Or the variables should matter for the recipe parsing so they should be set before the parsing and not in between parsing and build.

I assumed the later, so a simple fix is to register the two functions on the same event: bb.event.ConfigParsed.

Note: We are currently using pyro, but I checked that the master branch should exhibit the same behavior (same code).

[1]: it matters to us as we are doing Continuous Integration and do clean builds (with sstate cache) on every pull requests and master branch commits. The automatic test full cycle take about 20 minutes. We launch 2 bitbake commands during that process. Parsing recipe take about 2-4 minutes, which is significant enough when trying to reduce the waiting and parallel builds/tests.
[2]: the uninative changed variables are: NATIVELSBSTRING, SSTATEPOSTUNPACKFUNCS

Proposed patch:

diff --git a/meta/classes/uninative.bbclass b/meta/classes/uninative.bbclass
index a410647..5713bb8 100644
--- a/meta/classes/uninative.bbclass
+++ b/meta/classes/uninative.bbclass
@@ -9,7 +9,7 @@ UNINATIVE_TARBALL ?= "${BUILD_ARCH}-nativesdk-libc.tar.bz2"
 UNINATIVE_DLDIR ?= "${DL_DIR}/uninative/"
 
 addhandler uninative_event_fetchloader
-uninative_event_fetchloader[eventmask] = "bb.event.BuildStarted"
+uninative_event_fetchloader[eventmask] = "bb.event.ConfigParsed"
 
 addhandler uninative_event_enable
 uninative_event_enable[eventmask] = "bb.event.ConfigParsed"




More information about the Openembedded-core mailing list