[OE-core] [oe-core][patch v2] sanity.bbclass: correct the gcc_arch check logic
Luo Zhenhua-B19537
B19537 at freescale.com
Thu Jun 27 04:03:36 UTC 2013
Randy,
Thanks for the details.
Following is my trial result, FYI.
[b19537 at busy ~]$ lsb_release -a
LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 5.9 (Final)
Release: 5.9
Codename: Final
[b19537 at busy ~]$
[b19537 at busy ~]$ gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)
[b19537 at busy ~]$
[b19537 at busy ~]$ cat gcc_test_new.c
int main (){ volatile int atomic = 2; __sync_bool_compare_and_swap
(&atomic, 2, 3); return 0;}
[b19537 at busy ~]$
[b19537 at busy ~]$ gcc -o gcc_test_new gcc_test_new.c
[b19537 at busy ~]$ echo $?
0
[b19537 at busy ~]$ gcc -march=native -o gcc_test_new gcc_test_new.c
gcc_test_new.c:1: error: bad value (native) for -march= switch
gcc_test_new.c:1: error: bad value (native) for -mtune= switch
[b19537 at busy ~]$ echo $?
1
[b19537 at busy ~]$
[b19537 at busy ~]$ gcc -march=x86-64 -o gcc_test_new gcc_test_new.c
[b19537 at busy ~]$ echo $?
0
[b19537 at busy ~]$
Best Regards,
Zhenhua
> -----Original Message-----
> From: Randy MacLeod [mailto:randy.macleod at windriver.com]
> Sent: Thursday, June 27, 2013 6:17 AM
> To: Luo Zhenhua-B19537
> Cc: openembedded-core at lists.openembedded.org; Yu Zongchun-B40527; Hatle,
> Mark
> Subject: Re: [OE-core] [oe-core][patch v2] sanity.bbclass: correct the
> gcc_arch check logic
>
> On 13-06-19 11:28 PM, Luo Zhenhua-B19537 wrote:
> > Ping.
> >
> >> -----Original Message-----
> >> From: Luo Zhenhua-B19537
> >> Sent: Tuesday, June 18, 2013 9:26 PM
> >> To: 'Richard Purdie'; Randy MacLeod
> >> Cc: openembedded-core at lists.openembedded.org; Yu Zongchun-B40527
> >> Subject: RE: [OE-core] [oe-core][patch v2] sanity.bbclass: correct
> >> the gcc_arch check logic
> >>
> >> Hi Randy,
> >>
> >> During the test on my machine with gcc-4.1.2, if -march=native is not
> >> supported by host gcc, a non-zero value(256) returns, otherwise 0
> returns.
> >>
> >> [LOG]
> >> status is 256
> >> result is gcc_test.c:1: error: bad value (native) for -march= switch
> >> gcc_test.c:1: error: bad value (native) for -mtune= switch
> >>
> >> Please confirm if this is same as your result.
>
> Yes it's essentially the same.
>
> Mark decided that the previous test program that checked for the
> existence of:
> __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
> would be better done as a check for:
> __sync_bool_compare_and_swap
> I believe he got the idea from looking at glib's configure script.
>
> I'm working on properly checking on which value to give to march:
> native,i686,x86-64. More tomorrow.
>
> // Randy
>
> Test results and prelim code if you are interested.
>
>
> Here's how that test behaves with the old toolchain:
>
> ### What's the host setup?
>
> $ gcc --version
> gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free
> Software Foundation, Inc.
> This is free software; see the source for copying conditions. There is
> NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
> PURPOSE.
>
> $ head -1 /etc/issue
> CentOS release 5.9 (Final)
>
>
> ### Old test and results: All options fail, returning a status of 1.
>
> $ gcc -o /tmp/jj /tmp/gcc-jj.c
> /tmp/gcc-jj.c: In function ‘main’:
> /tmp/gcc-jj.c:1: error: ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4’ undeclared
> (first use in this function)
> /tmp/gcc-jj.c:1: error: (Each undeclared identifier is reported only once
> /tmp/gcc-jj.c:1: error: for each function it appears in.)
>
> $ echo $?
> 1
>
>
> $ gcc -march=native -o /tmp/jj /tmp/gcc-jj.c
> /tmp/gcc-jj.c:1: error: bad value (native) for -march= switch
> /tmp/gcc-jj.c:1: error: bad value (native) for -mtune= switch $ echo $?
> 1
>
> $ gcc -march=i686 -o /tmp/jj /tmp/gcc-jj.c
> /tmp/gcc-jj.c: In function ‘main’:
> /tmp/gcc-jj.c:1: error: ‘__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4’ undeclared
> (first use in this function)
> /tmp/gcc-jj.c:1: error: (Each undeclared identifier is reported only once
> /tmp/gcc-jj.c:1: error: for each function it appears in.) $ echo $?
> 1
>
>
>
>
> ### New test and results: -march=`mangle uname -m` works.
>
> $ cat /tmp/gcc_test.c
> int main (){ volatile int atomic = 2; __sync_bool_compare_and_swap
> (&atomic, 2, 3); return 0;}
>
>
> $ gcc -o /tmp/jj /tmp/gcc_test.c
> /tmp/ccEVX7IX.o: In function `main':
> gcc_test.c:(.text+0x2f): undefined reference to
> `__sync_bool_compare_and_swap_4'
> collect2: ld returned 1 exit status
> $ echo $?
> 1
>
> $ gcc -march=native -o /tmp/jj /tmp/gcc_test.c
> /tmp/gcc_test.c:1: error: bad value (native) for -march= switch
> /tmp/gcc_test.c:1: error: bad value (native) for -mtune= switch
> $ echo $?
> 1
>
> $ uname -m
> i686
>
> $ gcc -march=i686 -o /tmp/jj /tmp/gcc_test.c
> rmacleod at yow-lpggp1 .../wrs/b/snty $ echo $?
> 0
>
> So you see that -march=native isn't useful for gcc-4.1.2 but
> -march=`munged uname -m` is.
>
>
> I'm in the middle of writing a more complete test but
> my lack of python development is showing:
>
>
> -# Checks if necessary to add option march to host gcc
> +# Checks if necessary to add march option to host gcc
> def check_gcc_march(sanity_data):
> - result = False
> + result = ""
>
> # Check if -march not in BUILD_CFLAGS
> if sanity_data.getVar("BUILD_CFLAGS",True).find("-march") < 0:
> @@ -293,12 +293,22 @@ def check_gcc_march(sanity_data):
> # Check if GCC could work without march
> status,result = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc
> gcc_test.c -o gcc_test")
> if status != 0:
> - # Check if GCC could work with march
> + # Check if GCC could work with march=native
> status,result =
> oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=native gcc_test.c -o
> gcc_test")
> - if status != 0:
> - result = True
> + if status == 0:
> + result = "native"
> else:
> - result = False
> + # Check if GCC could work with march=i686
> + status,result =
> oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=x86-64 gcc_test.c -o
> gcc_test")
> + if status == 0:
> + result = "x86-64"
> + else:
> + # Check if GCC could work with march=i686
> + status,result =
> oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=i686 gcc_test.c -o
> gcc_test")
> + if status == 0:
> + result = "i686"
> + else:
> + result = "none"
>
>
> ...
>
> - if check_gcc_march(d):
> - status.addresult("Your gcc version is older than 4.5, please
> add the following param to local.conf\n \
> - BUILD_CFLAGS_append = \" -march=native\"\n")
> + gcc_march_option = check_gcc_march(d)
> + if gcc_march_option != "":
> + if gcc_march_option == "none":
> + status.addresult("Your gcc version is too old.\n \
> + else:
> + status.addresult("Your gcc version is older than 4.5,
> please add the following param to local.conf\n \
> + BUILD_CFLAGS_append = \" -march=%s\"\n",
> gcc_march_option)
>
>
>
> I'll clean this up to actually work and probably use
> ${BUILD_ARCH} instead of i686/x86-64.
>
> More tomorrow.
>
> // Randy
>
> >>
> >>
> >> Best Regards,
> >>
> >> Zhenhua
> >>
> >>
> >>> -----Original Message-----
> >>> From: Richard Purdie [mailto:richard.purdie at linuxfoundation.org]
> >>> Sent: Tuesday, June 18, 2013 9:04 PM
> >>> To: Luo Zhenhua-B19537; Randy MacLeod
> >>> Cc: openembedded-core at lists.openembedded.org; Yu Zongchun-B40527
> >>> Subject: Re: [OE-core] [oe-core][patch v2] sanity.bbclass: correct
> the
> >>> gcc_arch check logic
> >>>
> >>> On Tue, 2013-06-18 at 21:08 +0800, Zhenhua Luo wrote:
> >>>> The gcc arch check result is incorrect when gcc version is older
> >>>> than
> >>> 4.5.
> >>>> Sanity checker requests user to add "-march=native" into
> >>>> BUILD_CFLAGS even if the flag is not supported by host gcc.
> >>>>
> >>>> The status is 0 when -march=native is supported by host gcc, so set
> >>>> result to True, otherwise set result to False.
> >>>>
> >>>> Signed-off-by: Zhenhua Luo <zhenhua.luo at freescale.com>
> >>>> ---
> >>>> meta/classes/sanity.bbclass | 2 +-
> >>>> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/meta/classes/sanity.bbclass
> >>>> b/meta/classes/sanity.bbclass index 3b9934b..ee09679 100644
> >>>> --- a/meta/classes/sanity.bbclass
> >>>> +++ b/meta/classes/sanity.bbclass
> >>>> @@ -325,7 +325,7 @@ def check_gcc_march(sanity_data):
> >>>> if status != 0:
> >>>> # Check if GCC could work with march
> >>>> status,result =
> >>> oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=native gcc_test.c
> >>> -o
> >>> gcc_test")
> >>>> - if status != 0:
> >>>> + if status == 0:
> >>>> result = True
> >>>> else:
> >>>> result = False
> >>>
> >>> Can you and Randy please sort out what the correct value is here
> please.
> >>> This appears to directly revert
> >>>
> http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=ad276d7d89190c57a
> >>> 152
> >>> 867d7278ee18f784ff2c
> >>>
> >>> Cheers,
> >>>
> >>> Richard
> >>>
> >>>
> >
>
>
> --
> # Randy MacLeod. SMTS, Linux, Wind River
> Direct: 613.963.1350
More information about the Openembedded-core
mailing list