diff options
-rw-r--r-- | meta/classes/sanity.bbclass | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass index b190eb2347..a505a5dc34 100644 --- a/meta/classes/sanity.bbclass +++ b/meta/classes/sanity.bbclass | |||
@@ -280,31 +280,42 @@ def check_sanity_validmachine(sanity_data): | |||
280 | 280 | ||
281 | # Checks if necessary to add option march to host gcc | 281 | # Checks if necessary to add option march to host gcc |
282 | def check_gcc_march(sanity_data): | 282 | def check_gcc_march(sanity_data): |
283 | result = False | 283 | result = True |
284 | message = "" | ||
284 | 285 | ||
285 | # Check if -march not in BUILD_CFLAGS | 286 | # Check if -march not in BUILD_CFLAGS |
286 | if sanity_data.getVar("BUILD_CFLAGS",True).find("-march") < 0: | 287 | if sanity_data.getVar("BUILD_CFLAGS",True).find("-march") < 0: |
288 | result = False | ||
287 | 289 | ||
288 | # Construct a test file | 290 | # Construct a test file |
289 | f = open("gcc_test.c", "w") | 291 | f = open("gcc_test.c", "w") |
290 | f.write("int main (){ __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4; return 0;}\n") | 292 | f.write("int main (){ volatile int atomic = 2; __sync_bool_compare_and_swap (&atomic, 2, 3); return 0; }\n") |
291 | f.close() | 293 | f.close() |
292 | 294 | ||
293 | # Check if GCC could work without march | 295 | # Check if GCC could work without march |
294 | status,result = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc gcc_test.c -o gcc_test") | 296 | if not result: |
295 | if status != 0: | 297 | status,res = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc gcc_test.c -o gcc_test") |
296 | # Check if GCC could work with march | 298 | if status == 0: |
297 | status,result = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=native gcc_test.c -o gcc_test") | 299 | result = True; |
298 | if status != 0: | 300 | |
299 | result = True | 301 | if not result: |
300 | else: | 302 | status,res = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=native gcc_test.c -o gcc_test") |
301 | result = False | 303 | if status == 0: |
304 | message = "BUILD_CFLAGS_append = \" -march=native\"" | ||
305 | result = True; | ||
306 | |||
307 | if not result: | ||
308 | build_arch = sanity_data.getVar('BUILD_ARCH', True) | ||
309 | status,res = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=%s gcc_test.c -o gcc_test" % build_arch) | ||
310 | if status == 0: | ||
311 | message = "BUILD_CFLAGS_append = \" -march=%s\"" % build_arch | ||
312 | result = True; | ||
302 | 313 | ||
303 | os.remove("gcc_test.c") | 314 | os.remove("gcc_test.c") |
304 | if os.path.exists("gcc_test"): | 315 | if os.path.exists("gcc_test"): |
305 | os.remove("gcc_test") | 316 | os.remove("gcc_test") |
306 | 317 | ||
307 | return result | 318 | return (result, message) |
308 | 319 | ||
309 | # Unpatched versions of make 3.82 are known to be broken. See GNU Savannah Bug 30612. | 320 | # Unpatched versions of make 3.82 are known to be broken. See GNU Savannah Bug 30612. |
310 | # Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate. | 321 | # Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate. |
@@ -506,9 +517,14 @@ def check_sanity_version_change(status, d): | |||
506 | if not check_app_exists("qemu-arm", d): | 517 | if not check_app_exists("qemu-arm", d): |
507 | status.addresult("qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH") | 518 | status.addresult("qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH") |
508 | 519 | ||
509 | if check_gcc_march(d): | 520 | (result, message) = check_gcc_march(d) |
521 | if result and message: | ||
510 | status.addresult("Your gcc version is older than 4.5, please add the following param to local.conf\n \ | 522 | status.addresult("Your gcc version is older than 4.5, please add the following param to local.conf\n \ |
511 | BUILD_CFLAGS_append = \" -march=native\"\n") | 523 | %s\n" % message) |
524 | if not result: | ||
525 | status.addresult("Your gcc version is older then 4.5 or is not working properly. Please verify you can build") | ||
526 | status.addresult(" and link something that uses atomic operations, such as: \n") | ||
527 | status.addresult(" __sync_bool_compare_and_swap (&atomic, 2, 3);\n") | ||
512 | 528 | ||
513 | # Check that TMPDIR isn't on a filesystem with limited filename length (eg. eCryptFS) | 529 | # Check that TMPDIR isn't on a filesystem with limited filename length (eg. eCryptFS) |
514 | tmpdir = d.getVar('TMPDIR', True) | 530 | tmpdir = d.getVar('TMPDIR', True) |