diff options
Diffstat (limited to 'meta/classes')
-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): # Checks if necessary to add option march to host gcc def check_gcc_march(sanity_data): - result = False + result = True + message = "" # Check if -march not in BUILD_CFLAGS if sanity_data.getVar("BUILD_CFLAGS",True).find("-march") < 0: + result = False # Construct a test file f = open("gcc_test.c", "w") - f.write("int main (){ __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4; return 0;}\n") + f.write("int main (){ volatile int atomic = 2; __sync_bool_compare_and_swap (&atomic, 2, 3); return 0; }\n") f.close() # 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 - status,result = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=native gcc_test.c -o gcc_test") - if status != 0: - result = True - else: - result = False + if not result: + status,res = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc gcc_test.c -o gcc_test") + if status == 0: + result = True; + + if not result: + status,res = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=native gcc_test.c -o gcc_test") + if status == 0: + message = "BUILD_CFLAGS_append = \" -march=native\"" + result = True; + + if not result: + build_arch = sanity_data.getVar('BUILD_ARCH', True) + status,res = oe.utils.getstatusoutput("${BUILD_PREFIX}gcc -march=%s gcc_test.c -o gcc_test" % build_arch) + if status == 0: + message = "BUILD_CFLAGS_append = \" -march=%s\"" % build_arch + result = True; os.remove("gcc_test.c") if os.path.exists("gcc_test"): os.remove("gcc_test") - return result + return (result, message) # Unpatched versions of make 3.82 are known to be broken. See GNU Savannah Bug 30612. # Use a modified reproducer from http://savannah.gnu.org/bugs/?30612 to validate. @@ -506,9 +517,14 @@ def check_sanity_version_change(status, d): if not check_app_exists("qemu-arm", d): status.addresult("qemu-native was in ASSUME_PROVIDED but the QEMU binaries (qemu-arm) can't be found in PATH") - if check_gcc_march(d): + (result, message) = check_gcc_march(d) + if result and message: 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") + %s\n" % message) + if not result: + status.addresult("Your gcc version is older then 4.5 or is not working properly. Please verify you can build") + status.addresult(" and link something that uses atomic operations, such as: \n") + status.addresult(" __sync_bool_compare_and_swap (&atomic, 2, 3);\n") # Check that TMPDIR isn't on a filesystem with limited filename length (eg. eCryptFS) tmpdir = d.getVar('TMPDIR', True) |