Smart does not currently have a way to say "Install these things, but if any of them -- or their dependencies fail -- just keep trying." Due to this, the complementary (and related attemptonly) install happens one package at a time. For a limited set of packages this is fine from a performance perspective. However on a large filesystem (such as core-image-sato), enabling -dev, -doc, -dbg, and -staticdev to the build can result in many additional hours of install.
Created attachment 1113 [details] Patch to speed up many complementary installs
The original code implementation attempts to install one package at a time, and then moves on to the next one. For a large (complementary) package set, this can take a significant amount of time. The existing code was written in this way because it is possible for complementary packages (or attemptonly packages) to fail, because certain dependencies may not have been generated -- or the attemptonly package itself might not exist. Without making a change to smart, a way to resolve this issue would be run the attemptonly/complementary install as a single unit -- and then upon failure fall back to the old style one at a time install. See the attached patch.
The failure mode for the recommend based install can be replicated with the eglibc package and not installing the eglibc-extra-nss-dev. See the oe-core mailing list. Date approx April 1-2nd.. title: [OE-Core][PATCH] eglibc: Let eglibc-extra-nss-dev exist as empty package (I'm unable to login to the list server to get a direct link to the thread.)
oe-core commit: bdf07b1698d228dc7ff555199a269b1ff8ceca19