[OE-core] [oe-core][patch v2] sanity.bbclass: correct the gcc_arch check logic
Randy MacLeod
randy.macleod at windriver.com
Wed Jun 26 22:16:38 UTC 2013
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 at 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 at 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 at linuxfoundation.org]
>>> Sent: Tuesday, June 18, 2013 9:04 PM
>>> To: Luo Zhenhua-B19537; Randy MacLeod
>>> Cc: openembedded-core at 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 at 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
More information about the Openembedded-core
mailing list