[OE-core] [PATCH] sstate: Implement a setscene dependency validation routine to allow skipping of some sstate installation
Otavio Salvador
otavio at ossystems.com.br
Fri Nov 16 15:58:27 UTC 2012
On Fri, Nov 16, 2012 at 1:32 PM, Richard Purdie <
richard.purdie at linuxfoundation.org> wrote:
> This is a first attempt at logic to determine when a sstate dependency
> needs
> to be installed and when it does not. Its a start at the logic and errs on
> the
>
s/errs/errors/
> side of caution, as it gets wider testing, we can refine the logic as
> needed.
>
> This code should allow a significant performance speedup to certain
> workflows, for
> example "bitbake xxx-image -c rootfs" will not populate the target sysroot.
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> ---
> diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
> index c085c62..470e0ee 100644
> --- a/meta/classes/sstate.bbclass
> +++ b/meta/classes/sstate.bbclass
> @@ -620,3 +620,55 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash,
> sq_hashfn, d):
>
> return ret
>
> +BB_SETSCENE_DEPVALID = "setscene_depvalid"
> +
> +def setscene_depvalid(task, taskdependees, notneeded, d):
> + # taskdependees is a dict of tasks which depend on task, each being a
> 3 item list of [PN, TASKNAME, FILENAME]
> + # task is included in taskdependees too
> +
> + bb.debug(2, "Considering setscene task: %s" %
> (str(taskdependees[task])))
> +
> + def isNative(x):
> + return x.endswith("-native")
> + def isNativeCross(x):
> + return x.endswith("-native") or x.endswith("-cross") or
> x.endswith("-cross-initial")
> + def isSafeDep(x):
> + if x in ["quilt-native", "autoconf-native", "automake-native",
> "gnu-config-native", "libtool-native", "pkgconfig-native", "gcc-cross",
> "binutils-cross"]:
> + return True
> + return False
> +
> + # We can skip these "safe" dependencies since the aren't runtime
> dependencies, just build time
> + if isSafeDep(taskdependees[task][0]) and taskdependees[task][1] ==
> "do_populate_sysroot":
> + return True
> +
> + # We only need to trigger populate_lic through direct dependencies
> + if taskdependees[task][1] == "do_populate_lic":
> + return True
> +
> + for dep in taskdependees:
> + bb.debug(2, " considering dependency: %s" %
> (str(taskdependees[dep])))
> + if task == dep:
> + continue
> + if dep in notneeded:
> + continue
> + # do_package_write_* and do_package doesn't need do_package
> + if taskdependees[task][1] == "do_package" and
> taskdependees[dep][1] in ['do_package', 'do_package_write_deb',
> 'do_package_write_ipk', 'do_package_write_rpm']:
> + continue
>
I understand why you does this but it would be better if we had a central
place to have the do_package_write_$pkg recorded or when adding new type
this could be forgotten.
> + # do_package_write_* and do_package doesn't need
> do_populate_sysroot
> + if taskdependees[task][1] == "do_populate_sysroot" and
> taskdependees[dep][1] in ['do_package', 'do_package_write_deb',
> 'do_package_write_ipk', 'do_package_write_rpm']:
> + continue
> + # Native/Cross packages don't exist and are noexec anyway
> + if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1]
> in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm']:
> + continue
> + # Native/Cross populate_sysroot need their dependencies
> + if isNativeCross(taskdependees[task][0]) and
> isNativeCross(taskdependees[dep][0]) and taskdependees[task][1] ==
> 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':
> + return False
> + # Target populate_sysroot do not need their dependencies
> + if taskdependees[task][1] == 'do_populate_sysroot' and
> taskdependees[dep][1] == 'do_populate_sysroot':
> + continue
> +
> + # Safe fallthrough default
> + bb.debug(2, " Default setscene dependency fall through due to
> dependency: %s" % (str(taskdependees[dep])))
> + return False
> + return True
> +
>
--
Otavio Salvador O.S. Systems
E-mail: otavio at ossystems.com.br http://www.ossystems.com.br
Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20121116/28708fb7/attachment-0002.html>
More information about the Openembedded-core
mailing list