aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/sanity.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/sanity.bbclass')
-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):
# 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)