Patchwork [v2] sanity.bbclass: correct the gcc_arch check logic

login
register
mail settings
Submitter Zhenhua Luo
Date June 18, 2013, 1:08 p.m.
Message ID <1371560890-26412-1-git-send-email-zhenhua.luo@freescale.com>
Download mbox | patch
Permalink /patch/51923/
State New
Headers show

Comments

Richard Purdie - June 18, 2013, 1:04 p.m.
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@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=ad276d7d89190c57a152867d7278ee18f784ff2c

Cheers,

Richard
Zhenhua Luo - June 18, 2013, 1:08 p.m.
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@freescale.com>
---
 meta/classes/sanity.bbclass |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Zhenhua Luo - June 18, 2013, 1:26 p.m.
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. 


Best Regards,

Zhenhua


> -----Original Message-----
> From: Richard Purdie [mailto:richard.purdie@linuxfoundation.org]
> Sent: Tuesday, June 18, 2013 9:04 PM
> To: Luo Zhenhua-B19537; Randy MacLeod
> Cc: openembedded-core@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@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=ad276d7d89190c57a152
> 867d7278ee18f784ff2c
> 
> Cheers,
> 
> Richard
> 
>
Zhenhua Luo - June 20, 2013, 3:28 a.m.
Ping.

> -----Original Message-----
> From: Luo Zhenhua-B19537
> Sent: Tuesday, June 18, 2013 9:26 PM
> To: 'Richard Purdie'; Randy MacLeod
> Cc: openembedded-core@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.
> 
> 
> Best Regards,
> 
> Zhenhua
> 
> 
> > -----Original Message-----
> > From: Richard Purdie [mailto:richard.purdie@linuxfoundation.org]
> > Sent: Tuesday, June 18, 2013 9:04 PM
> > To: Luo Zhenhua-B19537; Randy MacLeod
> > Cc: openembedded-core@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@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 - June 21, 2013, 5:37 p.m.
On 13-06-19 11:28 PM, Luo Zhenhua-B19537 wrote:
> Ping.

It's been a busy week but this will be sorted out today
or Monday at the latest.

// RAndy
>
>> -----Original Message-----
>> From: Luo Zhenhua-B19537
>> Sent: Tuesday, June 18, 2013 9:26 PM
>> To: 'Richard Purdie'; Randy MacLeod
>> Cc: openembedded-core@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.
>>
>>
>> Best Regards,
>>
>> Zhenhua
>>
>>
>>> -----Original Message-----
>>> From: Richard Purdie [mailto:richard.purdie@linuxfoundation.org]
>>> Sent: Tuesday, June 18, 2013 9:04 PM
>>> To: Luo Zhenhua-B19537; Randy MacLeod
>>> Cc: openembedded-core@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@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 - June 25, 2013, 9:56 p.m.
On 13-06-19 11:28 PM, Luo Zhenhua-B19537 wrote:
> Ping.

I'm not sure what the protocol is for being swamped but
I still haven't gotten to this. Mark and I made some changes
to the -march tests to deal with old compilers so one of us
will send that here as soon as we can.

Sorry for the delay,

// Randy

>
>> -----Original Message-----
>> From: Luo Zhenhua-B19537
>> Sent: Tuesday, June 18, 2013 9:26 PM
>> To: 'Richard Purdie'; Randy MacLeod
>> Cc: openembedded-core@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.
>>
>>
>> Best Regards,
>>
>> Zhenhua
>>
>>
>>> -----Original Message-----
>>> From: Richard Purdie [mailto:richard.purdie@linuxfoundation.org]
>>> Sent: Tuesday, June 18, 2013 9:04 PM
>>> To: Luo Zhenhua-B19537; Randy MacLeod
>>> Cc: openembedded-core@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@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 - June 26, 2013, 10:16 p.m.
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@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@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@linuxfoundation.org]
>>> Sent: Tuesday, June 18, 2013 9:04 PM
>>> To: Luo Zhenhua-B19537; Randy MacLeod
>>> Cc: openembedded-core@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@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
>>>
>>>
>
Zhenhua Luo - June 27, 2013, 4:03 a.m.
Randy, 

Thanks for the details. 

Following is my trial result, FYI.

[b19537@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@busy ~]$
[b19537@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@busy ~]$
[b19537@busy ~]$ cat gcc_test_new.c
int main (){ volatile int atomic = 2; __sync_bool_compare_and_swap 
(&atomic, 2, 3); return 0;}
[b19537@busy ~]$
[b19537@busy ~]$ gcc -o gcc_test_new gcc_test_new.c 
[b19537@busy ~]$ echo $?
0
[b19537@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@busy ~]$ echo $?
1
[b19537@busy ~]$
[b19537@busy ~]$ gcc -march=x86-64  -o gcc_test_new gcc_test_new.c 
[b19537@busy ~]$ echo $?
0
[b19537@busy ~]$


