All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-18 13:08 [patch v2] sanity.bbclass: correct the gcc_arch check logic Zhenhua Luo
@ 2013-06-18 13:04 ` Richard Purdie
  2013-06-18 13:26   ` Luo Zhenhua-B19537
  2013-06-20  3:28   ` Luo Zhenhua-B19537
  0 siblings, 2 replies; 11+ messages in thread
From: Richard Purdie @ 2013-06-18 13:04 UTC (permalink / raw)
  To: Zhenhua Luo, Randy MacLeod; +Cc: b40527, openembedded-core

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




^ permalink raw reply	[flat|nested] 11+ messages in thread

* [patch v2] sanity.bbclass: correct the gcc_arch check logic
@ 2013-06-18 13:08 Zhenhua Luo
  2013-06-18 13:04 ` Richard Purdie
  0 siblings, 1 reply; 11+ messages in thread
From: Zhenhua Luo @ 2013-06-18 13:08 UTC (permalink / raw)
  To: openembedded-core; +Cc: Zhenhua Luo, b40527

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
-- 
1.7.9.5




^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-18 13:04 ` Richard Purdie
@ 2013-06-18 13:26   ` Luo Zhenhua-B19537
  2013-06-20  3:28   ` Luo Zhenhua-B19537
  1 sibling, 0 replies; 11+ messages in thread
From: Luo Zhenhua-B19537 @ 2013-06-18 13:26 UTC (permalink / raw)
  To: Richard Purdie, Randy MacLeod; +Cc: Yu Zongchun-B40527, openembedded-core

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
> 
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-18 13:04 ` Richard Purdie
  2013-06-18 13:26   ` Luo Zhenhua-B19537
@ 2013-06-20  3:28   ` Luo Zhenhua-B19537
  2013-06-21 17:37     ` Randy MacLeod
                       ` (2 more replies)
  1 sibling, 3 replies; 11+ messages in thread
From: Luo Zhenhua-B19537 @ 2013-06-20  3:28 UTC (permalink / raw)
  To: Randy MacLeod; +Cc: Yu Zongchun-B40527, openembedded-core

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
> >
> >


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-20  3:28   ` Luo Zhenhua-B19537
@ 2013-06-21 17:37     ` Randy MacLeod
  2013-06-25 21:56     ` Randy MacLeod
  2013-06-26 22:16     ` Randy MacLeod
  2 siblings, 0 replies; 11+ messages in thread
From: Randy MacLeod @ 2013-06-21 17:37 UTC (permalink / raw)
  To: Luo Zhenhua-B19537; +Cc: Yu Zongchun-B40527, openembedded-core

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. SMTS, Linux, Wind River
Direct: 613.963.1350


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-20  3:28   ` Luo Zhenhua-B19537
  2013-06-21 17:37     ` Randy MacLeod
@ 2013-06-25 21:56     ` Randy MacLeod
  2013-06-26 22:16     ` Randy MacLeod
  2 siblings, 0 replies; 11+ messages in thread
From: Randy MacLeod @ 2013-06-25 21:56 UTC (permalink / raw)
  To: Luo Zhenhua-B19537; +Cc: Yu Zongchun-B40527, openembedded-core

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. SMTS, Linux, Wind River
Direct: 613.963.1350


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-20  3:28   ` Luo Zhenhua-B19537
  2013-06-21 17:37     ` Randy MacLeod
  2013-06-25 21:56     ` Randy MacLeod
@ 2013-06-26 22:16     ` Randy MacLeod
  2013-06-27  4:03       ` Luo Zhenhua-B19537
  2013-07-05  8:23       ` Luo Zhenhua-B19537
  2 siblings, 2 replies; 11+ messages in thread
From: Randy MacLeod @ 2013-06-26 22:16 UTC (permalink / raw)
  To: Luo Zhenhua-B19537; +Cc: Yu Zongchun-B40527, openembedded-core

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


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-26 22:16     ` Randy MacLeod
@ 2013-06-27  4:03       ` Luo Zhenhua-B19537
  2013-07-05  8:23       ` Luo Zhenhua-B19537
  1 sibling, 0 replies; 11+ messages in thread
From: Luo Zhenhua-B19537 @ 2013-06-27  4:03 UTC (permalink / raw)
  To: Randy MacLeod; +Cc: Yu Zongchun-B40527, openembedded-core

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


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-06-26 22:16     ` Randy MacLeod
  2013-06-27  4:03       ` Luo Zhenhua-B19537
@ 2013-07-05  8:23       ` Luo Zhenhua-B19537
  2013-07-23 17:24         ` Randy MacLeod
  1 sibling, 1 reply; 11+ messages in thread
From: Luo Zhenhua-B19537 @ 2013-07-05  8:23 UTC (permalink / raw)
  To: Randy MacLeod; +Cc: Yu Zongchun-B40527, openembedded-core

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


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-07-05  8:23       ` Luo Zhenhua-B19537
@ 2013-07-23 17:24         ` Randy MacLeod
  2013-07-24  2:15           ` Luo Zhenhua-B19537
  0 siblings, 1 reply; 11+ messages in thread
From: Randy MacLeod @ 2013-07-23 17:24 UTC (permalink / raw)
  To: Luo Zhenhua-B19537; +Cc: Yu Zongchun-B40527, openembedded-core

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
>


-- 
# Randy MacLeod. SMTS, Linux, Wind River
Direct: 613.963.1350


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
  2013-07-23 17:24         ` Randy MacLeod
@ 2013-07-24  2:15           ` Luo Zhenhua-B19537
  0 siblings, 0 replies; 11+ messages in thread
From: Luo Zhenhua-B19537 @ 2013-07-24  2:15 UTC (permalink / raw)
  To: Randy MacLeod; +Cc: Yu Zongchun-B40527, openembedded-core

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


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-07-24  2:16 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-18 13:08 [patch v2] sanity.bbclass: correct the gcc_arch check logic Zhenhua Luo
2013-06-18 13:04 ` Richard Purdie
2013-06-18 13:26   ` Luo Zhenhua-B19537
2013-06-20  3:28   ` Luo Zhenhua-B19537
2013-06-21 17:37     ` Randy MacLeod
2013-06-25 21:56     ` Randy MacLeod
2013-06-26 22:16     ` Randy MacLeod
2013-06-27  4:03       ` Luo Zhenhua-B19537
2013-07-05  8:23       ` Luo Zhenhua-B19537
2013-07-23 17:24         ` Randy MacLeod
2013-07-24  2:15           ` Luo Zhenhua-B19537

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.