[OE-core] [PATCH 22/23] populate_sdk_ext.bbclass: disable for multilib image

Robert Yang liezhi.yang at windriver.com
Fri Nov 10 06:27:22 UTC 2017


The following build doesn't work:
MACHINE ?= "qemux86-64"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "x86"

$ bitbake lib32-core-image-minimal -cpopulate_sdk_ext
[snip]
Exception: FileExistsError: [Errno 17] File exists: '/buildarea/lyang1/test_q64/tmp/sysroots-components/core2-64/openssl/sysroot-providers/openssl10' -> '/buildarea/lyang1/test_q64/tmp/work/qemux86_64-pokymllib32-linux/lib32-core-image-minimal/1.0-r0/lib32-recipe-sysroot/sysroot-providers/openssl10'
[snip]

The problem is populate_sdk_ext installs all multilib variants, and
extend_recipe_sysroot() handles foo-image depends lib32-foo-image, but doesn't
handle lib32-foo-image depends foo-image, we can use a lot of trick ways to make
it work:
1) Get foo-image's RECIPE_SYSROOT when build lib32-foo-image
2) Handle conflicts with foo-image.do_rootfs
3) Handle conflicts when "bitbake lib32-foo-image foo-image -cpopulate_sdk_ext"

And maybe other potential problems, this looks painful, fortunately, we don't
have to do that since "bitbake foo-image -cpopulate_sdk_ext" generate the same
eSDK as "bitbake lib32-foo-image -cpopulate_sdk_ext" in theory. So just disable
the build and print hint messages.

[YOCTO #12210]

Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
---
 meta/classes/populate_sdk_ext.bbclass | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass
index 07c7e82..da0e292 100644
--- a/meta/classes/populate_sdk_ext.bbclass
+++ b/meta/classes/populate_sdk_ext.bbclass
@@ -701,6 +701,23 @@ python do_sdk_depends() {
 }
 addtask sdk_depends
 
+# "bitbake lib32-foo-image -csdk_depends" doesn't work, use
+# "bitbake foo-image -csdk_depends" to replace of it, they will generate
+# the same depends.
+do_sdk_depends[prefuncs] = 'disable_for_multilib_image'
+python disable_for_multilib_image() {
+    mlprefix = d.getVar("MLPREFIX")
+    if mlprefix:
+        pn = d.getVar('PN')
+        bpn = d.getVar('BPN')
+        bb.fatal("do_sdk_depends for %s doesn't work, use %s to replace of it, " \
+            "they will generate the same dependencies and eSDK.\n" \
+            "For example, the following 2 commands will generate the same eSDK:\n" \
+            "$ bitbake %s -cpopulate_sdk_ext\n" \
+            "$ bitbake %s -cpopulate_sdk_ext\n" % (pn, bpn, bpn, pn))
+}
+
+
 do_sdk_depends[dirs] = "${WORKDIR}"
 do_sdk_depends[depends] = "${@get_ext_sdk_depends(d)}"
 do_sdk_depends[recrdeptask] = "${@d.getVarFlag('do_populate_sdk', 'recrdeptask', False)}"
-- 
2.7.4




More information about the Openembedded-core mailing list