| Summary: | Enabling multilib does not taint all sstate content | ||
|---|---|---|---|
| Product: | [Build System, Metadata & Runtime] OE-Core | Reporter: | Paul Gortmaker <paulg> |
| Component: | core | Assignee: | Richard Purdie <richard.purdie> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | Medium | CC: | meta.mr.watcher, meta.watcher |
| Version: | unspecified | ||
| Target Milestone: | 1.8 | ||
| Hardware: | x86 | ||
| OS: | Multiple | ||
| Whiteboard: | |||
| OS type for building Yocto: | --- | Type of Regression: | --- |
| Verified: | Documentation change: | No (bug/feature does not impact docs) | |
|
Description
Paul Gortmaker
2014-06-18 19:46:39 UTC
I've looked into this and I can't see anything wrong. I started with a qemux86-64 build with no multilib enabled. This installed libraries into /lib/ as expected. I then added the lines you mentioned. This causes 64 bit to be installed into lib64 as expected. When I compared the signatures for the stat task I see: $ bitbake-diffsigs tmp/stamps/core2-64-poky-linux/stat/3.3-r0.do_populate_sysroot.sigdata.2* tmp/stamps/core2-64-poky-linux/stat/3.3-r0.do_populate_sysroot.sigdata.b* basehash changed from 113c64dfdd151517f1863005203894a5 to 2cf30b9c6750056d063202a5c728857d Variable baselib value changed from 'lib' to 'lib64' i.e. the hash did change and it did so since baselib changed. This would trigger a rebuild (the 2* and b* hashes were before and after the change). I did find an unrelated problem where another change elsewhere triggered a rebuild of everything and will send a separate patch for that. So as far as I can tell, sstate is tainted for multilib? On a hunch, I tried looking at the actual build output and you are correct, it does not update correctly after the multilib changes. The reason is quite simple too, stat doesn't have a separate source and build directory so the system just goes into the directory and does "make". The core system libs and loader shims have changed but make doesn't realise than and the binary isn't rebuilt. So sstate is perfectly fine, the reuse of the existing build directory is problematic though and its effectively a make issue. Starting from a clean tmpdir obviously avoids the problem. Using something which has separate build support like autotools (B != S) also avoids the problem. The following patches have been merged to various key classes to try and improve this: http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=444ae98131f7f9e962d102f408eb867ab53a452a http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=6bd2d9d395fe7c97a0a9645ca9379b366bb64afa http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=c1f4b1f76627c76f23c2037a1e9dad10a31ec258 http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=d5881b7b94b195ad3858d46992ba6edbb2c95f31 Its probably not perfect but it is probably as good as we can get without complete removal of the source and the unpack/patch again. |