[OE-core] [oe-core][PATCH V3] libgcc-common.inc: Fix symbol link to mutilib directories
Richard Purdie
richard.purdie at linuxfoundation.org
Mon Jan 23 12:22:09 UTC 2017
On Mon, 2017-01-23 at 00:29 -0800, Yuanjie Huang wrote:
> The multilib symbol links are created for gcc to locate libgcc files.
> Its source path contains TARGET_SYS of multilib libgcc. However, a
> multilib's TARGET_SYS is not generated correctly all the time now.
> For example,
>
> MACHINE = "qemumips64"
> DEFAULTTUNE = "mips64-n32"
> MULTILIBS = "multilib:lib64"
> DEFAULTTUNE_virtclass-multilib-lib64 = "mips64"
>
> In N32 libgcc, the symbol link for N64 is created as:
>
> 64 -> ../../../lib64/mips64-wrsmllib64-linux-gnun32/5.2.0/
>
> while it should be:
>
> 64 -> ../../../lib64/mips64-wrsmllib64-linux/5.2.0/
>
> This issue sometimes won't break compiler, since gcc also searches
> paths
> calculated with OS multilib directories beside multilib directories .
>
> This patch resolve the problem by reading TARGET_SYS from a localdata
> environment with proper multilib overrides.
>
> Signed-off-by: Yuanjie Huang <yuanjie.huang at windriver.com>
> ---
> meta/recipes-devtools/gcc/libgcc-common.inc | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc
> b/meta/recipes-devtools/gcc/libgcc-common.inc
> index 7a3b410..7198664 100644
> --- a/meta/recipes-devtools/gcc/libgcc-common.inc
> +++ b/meta/recipes-devtools/gcc/libgcc-common.inc
> @@ -106,20 +106,15 @@ fakeroot python do_multilib_install() {
> bb.warn("Tune %s doesn't have a baselib set.
> Skipping..." % tune)
> continue
>
> - tune_arch = tune_parameters['arch']
> tune_bitness = tune_baselib.replace('lib', '')
> if not tune_bitness:
> tune_bitness = '32' # /lib => 32bit lib
>
> - tune_abiextension = tune_parameters['abiextension']
> - if tune_abiextension:
> - libcextension = '-gnu' + tune_abiextension
> - else:
> - libcextension = ''
> + localdata = get_multilib_datastore(ml, d)
> + ml_target_sys = localdata.getVar('TARGET_SYS') or ''
>
> src = '../../../' + tune_baselib + '/' + \
> - tune_arch + d.getVar('TARGET_VENDOR') + 'ml' + ml + \
> - '-' + d.getVar('TARGET_OS') + libcextension + '/' +
> binv + '/'
> + ml_target_sys + '/' + binv + '/'
>
> dest = d.getVar('D') + d.getVar('libdir') + '/' + \
> d.getVar('TARGET_SYS') + '/' + binv + '/' + tune_bitness
This looks better, thanks. Looking at the function a bit more, I
suspect we should probably do something like:
tune_bitness = (localdata.getVar('baselib') or '').replace('lib', '')
and then drop the get_tune_parameters call entirely.
Cheers,
Richard
More information about the Openembedded-core
mailing list