scons: Warn for incompatible gcc and binutils
authorAndreas Hansson <andreas.hansson@arm.com>
Sun, 10 Aug 2014 09:38:56 +0000 (05:38 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Sun, 10 Aug 2014 09:38:56 +0000 (05:38 -0400)
It seems gcc >4.8 does not get along well with binutils <= 2.22, and
to help users this patch adds a warning with an indication for how to
fix the issue. It might even be worth adding a Exit(-1) and stop the
build.

SConstruct

index 6a44f3a94a57583d80df47ccd363f5d817adf478..d5f56b22a474a593f069c2da746039fce8401561 100755 (executable)
@@ -580,6 +580,22 @@ if main['GCC']:
 
     main['GCC_VERSION'] = gcc_version
 
+    # gcc from version 4.8 and above generates "rep; ret" instructions
+    # to avoid performance penalties on certain AMD chips. Older
+    # assemblers detect this as an error, "Error: expecting string
+    # instruction after `rep'"
+    if compareVersions(gcc_version, "4.8") > 0:
+        as_version = readCommand([main['AS'], '-v', '/dev/null'],
+                                 exception=False).split()
+
+        if not as_version or compareVersions(as_version[-1], "2.23") < 0:
+            print termcap.Yellow + termcap.Bold + \
+                'Warning: This combination of gcc and binutils have' + \
+                ' known incompatibilities.\n' + \
+                '         If you encounter build problems, please update ' + \
+                'binutils to 2.23.' + \
+                termcap.Normal
+
     # Add the appropriate Link-Time Optimization (LTO) flags
     # unless LTO is explicitly turned off. Note that these flags
     # are only used by the fast target.