summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-01-31 15:44:56 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-02-05 12:26:36 +0000
commit12118f74efd53ffd3d3e6b95b2fc1763dcaebd57 (patch)
tree9d4c880cac61f7c68895eac3d0cb13a87fe16bd5 /meta
parent2d055b787a59dab30beb4537fcf5504abec47a3a (diff)
downloadpoky-12118f74efd53ffd3d3e6b95b2fc1763dcaebd57.tar.gz
staging: Add extra hash handling code
Target build output, stored in do_populate_sysroot or do_package can depend not only upon direct dependencies but also indirect ones. A good example is linux-libc-headers. The toolchain depends on this but most target recipes do not. There are some headers which are not used by the toolchain build and do not change the toolchain task output, hence the task hashes can change without changing the sysroot output of that recipe yet they can influence others. A specific example is rtc.h which can change rtcwake.c in util-linux but is not used in the glibc or gcc build. To account for this, we need to account for the populate_sysroot hashes in the task output hashes. (From OE-Core rev: 1cf62882bbac543960e4815d117ffce0e53bda07) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/sstate.bbclass2
-rw-r--r--meta/classes/staging.bbclass33
2 files changed, 34 insertions, 1 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 17dcf4cc17..fd9acbab9b 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -94,7 +94,7 @@ SSTATE_ARCHS[vardepsexclude] = "ORIGNATIVELSBSTRING"
94 94
95SSTATE_MANMACH ?= "${SSTATE_PKGARCH}" 95SSTATE_MANMACH ?= "${SSTATE_PKGARCH}"
96 96
97SSTATECREATEFUNCS = "sstate_hardcode_path" 97SSTATECREATEFUNCS += "sstate_hardcode_path"
98SSTATECREATEFUNCS[vardeps] = "SSTATE_SCAN_FILES" 98SSTATECREATEFUNCS[vardeps] = "SSTATE_SCAN_FILES"
99SSTATEPOSTCREATEFUNCS = "" 99SSTATEPOSTCREATEFUNCS = ""
100SSTATEPREINSTFUNCS = "" 100SSTATEPREINSTFUNCS = ""
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass
index 25f77c7735..b8a14ff02e 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -624,3 +624,36 @@ python staging_taskhandler() {
624} 624}
625staging_taskhandler[eventmask] = "bb.event.RecipeTaskPreProcess" 625staging_taskhandler[eventmask] = "bb.event.RecipeTaskPreProcess"
626addhandler staging_taskhandler 626addhandler staging_taskhandler
627
628
629#
630# Target build output, stored in do_populate_sysroot or do_package can depend
631# not only upon direct dependencies but also indirect ones. A good example is
632# linux-libc-headers. The toolchain depends on this but most target recipes do
633# not. There are some headers which are not used by the toolchain build and do
634# not change the toolchain task output, hence the task hashes can change without
635# changing the sysroot output of that recipe yet they can influence others.
636#
637# A specific example is rtc.h which can change rtcwake.c in util-linux but is not
638# used in the glibc or gcc build. To account for this, we need to account for the
639# populate_sysroot hashes in the task output hashes.
640#
641python target_add_sysroot_deps () {
642 current_task = "do_" + d.getVar("BB_CURRENTTASK")
643 if current_task not in ["do_populate_sysroot", "do_package"]:
644 return
645
646 pn = d.getVar("PN")
647 if pn.endswith("-native"):
648 return
649
650 taskdepdata = d.getVar("BB_TASKDEPDATA", False)
651 deps = {}
652 for dep in taskdepdata.values():
653 if dep[1] == "do_populate_sysroot" and not dep[0].endswith(("-native", "-initial")) and "-cross-" not in dep[0]:
654 deps[dep[0]] = dep[6]
655
656 d.setVar("HASHEQUIV_EXTRA_SIGDATA", "\n".join("%s: %s" % (k, deps[k]) for k in sorted(deps.keys())))
657}
658SSTATECREATEFUNCS += "target_add_sysroot_deps"
659