Best Regards,

Zhenhua


> -----Original Message-----

> From: Randy MacLeod [mailto:randy.macleod@windriver.com]

> Sent: Thursday, June 27, 2013 6:17 AM

> To: Luo Zhenhua-B19537

> Cc: openembedded-core@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@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@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@linuxfoundation.org]

> >>> Sent: Tuesday, June 18, 2013 9:04 PM

> >>> To: Luo Zhenhua-B19537; Randy MacLeod

> >>> Cc: openembedded-core@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@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
Zhenhua Luo - July 5, 2013, 8:23 a.m.
Hi Randy,

Any update? Can this patch be applied?

Now "sed -e 's/if status != 0/if status == 0/' sanity.bbclass" is needed in my test script to ensure Yocto can work on our build server. 


Best Regards,

Zhenhua


> -----Original Message-----

> From: Luo Zhenhua-B19537

> Sent: Thursday, June 27, 2013 12:04 PM

> To: 'Randy MacLeod'

> Cc: openembedded-core@lists.openembedded.org; Yu Zongchun-B40527; Hatle,

> Mark

> Subject: RE: [OE-core] [oe-core][patch v2] sanity.bbclass: correct the

> gcc_arch check logic

> 

> Randy,

> 

> Thanks for the details.

> 

> Following is my trial result, FYI.

> 

> [b19537@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@busy ~]$

> [b19537@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@busy

> ~]$ [b19537@busy ~]$ cat gcc_test_new.c int main (){ volatile int atomic

> = 2; __sync_bool_compare_and_swap (&atomic, 2, 3); return 0;}

> [b19537@busy ~]$ [b19537@busy ~]$ gcc -o gcc_test_new gcc_test_new.c

> [b19537@busy ~]$ echo $?

> 0

> [b19537@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@busy ~]$ echo $?

> 1

> [b19537@busy ~]$

> [b19537@busy ~]$ gcc -march=x86-64  -o gcc_test_new gcc_test_new.c

> [b19537@busy ~]$ echo $?

> 0

> [b19537@busy ~]$

> 

> 

> Best Regards,

> 

> Zhenhua

> 

> 

> > -----Original Message-----

> > From: Randy MacLeod [mailto:randy.macleod@windriver.com]

> > Sent: Thursday, June 27, 2013 6:17 AM

> > To: Luo Zhenhua-B19537

> > Cc: openembedded-core@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@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@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@linuxfoundation.org]

> > >>> Sent: Tuesday, June 18, 2013 9:04 PM

> > >>> To: Luo Zhenhua-B19537; Randy MacLeod

> > >>> Cc: openembedded-core@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@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
Randy MacLeod - July 23, 2013, 5:24 p.m.
On 13-07-05 04:23 AM, Luo Zhenhua-B19537 wrote:
> Hi Randy,
>
> Any update? Can this patch be applied?
>
> Now "sed -e 's/if status != 0/if status == 0/' sanity.bbclass" is needed in my test script to ensure Yocto can work on our build server.
>
>
> Best Regards,
>
> Zhenhua

Zhenhua,

I apologize for the huge delay (vacation, day job, ...).

Mark and I worked on this and he sent:

    commit c126729b29822d3602c9c4fd9016cc79b6057fc5
    Author: Mark Hatle <mark.hatle@windriver.com>
    Date:   Mon Jul 15 15:10:26 2013 -0500

        sanity.bbclass: Update gcc sanity check

which seems like the right solution.

// Randy
>
>
>> -----Original Message-----
>> From: Luo Zhenhua-B19537
>> Sent: Thursday, June 27, 2013 12:04 PM
>> To: 'Randy MacLeod'
>> Cc: openembedded-core@lists.openembedded.org; Yu Zongchun-B40527; Hatle,
>> Mark
>> Subject: RE: [OE-core] [oe-core][patch v2] sanity.bbclass: correct the
>> gcc_arch check logic
>>
>> Randy,
>>
>> Thanks for the details.
>>
>> Following is my trial result, FYI.
>>
>> [b19537@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@busy ~]$
>> [b19537@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@busy
>> ~]$ [b19537@busy ~]$ cat gcc_test_new.c int main (){ volatile int atomic
>> = 2; __sync_bool_compare_and_swap (&atomic, 2, 3); return 0;}
>> [b19537@busy ~]$ [b19537@busy ~]$ gcc -o gcc_test_new gcc_test_new.c
>> [b19537@busy ~]$ echo $?
>> 0
>> [b19537@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@busy ~]$ echo $?
>> 1
>> [b19537@busy ~]$
>> [b19537@busy ~]$ gcc -march=x86-64  -o gcc_test_new gcc_test_new.c
>> [b19537@busy ~]$ echo $?
>> 0
>> [b19537@busy ~]$
>>
>>
>> Best Regards,
>>
>> Zhenhua
>>
>>
>>> -----Original Message-----
>>> From: Randy MacLeod [mailto:randy.macleod@windriver.com]
>>> Sent: Thursday, June 27, 2013 6:17 AM
>>> To: Luo Zhenhua-B19537
>>> Cc: openembedded-core@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@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@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@linuxfoundation.org]
>>>>>> Sent: Tuesday, June 18, 2013 9:04 PM
>>>>>> To: Luo Zhenhua-B19537; Randy MacLeod
>>>>>> Cc: openembedded-core@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@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
>
Zhenhua Luo - July 24, 2013, 2:15 a.m.
Randy, 

