summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/sanity.bbclass42
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
282def check_gcc_march(sanity_data): 282def 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)