Bug 10566

Summary: populate_sdk_ext: uninative.bbclass is a must
Product: [Build System, Metadata & Runtime] OE-Core Reporter: Robert Yang <liezhi.yang>
Component: coreAssignee: Paul Eggleton <bluelightning>
Status: RESOLVED FIXED QA Contact: Juan Ramos <juan.fernandox.ramos.frayle>
Severity: normal    
Priority: Medium+ CC: bluelightning, jose.perez.carranza, meta.mr.watcher, meta.watcher, richard.purdie, ross.burton
Version: 2.3   
Target Milestone: 2.3 M1   
Hardware: x86   
OS: Multiple   
Whiteboard:
OS type for building Yocto: --- Type of Regression: ---
Verified: Documentation change: No (bug/feature does not impact docs)

Description Robert Yang 2016-11-01 16:10:19 UTC
If uninative is not in INHERIT, there will be a lot of warnings like the following when install the ext sdk:
WARNING: The quilt-native:do_configure sig is computed to be 2be53622b8c5b6e8156053bfa5fdd825, but the sig is locked to 1dea2d1ace9b9bea1e9564b9c6709b40 in SIGGEN_LOCKEDSIGS_t-x86-64
The quilt-native:do_compile sig is computed to be 71aeabc1dc38d575e8d4a52e1c8d1f07, but the sig is locked to 29116ced7d8dd7f44435df0bbb1b2f27 in SIGGEN_LOCKEDSIGS_t-x86-64
The quilt-native:do_install sig is computed to be 1a741cd3eff119e3dd1c0f085c1df589, but the sig is locked to 490303612172994c44d6f6245c2b0a7c in SIGGEN_LOCKEDSIGS_t-x86-64
The quilt-native:do_populate_sysroot sig is computed to be 598615a6dee5023311f9860759f73af4, but the sig is locked to 3a422026a617d3a3df48813cb588bc3b in SIGGEN_LOCKEDSIGS_t-x86-64

The bitbake-diffsigs shows that the difference is caused by
BUILD_CXXFLAGS's -D_GLIBCXX_USE_CXX11_ABI=0 which is added by 
uninative.bbclass. This is because INHERIT += "uninative" is in
extracted ext sdk's conf/local.conf.

And when do build in the ext sdk fater extracted:
ERROR: quilt-native-0.64-r0 do_configure: Taskhash mismatch 2be53622b8c5b6e8156053bfa5fdd825 versus 1dea2d1ace9b9bea1e9564b9c6709b40 for /buildarea/lyang1/sdk_ext2/layers/oe-core/meta/recipes-devtools/quilt/quilt-native_0.64.bb.do_configure
ERROR: Taskhash mismatch 2be53622b8c5b6e8156053bfa5fdd825 versus 1dea2d1ace9b9bea1e9564b9c6709b40 for /buildarea/lyang1/sdk_ext2/layers/oe-core/meta/recipes-devtools/quilt/quilt-native_0.64.bb.do_configure

If we patch meta/classes/populate_sdk_ext.bbclass to remove uninative:

diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass
index 0f0525d..af2680d 100644
--- a/meta/classes/populate_sdk_ext.bbclass
+++ b/meta/classes/populate_sdk_ext.bbclass
@@ -284,8 +284,11 @@ python copy_buildsystem () {
 
             f.write('DL_DIR = "${TOPDIR}/downloads"\n')
 
-            f.write('INHERIT += "%s"\n' % 'uninative')
-            f.write('UNINATIVE_CHECKSUM[%s] = "%s"\n\n' % (d.getVar('BUILD_ARCH', True), uninative_checksum))
+            # Don't inherit uninative if the build isn't using it
+            if bb.data.inherits_class('uninative', d):
+                f.write('INHERIT += "%s"\n' % 'uninative')
+                f.write('UNINATIVE_CHECKSUM[%s] = "%s"\n\n' % (d.getVar('BUILD_ARCH', True), uninative_checksum))
+
             f.write('CONF_VERSION = "%s"\n\n' % d.getVar('CONF_VERSION', False))
 
             # Some classes are not suitable for SDK, remove them from INHERIT

This still can't fix the problem, there would be strange errors during install ext sdk:

NOTE: Executing RunQueue Tasks
ERROR: Task quilt-native.do_fetch attempted to execute unexpectedly
ERROR: Task quilt-native.do_unpack attempted to execute unexpectedly
ERROR: Task quilt-native.do_patch attempted to execute unexpectedly
ERROR: Task quilt-native.do_configure attempted to execute unexpectedly
ERROR: Task quilt-native.do_compile attempted to execute unexpectedly
ERROR: Task quilt-native.do_install attempted to execute unexpectedly

This is because nativesdk tools can't run:

$ ls ./sysroots/x86_64-wrlinuxsdk-linux/usr/bin/file.real
./sysroots/x86_64-wrlinuxsdk-linux/usr/bin/file.real

$ ./sysroots/x86_64-wrlinuxsdk-linux/usr/bin/file.real
bash: ./sysroots/x86_64-wrlinuxsdk-linux/usr/bin/file.real: No such file or directory

I think that we need add checking in meta/classes/populate_sdk_ext.bbclass to check whether uninative.bbclass is inherited, and error out if not.
Comment 1 Paul Eggleton 2016-11-02 02:22:49 UTC
I tried to make it not break without uninative - since uninative is only enabled by default in poky but not OE-Core's default configuration - but we might as well give up on that idea. It'll be slightly more difficult for users unfortunately, but it seems we've painted ourselves into a corner.

I have a patch here to make do_populate_sdk_ext error out immediately in case uninative is not inherited.
Comment 2 Robert Yang 2016-11-02 02:32:21 UTC
Thanks Paul, I re-assign the bug to you. Errors out immediately will make our lives easier:-).
Comment 3 Ross Burton 2016-11-08 17:27:23 UTC
Fixed in oe-core b59eee7bebd413c7abe5626f69508e1fe47dd0ac.
Comment 4 Paul Eggleton 2016-11-21 23:04:20 UTC
There's been some further discussion - we are going to try to change the native configuration so that the eSDK can work in the default OE-Core configuration, see Richard's email:

http://lists.openembedded.org/pipermail/openembedded-architecture/2016-November/000324.html
Comment 6 Ross Burton 2016-11-30 17:16:24 UTC
*** Bug 10645 has been marked as a duplicate of this bug. ***