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