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.pur...@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....@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
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to