<br><br><div class="gmail_quote">On Fri, Nov 16, 2012 at 1:32 PM, Richard Purdie <span dir="ltr"><<a href="mailto:richard.purdie@linuxfoundation.org" target="_blank">richard.purdie@linuxfoundation.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is a first attempt at logic to determine when a sstate dependency needs<br>
to be installed and when it does not. Its a start at the logic and errs on the<br></blockquote><div><br></div><div>s/errs/errors/</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
side of caution, as it gets wider testing, we can refine the logic as needed.<br>
<br>
This code should allow a significant performance speedup to certain workflows, for<br>
example "bitbake xxx-image -c rootfs" will not populate the target sysroot.<br>
<br>
Signed-off-by: Richard Purdie <<a href="mailto:richard.purdie@linuxfoundation.org">richard.purdie@linuxfoundation.org</a>><br>
---<br>
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass<br>
index c085c62..470e0ee 100644<br>
--- a/meta/classes/sstate.bbclass<br>
+++ b/meta/classes/sstate.bbclass<br>
@@ -620,3 +620,55 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d):<br>
<br>
return ret<br>
<br>
+BB_SETSCENE_DEPVALID = "setscene_depvalid"<br>
+<br>
+def setscene_depvalid(task, taskdependees, notneeded, d):<br>
+ # taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME]<br>
+ # task is included in taskdependees too<br>
+<br>
+ bb.debug(2, "Considering setscene task: %s" % (str(taskdependees[task])))<br>
+<br>
+ def isNative(x):<br>
+ return x.endswith("-native")<br>
+ def isNativeCross(x):<br>
+ return x.endswith("-native") or x.endswith("-cross") or x.endswith("-cross-initial")<br>
+ def isSafeDep(x):<br>
+ if x in ["quilt-native", "autoconf-native", "automake-native", "gnu-config-native", "libtool-native", "pkgconfig-native", "gcc-cross", "binutils-cross"]:<br>
+ return True<br>
+ return False<br>
+<br>
+ # We can skip these "safe" dependencies since the aren't runtime dependencies, just build time<br>
+ if isSafeDep(taskdependees[task][0]) and taskdependees[task][1] == "do_populate_sysroot":<br>
+ return True<br>
+<br>
+ # We only need to trigger populate_lic through direct dependencies<br>
+ if taskdependees[task][1] == "do_populate_lic":<br>
+ return True<br>
+<br>
+ for dep in taskdependees:<br>
+ bb.debug(2, " considering dependency: %s" % (str(taskdependees[dep])))<br>
+ if task == dep:<br>
+ continue<br>
+ if dep in notneeded:<br>
+ continue<br>
+ # do_package_write_* and do_package doesn't need do_package<br>
+ 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']:<br>
+ continue<br></blockquote><div><br></div><div>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.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ # do_package_write_* and do_package doesn't need do_populate_sysroot<br>
+ 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']:<br>
+ continue<br>
+ # Native/Cross packages don't exist and are noexec anyway<br>
+ if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_deb', 'do_package_write_ipk', 'do_package_write_rpm']:<br>
+ continue<br>
+ # Native/Cross populate_sysroot need their dependencies<br>
+ if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]) and taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':<br>
+ return False<br>
+ # Target populate_sysroot do not need their dependencies<br>
+ if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':<br>
+ continue<br>
+<br>
+ # Safe fallthrough default<br>
+ bb.debug(2, " Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])))<br>
+ return False<br>
+ return True<br>
+<br></blockquote><div><br></div></div>-- <br>Otavio Salvador O.S. Systems<br>E-mail: <a href="mailto:otavio@ossystems.com.br" target="_blank">otavio@ossystems.com.br</a> <a href="http://www.ossystems.com.br" target="_blank">http://www.ossystems.com.br</a><br>
Mobile: +55 53 9981-7854 <a href="http://projetos.ossystems.com.br" target="_blank">http://projetos.ossystems.com.br</a><br><br>