Patchwork gcc: use ${base_lib} to match gcc default configuration

login
register
mail settings
Submitter Kumar Gala
Date Aug. 4, 2011, 6:54 p.m.
Message ID <1312484099-29314-1-git-send-email-galak@kernel.crashing.org>
Download mbox | patch
Permalink /patch/9315/
State New, archived
Headers show

Comments

Kumar Gala - Aug. 4, 2011, 6:54 p.m.
Rather than tweaking MULTILIB_DIRNAMES & MULTILIB_OSDIRNAMES like is
done for x86-64 via 64bithack.patch.  We can just go with gcc defaults
and utilize ${base_lib} for where to find gcc libs.

Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
 .../gcc/gcc-cross-intermediate.inc                 |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Kumar Gala - Aug. 5, 2011, 4:53 p.m.
On Aug 4, 2011, at 1:54 PM, Kumar Gala wrote:

> Rather than tweaking MULTILIB_DIRNAMES & MULTILIB_OSDIRNAMES like is
> done for x86-64 via 64bithack.patch.  We can just go with gcc defaults
> and utilize ${base_lib} for where to find gcc libs.
> 
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
> .../gcc/gcc-cross-intermediate.inc                 |    2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> index df5958a..7b1bb38 100644
> --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> @@ -34,7 +34,7 @@ do_compile () {
> do_install () {
> 	oe_runmake 'DESTDIR=${D}' install
> 	install -d ${D}${target_base_libdir}/
> -	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/* ${D}${target_base_libdir}/
> +	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/
> 
> 	# We don't really need this (here shares/ contains man/, info/, locale/).
> 	rm -rf ${D}${datadir}/
> -- 
> 1.7.3.4

ping

- k
Saul Wold - Aug. 5, 2011, 4:56 p.m.
On 08/05/2011 09:53 AM, Kumar Gala wrote:
>
> On Aug 4, 2011, at 1:54 PM, Kumar Gala wrote:
>
>> Rather than tweaking MULTILIB_DIRNAMES&  MULTILIB_OSDIRNAMES like is
>> done for x86-64 via 64bithack.patch.  We can just go with gcc defaults
>> and utilize ${base_lib} for where to find gcc libs.
>>
>> Signed-off-by: Kumar Gala<galak@kernel.crashing.org>
>> ---
>> .../gcc/gcc-cross-intermediate.inc                 |    2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>> index df5958a..7b1bb38 100644
>> --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>> @@ -34,7 +34,7 @@ do_compile () {
>> do_install () {
>> 	oe_runmake 'DESTDIR=${D}' install
>> 	install -d ${D}${target_base_libdir}/
>> -	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/* ${D}${target_base_libdir}/
>> +	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/
>>
>> 	# We don't really need this (here shares/ contains man/, info/, locale/).
>> 	rm -rf ${D}${datadir}/
>> --
>> 1.7.3.4
>
> ping

Kumar,

I need to check with Richard on the bitbake.conf and this change, it's 
in my pending queue for a pull later today.

Sau!

>
> - k
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
Yu Ke - Aug. 11, 2011, 6:36 a.m.
Hi Kumar,

I just found this patch breaks the qemux86-64 lib64 multilib build.

the error log is as below:

| mv: cannot stat 
`/home/kyu3/sdb/multilib2/tmp/work/x86_64-pokymllib64-linux/lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4/image/home/kyu3/sdb/multilib2/tmp/sysroots/x86_64-linux/usr/x86_64-pokymllib64-linux/lib64/*': 
No such file or directory
NOTE: package lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4: task 
do_install: Failed
ERROR: Task 1557 
(virtual:multilib:lib64:/home/kyu3/src/poky/meta/recipes-devtools/gcc/gcc-cross-intermediate_4.6.bb, 
do_install) failed with exit code

the error is caused by command in gcc-cross-intermediate.inc: 
do_install(): "mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* 
${D}${target_base_libdir}/"

and the reason is that: ${baselib} is lib64 in multilib case, while the 
files to be moved is still in ${D}${exec_prefix}/${TARGET_SYS}/lib/*, 
so mv will fail.

The fix may be either reverting this commit, or putting the file to 
${baselib} instead of lib. I'd like to get your input before going further.

Regards
Ke

on 2011-8-5 2:54, Kumar Gala wrote:
> Rather than tweaking MULTILIB_DIRNAMES&  MULTILIB_OSDIRNAMES like is
> done for x86-64 via 64bithack.patch.  We can just go with gcc defaults
> and utilize ${base_lib} for where to find gcc libs.
>
> Signed-off-by: Kumar Gala<galak@kernel.crashing.org>
> ---
>   .../gcc/gcc-cross-intermediate.inc                 |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> index df5958a..7b1bb38 100644
> --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> @@ -34,7 +34,7 @@ do_compile () {
>   do_install () {
>   	oe_runmake 'DESTDIR=${D}' install
>   	install -d ${D}${target_base_libdir}/
> -	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/* ${D}${target_base_libdir}/
> +	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/
>
>   	# We don't really need this (here shares/ contains man/, info/, locale/).
>   	rm -rf ${D}${datadir}/
Kumar Gala - Aug. 11, 2011, 6:47 a.m.
revert this is not acceptable as that will break ppc64 builds.

I think you need to look at 64bithack.patch and if we really should be using it for multilib builds.

- k

On Aug 11, 2011, at 1:36 AM, Yu Ke wrote:

> Hi Kumar,
> 
> I just found this patch breaks the qemux86-64 lib64 multilib build.
> 
> the error log is as below:
> 
> | mv: cannot stat `/home/kyu3/sdb/multilib2/tmp/work/x86_64-pokymllib64-linux/lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4/image/home/kyu3/sdb/multilib2/tmp/sysroots/x86_64-linux/usr/x86_64-pokymllib64-linux/lib64/*': No such file or directory
> NOTE: package lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4: task do_install: Failed
> ERROR: Task 1557 (virtual:multilib:lib64:/home/kyu3/src/poky/meta/recipes-devtools/gcc/gcc-cross-intermediate_4.6.bb, do_install) failed with exit code
> 
> the error is caused by command in gcc-cross-intermediate.inc: do_install(): "mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/"
> 
> and the reason is that: ${baselib} is lib64 in multilib case, while the files to be moved is still in ${D}${exec_prefix}/${TARGET_SYS}/lib/*, so mv will fail.
> 
> The fix may be either reverting this commit, or putting the file to ${baselib} instead of lib. I'd like to get your input before going further.
> 
> Regards
> Ke
> 
> on 2011-8-5 2:54, Kumar Gala wrote:
>> Rather than tweaking MULTILIB_DIRNAMES&  MULTILIB_OSDIRNAMES like is
>> done for x86-64 via 64bithack.patch.  We can just go with gcc defaults
>> and utilize ${base_lib} for where to find gcc libs.
>> 
>> Signed-off-by: Kumar Gala<galak@kernel.crashing.org>
>> ---
>>  .../gcc/gcc-cross-intermediate.inc                 |    2 +-
>>  1 files changed, 1 insertions(+), 1 deletions(-)
>> 
>> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>> index df5958a..7b1bb38 100644
>> --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>> @@ -34,7 +34,7 @@ do_compile () {
>>  do_install () {
>>  	oe_runmake 'DESTDIR=${D}' install
>>  	install -d ${D}${target_base_libdir}/
>> -	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/* ${D}${target_base_libdir}/
>> +	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/
>> 
>>  	# We don't really need this (here shares/ contains man/, info/, locale/).
>>  	rm -rf ${D}${datadir}/
Yu Ke - Aug. 11, 2011, 7:45 a.m.
Ok, CC Richard to see if it is OK to not use 64bithack.patch

Regards
Ke

on 2011-8-11 14:47, Kumar Gala wrote:
> revert this is not acceptable as that will break ppc64 builds.
>
> I think you need to look at 64bithack.patch and if we really should be using it for multilib builds.
>
> - k
>
> On Aug 11, 2011, at 1:36 AM, Yu Ke wrote:
>
>> Hi Kumar,
>>
>> I just found this patch breaks the qemux86-64 lib64 multilib build.
>>
>> the error log is as below:
>>
>> | mv: cannot stat `/home/kyu3/sdb/multilib2/tmp/work/x86_64-pokymllib64-linux/lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4/image/home/kyu3/sdb/multilib2/tmp/sysroots/x86_64-linux/usr/x86_64-pokymllib64-linux/lib64/*': No such file or directory
>> NOTE: package lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4: task do_install: Failed
>> ERROR: Task 1557 (virtual:multilib:lib64:/home/kyu3/src/poky/meta/recipes-devtools/gcc/gcc-cross-intermediate_4.6.bb, do_install) failed with exit code
>>
>> the error is caused by command in gcc-cross-intermediate.inc: do_install(): "mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/"
>>
>> and the reason is that: ${baselib} is lib64 in multilib case, while the files to be moved is still in ${D}${exec_prefix}/${TARGET_SYS}/lib/*, so mv will fail.
>>
>> The fix may be either reverting this commit, or putting the file to ${baselib} instead of lib. I'd like to get your input before going further.
>>
>> Regards
>> Ke
>>
>> on 2011-8-5 2:54, Kumar Gala wrote:
>>> Rather than tweaking MULTILIB_DIRNAMES&   MULTILIB_OSDIRNAMES like is
>>> done for x86-64 via 64bithack.patch.  We can just go with gcc defaults
>>> and utilize ${base_lib} for where to find gcc libs.
>>>
>>> Signed-off-by: Kumar Gala<galak@kernel.crashing.org>
>>> ---
>>>   .../gcc/gcc-cross-intermediate.inc                 |    2 +-
>>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>>> index df5958a..7b1bb38 100644
>>> --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>>> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
>>> @@ -34,7 +34,7 @@ do_compile () {
>>>   do_install () {
>>>   	oe_runmake 'DESTDIR=${D}' install
>>>   	install -d ${D}${target_base_libdir}/
>>> -	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/* ${D}${target_base_libdir}/
>>> +	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/
>>>
>>>   	# We don't really need this (here shares/ contains man/, info/, locale/).
>>>   	rm -rf ${D}${datadir}/
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
Khem Raj - Aug. 11, 2011, 2:54 p.m.
On Thursday, August 11, 2011 03:45:01 PM Yu Ke wrote:
> Ok, CC Richard to see if it is OK to not use 64bithack.patch
> 
> Regards
> Ke
> 
> on 2011-8-11 14:47, Kumar Gala wrote:
> > revert this is not acceptable as that will break ppc64 builds.
> > 
> > I think you need to look at 64bithack.patch and if we really should be
> > using it for multilib builds.

I think it could be conditionally applied only for non multilib builds
but I would be in favour of removing it if not much will break in non
multilib case.

> > 
> > - k
> > 
> > On Aug 11, 2011, at 1:36 AM, Yu Ke wrote:
> >> Hi Kumar,
> >> 
> >> I just found this patch breaks the qemux86-64 lib64 multilib build.
> >> 
> >> the error log is as below:
> >> | mv: cannot stat
> >> | `/home/kyu3/sdb/multilib2/tmp/work/x86_64-pokymllib64-linux/lib64
> >> | -gcc-cross-intermediate-4.6.1+svnr175454-r4/image/home/kyu3/sdb/mu
> >> | ltilib2/tmp/sysroots/x86_64-linux/usr/x86_64-pokymllib64-linux/lib
> >> | 64/*': No such file or directory>> 
> >> NOTE: package lib64-gcc-cross-intermediate-4.6.1+svnr175454-r4: task
> >> do_install: Failed ERROR: Task 1557
> >> (virtual:multilib:lib64:/home/kyu3/src/poky/meta/recipes-devtools/gcc
> >> /gcc-cross-intermediate_4.6.bb, do_install) failed with exit code
> >> 
> >> the error is caused by command in gcc-cross-intermediate.inc:
> >> do_install(): "mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/*
> >> ${D}${target_base_libdir}/"
> >> 
> >> and the reason is that: ${baselib} is lib64 in multilib case, while
> >> the files to be moved is still in
> >> ${D}${exec_prefix}/${TARGET_SYS}/lib/*, so mv will fail.
> >> 
> >> The fix may be either reverting this commit, or putting the file to
> >> ${baselib} instead of lib. I'd like to get your input before going
> >> further.
> >> 
> >> Regards
> >> Ke
> >> 
> >> on 2011-8-5 2:54, Kumar Gala wrote:
> >>> Rather than tweaking MULTILIB_DIRNAMES&   MULTILIB_OSDIRNAMES like
> >>> is
> >>> done for x86-64 via 64bithack.patch.  We can just go with gcc
> >>> defaults
> >>> and utilize ${base_lib} for where to find gcc libs.
> >>> 
> >>> Signed-off-by: Kumar Gala<galak@kernel.crashing.org>
> >>> ---
> >>> 
> >>>   .../gcc/gcc-cross-intermediate.inc                 |    2 +-
> >>>   1 files changed, 1 insertions(+), 1 deletions(-)
> >>> 
> >>> diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> >>> b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc index
> >>> df5958a..7b1bb38 100644
> >>> --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> >>> +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
> >>> @@ -34,7 +34,7 @@ do_compile () {
> >>> 
> >>>   do_install () {
> >>>   
> >>>   	oe_runmake 'DESTDIR=${D}' install
> >>>   	install -d ${D}${target_base_libdir}/
> >>> 
> >>> -	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/*
> >>> ${D}${target_base_libdir}/
> >>> +	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/*
> >>> ${D}${target_base_libdir}/>>> 
> >>>   	# We don't really need this (here shares/ contains man/,
> >>>   	info/, locale/). rm -rf ${D}${datadir}/
> > 
> > _______________________________________________
> > Openembedded-core mailing list
> > Openembedded-core@lists.openembedded.org
> > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
> 
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Richard Purdie - Aug. 11, 2011, 3:30 p.m.
On Thu, 2011-08-11 at 01:47 -0500, Kumar Gala wrote:
> revert this is not acceptable as that will break ppc64 builds.
> 
> I think you need to look at 64bithack.patch and if we really should be using it for multilib builds.

This just sounds like gcc totally ignores the the library directory
we're using and that is plain wrong :(.

I'd much prefer gcc didn't make assumptions in this case and did what
were were configuring it to do. That is why there is that 64bit hack
there and I think gcc should be honouring however we configure the
library directories, not doing what it thinks is best...

Cheers,

Richard
Richard Purdie - Aug. 11, 2011, 6:41 p.m.
On Thu, 2011-08-11 at 16:30 +0100, Richard Purdie wrote:
> On Thu, 2011-08-11 at 01:47 -0500, Kumar Gala wrote:
> > revert this is not acceptable as that will break ppc64 builds.
> > 
> > I think you need to look at 64bithack.patch and if we really should be using it for multilib builds.
> 
> This just sounds like gcc totally ignores the the library directory
> we're using and that is plain wrong :(.
> 
> I'd much prefer gcc didn't make assumptions in this case and did what
> were were configuring it to do. That is why there is that 64bit hack
> there and I think gcc should be honouring however we configure the
> library directories, not doing what it thinks is best...

I did more digging and this really just highlights why we have that
64bit "hack" patch in the first place.

GCC has internal multilib 'magic' which assumes certain library layout
in the 64 bit case. The implication is if you build 64 bit, you cannot
have baselib != "lib64". Whilst I can understand this on desktop system,
I'd suggest our build system has a better idea what its doing than most
and can cope without hardcoding things.

This is why the default builds in the gcc config are set to "." by that
patch, that respects whatever base_libdir is set to. I'd suggest we do
this for x86, pcc and mips 64 bit and revert the origin baselib patch,
but this time better improve the patch documentation about why this is
necessary.

Cheers,

Richard
Kumar Gala - Aug. 11, 2011, 6:55 p.m.
On Aug 11, 2011, at 1:41 PM, Richard Purdie wrote:

> On Thu, 2011-08-11 at 16:30 +0100, Richard Purdie wrote:
>> On Thu, 2011-08-11 at 01:47 -0500, Kumar Gala wrote:
>>> revert this is not acceptable as that will break ppc64 builds.
>>> 
>>> I think you need to look at 64bithack.patch and if we really should be using it for multilib builds.
>> 
>> This just sounds like gcc totally ignores the the library directory
>> we're using and that is plain wrong :(.
>> 
>> I'd much prefer gcc didn't make assumptions in this case and did what
>> were were configuring it to do. That is why there is that 64bit hack
>> there and I think gcc should be honouring however we configure the
>> library directories, not doing what it thinks is best...
> 
> I did more digging and this really just highlights why we have that
> 64bit "hack" patch in the first place.
> 
> GCC has internal multilib 'magic' which assumes certain library layout
> in the 64 bit case. The implication is if you build 64 bit, you cannot
> have baselib != "lib64". Whilst I can understand this on desktop system,
> I'd suggest our build system has a better idea what its doing than most
> and can cope without hardcoding things.
> 
> This is why the default builds in the gcc config are set to "." by that
> patch, that respects whatever base_libdir is set to. I'd suggest we do
> this for x86, pcc and mips 64 bit and revert the origin baselib patch,
> but this time better improve the patch documentation about why this is
> necessary.
> 
> Cheers,
> 
> Richard

Khem had some feelings on this so I'll let him chime in

- k

Patch

diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
index df5958a..7b1bb38 100644
--- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc
@@ -34,7 +34,7 @@  do_compile () {
 do_install () {
 	oe_runmake 'DESTDIR=${D}' install
 	install -d ${D}${target_base_libdir}/
-	mv ${D}${exec_prefix}/${TARGET_SYS}/lib/* ${D}${target_base_libdir}/
+	mv ${D}${exec_prefix}/${TARGET_SYS}/${baselib}/* ${D}${target_base_libdir}/
 
 	# We don't really need this (here shares/ contains man/, info/, locale/).
 	rm -rf ${D}${datadir}/