Thanks for the update. 


Best Regards,

Zhenhua


> -----Original Message-----

> From: Randy MacLeod [mailto:randy.macleod@windriver.com]

> Sent: Wednesday, July 24, 2013 1:25 AM

> To: Luo Zhenhua-B19537

> Cc: openembedded-core@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-07-05 04:23 AM, Luo Zhenhua-B19537 wrote:

> > Hi Randy,

> >

> > Any update? Can this patch be applied?

> >

> > Now "sed -e 's/if status != 0/if status == 0/' sanity.bbclass" is

> needed in my test script to ensure Yocto can work on our build server.

> >

> >

> > Best Regards,

> >

> > Zhenhua

> 

> Zhenhua,

> 

> I apologize for the huge delay (vacation, day job, ...).

> 

> Mark and I worked on this and he sent:

> 

>     commit c126729b29822d3602c9c4fd9016cc79b6057fc5

>     Author: Mark Hatle <mark.hatle@windriver.com>

>     Date:   Mon Jul 15 15:10:26 2013 -0500

> 

>         sanity.bbclass: Update gcc sanity check

> 

> which seems like the right solution.

> 

> // Randy

> >

> >

> >> -----Original Message-----

> >> From: Luo Zhenhua-B19537

> >> Sent: Thursday, June 27, 2013 12:04 PM

> >> To: 'Randy MacLeod'

> >> Cc: openembedded-core@lists.openembedded.org; Yu Zongchun-B40527;

> >> Hatle, Mark

> >> Subject: RE: [OE-core] [oe-core][patch v2] sanity.bbclass: correct

> >> the gcc_arch check logic

> >>

> >> Randy,

> >>

> >> Thanks for the details.

> >>

> >> Following is my trial result, FYI.

> >>

> >> [b19537@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@busy ~]$

> >> [b19537@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@busy ~]$ [b19537@busy ~]$ cat gcc_test_new.c int main (){

> >> volatile int atomic = 2; __sync_bool_compare_and_swap (&atomic, 2,

> >> 3); return 0;} [b19537@busy ~]$ [b19537@busy ~]$ gcc -o gcc_test_new

> >> gcc_test_new.c [b19537@busy ~]$ echo $?

> >> 0

> >> [b19537@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@busy ~]$ echo $?

> >> 1

> >> [b19537@busy ~]$

> >> [b19537@busy ~]$ gcc -march=x86-64  -o gcc_test_new gcc_test_new.c

> >> [b19537@busy ~]$ echo $?

> >> 0

> >> [b19537@busy ~]$

> >>

> >>

> >> Best Regards,

> >>

> >> Zhenhua

> >>

> >>

> >>> -----Original Message-----

> >>> From: Randy MacLeod [mailto:randy.macleod@windriver.com]

> >>> Sent: Thursday, June 27, 2013 6:17 AM

> >>> To: Luo Zhenhua-B19537

> >>> Cc: openembedded-core@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@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@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@linuxfoundation.org]

> >>>>>> Sent: Tuesday, June 18, 2013 9:04 PM

> >>>>>> To: Luo Zhenhua-B19537; Randy MacLeod

> >>>>>> Cc: openembedded-core@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@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=ad276d7d89190c5

> >>> 7a

> >>>>>> 152

> >>>>>> 867d7278ee18f784ff2c

> >>>>>>

> >>>>>> Cheers,

> >>>>>>

> >>>>>> Richard

> >>>>>>

> >>>>>>

> >>>>

> >>>

> >>>

> >>> --

> >>> # Randy MacLeod. SMTS, Linux, Wind River

> >>> Direct: 613.963.1350

> >

> 

> 

> --

> # Randy MacLeod. SMTS, Linux, Wind River

> Direct: 613.963.1350

Patch

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