aboutsummaryrefslogtreecommitdiffstats
path: root/meta/classes/sanity.bbclass
diff options
context:
space:
mode:
authorMark Hatle <mark.hatle@windriver.com>2013-07-15 15:10:26 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-07-18 21:23:41 +0100
commit4a6f939b4db2df5b93c9d1388e9d46fe8a7210a3 (patch)
tree8432ff28c0b5e4124611b30664995dd7d81cd4df /meta/classes/sanity.bbclass
parent344cf64642d8da4cbef1faf56b02556c7d0f539d (diff)
downloadopenembedded-core-contrib-4a6f939b4db2df5b93c9d1388e9d46fe8a7210a3.tar.gz
sanity.bbclass: Update gcc sanity check
The gcc sanity check should be checking for the atomic function directly instead of using the gcc macro. Older versions of gcc do not have the macro defined, but do support the atomic operations. (glib-2.0 checks for both the macro and the function, as long as one is available it will successfully compile.) Update the check to try both -mcpu=native and -mcpu=BUILD_ARCH. Tell the user which version worked properly. [YOCTO #4845] (From OE-Core rev: c126729b29822d3602c9c4fd9016cc79b6057fc5) Signed-off-by: Mark Hatle <mark.hatle@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
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)