[OE-core] [PATCH 2/3] populate_sdk_base.bbclass: help rpm to pull in multilib toolchain

Robert Yang liezhi.yang at windriver.com
Mon Aug 17 02:27:11 UTC 2015



On 08/15/2015 04:55 PM, Richard Purdie wrote:
> On Thu, 2015-08-13 at 00:37 -0700, Robert Yang wrote:
>> When configure multilib, "bitbake <image_bb> -c populate_sdk" should
>> install all arch toolchains (for example, 32 and 64bit), but rpm not
>> handle the multilib requires correctly, for example:
>> lib32-packagegroup-core-standalone-sdk-target requires lib32-libc6, rpm
>> may pull in libc6 rather than lib32-libc6, if we directly use something
>> like IMAGE_INSTALL_append = " lib32-libc6", then it works well, so
>> update TOOLCHAIN_TARGET_TASK to include the RDEPENDS packages will fix
>> the issue.
>
> Whilst I understand why you're doing this, its rather sad that as the
> rpm multilib code is broken, we have to hack the core sdk code like this
> to work around it.
>
> Could/should we not put this into the rpm sdk backend instead?

Sorry, I can't understand what did you mean, do you mean put this into rpm
sdk backend such as meta/lib/oe/sdk.py ?

// Robert

>
> I also can't help this is just a bandaid and that we'll likely find
> other ways this breaks in the future, its not a complete solution to the
> issue :/.
>
> Cheers,
>
> Richard
>
>> [YOCTO #8089]
>>
>> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
>> ---
>>   meta/classes/populate_sdk_base.bbclass |   32 ++++++++++++++++++++++++++++++++
>>   1 file changed, 32 insertions(+)
>>
>> diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass
>> index a9e9bd7..c2491ea 100644
>> --- a/meta/classes/populate_sdk_base.bbclass
>> +++ b/meta/classes/populate_sdk_base.bbclass
>> @@ -83,8 +83,40 @@ POPULATE_SDK_POST_HOST_COMMAND_append = " write_host_sdk_manifest; "
>>   fakeroot python do_populate_sdk() {
>>       from oe.sdk import populate_sdk
>>       from oe.manifest import create_manifest, Manifest
>> +    import oe.packagedata
>>
>>       pn = d.getVar('PN', True)
>> +    # Help rpm to pull in multilib requires since it may not pull in
>> +    # them correctly, for example,
>> +    # lib32-packagegroup-core-standalone-sdk-target requires
>> +    # lib32-libc6, rpm may pull in libc6 rather than lib32-libc6, but
>> +    # directly use
>> +    # TOOLCHAIN_TARGET_TASK_append = " lib32-libc6" works well.
>> +    for pkg in (d.getVar('TOOLCHAIN_TARGET_TASK', True) or "").split():
>> +        sub_data = oe.packagedata.read_subpkgdata(pkg, d)
>> +        sub_rdep = sub_data.get("RDEPENDS_" + pkg)
>> +        if not sub_rdep:
>> +            continue
>> +        done = sub_rdep.split()
>> +        next = done
>> +        # Find all the rdepends on the dependency chain
>> +        while next:
>> +            new = []
>> +            for sub_pkg in next:
>> +                sub_data = oe.packagedata.read_subpkgdata(sub_pkg, d)
>> +                sub_pkg_rdep = sub_data.get("RDEPENDS_" + sub_pkg)
>> +                if not sub_pkg_rdep:
>> +                    continue
>> +                for p in sub_pkg_rdep.split():
>> +                    if p in done:
>> +                        continue
>> +                    if not p.startswith('(') and \
>> +                            oe.packagedata.has_subpkgdata(p, d):
>> +                        # It's a new rdep
>> +                        done.append(p)
>> +                        new.append(p)
>> +            next = new
>> +        d.appendVar('TOOLCHAIN_TARGET_TASK', ' ' + " ".join(done))
>>       runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", pn, d)
>>       runtime_mapping_rename("TOOLCHAIN_TARGET_TASK_ATTEMPTONLY", pn, d)
>>
>> --
>> 1.7.9.5
>>
>
>
>
>



More information about the Openembedded-core mailing list