Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Randy MacLeod <randy.macleod@windriver.com>
To: Luo Zhenhua-B19537 <B19537@freescale.com>
Cc: Yu Zongchun-B40527 <B40527@freescale.com>,
	"openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>
Subject: Re: [patch v2] sanity.bbclass: correct the gcc_arch check logic
Date: Wed, 26 Jun 2013 18:16:38 -0400	[thread overview]
Message-ID: <51CB6846.5020202@windriver.com> (raw)
In-Reply-To: <CA452391058F6D4E9715FB2C29D9312A015BA748@039-SN2MPN1-022.039d.mgd.msft.net>

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


  parent reply	other threads:[~2013-06-26 22:16 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51CB6846.5020202@windriver.com \
    --to=randy.macleod@windriver.com \
    --cc=B19537@freescale.com \
    --cc=B40527@freescale.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox