[OE-core] [PATCH 16/16] sstatesig.py: Add handling for machine specific module depenedencies
Martin Jansa
martin.jansa at gmail.com
Thu Feb 23 14:41:20 UTC 2012
On Thu, Feb 23, 2012 at 01:38:25PM +0000, Richard Purdie wrote:
> Adding dependencies on machine specific recipes from generic packages
> causes a rebuild of the generic package per machine if using signatures
> for the stamp files which is unacceptable.
>
> We need to declare that RRECOMMENDS on kernel-module-* are safe
> and that we shouldn't care about these machine specific dependencies
> from a stamp perspective. This change adds code which does this.
>
> It depends on a change in bitbake to expose the dataCache object
> which can be used to make the calculations we need to allow this to
> work correctly.
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
Improves qemux86-64copy build times significantly :)
Acked-by: Martin Jansa <Martin.Jansa at gmail.com>
> ---
> meta/lib/oe/sstatesig.py | 26 ++++++++++++++++++++------
> 1 files changed, 20 insertions(+), 6 deletions(-)
>
> diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py
> index ee7cbad..5a64882 100644
> --- a/meta/lib/oe/sstatesig.py
> +++ b/meta/lib/oe/sstatesig.py
> @@ -1,6 +1,6 @@
> import bb.siggen
>
> -def sstate_rundepfilter(fn, recipename, task, dep, depname):
> +def sstate_rundepfilter(fn, recipename, task, dep, depname, dataCache):
> # Return True if we should keep the dependency, False to drop it
> def isNative(x):
> return x.endswith("-native")
> @@ -8,13 +8,16 @@ def sstate_rundepfilter(fn, recipename, task, dep, depname):
> return x.endswith("-cross") or x.endswith("-cross-initial") or x.endswith("-cross-intermediate")
> def isNativeSDK(x):
> return x.endswith("-nativesdk")
> + def isKernel(fn):
> + inherits = " ".join(dataCache.inherits[fn])
> + return inherits.find("module-base.bbclass") != -1 or inherits.find("linux-kernel-base.bbclass") != -1
>
> # Always include our own inter-task dependencies
> if recipename == depname:
> return True
>
> # Quilt (patch application) changing isn't likely to affect anything
> - if depname == "quilt-native":
> + if depname == "quilt-native" and recipename != "quilt-native":
> return False
> # Don't change native/cross/nativesdk recipe dependencies any further
> if isNative(recipename) or isCross(recipename) or isNativeSDK(recipename):
> @@ -30,6 +33,17 @@ def sstate_rundepfilter(fn, recipename, task, dep, depname):
> if depname in ['sysvinit-inittab', 'shadow-securetty', 'opkg-config-base', 'netbase', 'formfactor', 'xserver-xf86-config', 'pointercal', 'base-files']:
> return False
>
> + # Kernel modules are well namespaced. We don't want to depend on the kernel's checksum
> + # if we're just doing an RRECOMMENDS_xxx = "kernel-module-*", not least because the checksum
> + # is machine specific.
> + # Therefore if we're not a kernel or a module recipe (inheriting the kernel classes)
> + # and we reccomend a kernel-module, we exclude the dependency.
> + depfn = dep.rsplit(".", 1)[0]
> + if dataCache and isKernel(depfn) and not isKernel(fn):
> + for pkg in dataCache.runrecs[fn]:
> + if " ".join(dataCache.runrecs[fn][pkg]).find("kernel-module-") != -1:
> + return False
> +
> # Default to keep dependencies
> return True
>
> @@ -37,15 +51,15 @@ class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic):
> name = "OEBasic"
> def init_rundepcheck(self, data):
> pass
> - def rundep_check(self, fn, recipename, task, dep, depname):
> - return sstate_rundepfilter(fn, recipename, task, dep, depname)
> + def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None):
> + return sstate_rundepfilter(fn, recipename, task, dep, depname, dataCache)
>
> class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
> name = "OEBasicHash"
> def init_rundepcheck(self, data):
> pass
> - def rundep_check(self, fn, recipename, task, dep, depname):
> - return sstate_rundepfilter(fn, recipename, task, dep, depname)
> + def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None):
> + return sstate_rundepfilter(fn, recipename, task, dep, depname, dataCache)
>
> # Insert these classes into siggen's namespace so it can see and select them
> bb.siggen.SignatureGeneratorOEBasic = SignatureGeneratorOEBasic
> --
> 1.7.5.4
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
--
Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20120223/3292f4fe/attachment-0002.sig>
More information about the Openembedded-core
mailing list