Clean up the MicroBlaze versions tunes as well and improve the
TUNECONFLICTS for version features so that the conflicts matrix is
automatically generated. Additionally consolidate the version features
into a single include.

Improve and generate the "-mcpu=" and package strings based on the
version feature.

Signed-off-by: Nathan Rossi <[email protected]>
---
 .../include/microblaze/feature-microblaze-v10.inc  |   5 -
 .../include/microblaze/feature-microblaze-v7.inc   |   7 --
 .../include/microblaze/feature-microblaze-v8.inc   |  45 --------
 .../include/microblaze/feature-microblaze-v9.inc   |   8 --
 .../microblaze/feature-microblaze-versions.inc     | 126 +++++++++++++++++----
 conf/machine/include/tune-microblaze-features.inc  |   4 +-
 6 files changed, 106 insertions(+), 89 deletions(-)
 delete mode 100644 conf/machine/include/microblaze/feature-microblaze-v10.inc
 delete mode 100644 conf/machine/include/microblaze/feature-microblaze-v7.inc
 delete mode 100644 conf/machine/include/microblaze/feature-microblaze-v8.inc
 delete mode 100644 conf/machine/include/microblaze/feature-microblaze-v9.inc

diff --git a/conf/machine/include/microblaze/feature-microblaze-v10.inc 
b/conf/machine/include/microblaze/feature-microblaze-v10.inc
deleted file mode 100644
index 61b440df0b..0000000000
--- a/conf/machine/include/microblaze/feature-microblaze-v10.inc
+++ /dev/null
@@ -1,5 +0,0 @@
-# Setup version 'feature set' for supported Microblaze version 10 versions
-
-TUNEVALID[v10.0] = "Use Microblaze version 10.0"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v10.0", 
"-mcpu=v10.0", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v10.0", "-v10.0", "" 
,d)}"
diff --git a/conf/machine/include/microblaze/feature-microblaze-v7.inc 
b/conf/machine/include/microblaze/feature-microblaze-v7.inc
deleted file mode 100644
index 6022e473e7..0000000000
--- a/conf/machine/include/microblaze/feature-microblaze-v7.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-# Setup version 'feature set' for supported Microblaze version 7 versions
-TUNEVALID[v7.30] = "Use Microblaze version 7.30"
-
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v7.30", 
"-mcpu=v7.30.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v7.30", "-v7.30", "" 
,d)}"
-
-TUNECONFLICTS[v7.30] += "reorder little-endian"
diff --git a/conf/machine/include/microblaze/feature-microblaze-v8.inc 
b/conf/machine/include/microblaze/feature-microblaze-v8.inc
deleted file mode 100644
index 46a11cfd94..0000000000
--- a/conf/machine/include/microblaze/feature-microblaze-v8.inc
+++ /dev/null
@@ -1,45 +0,0 @@
-# Setup version 'feature set' for supported Microblaze version 8 versions
-TUNEVALID[v8.50] = "Use Microblaze version 8.50"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v8.50", 
"-mcpu=v8.50.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v8.50", "-v8.50", "" 
,d)}"
-
-TUNEVALID[v8.40] = "Use Microblaze version 8.40"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v8.40", 
"-mcpu=v8.40.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v8.40", "-v8.40", "" 
,d)}"
-
-TUNEVALID[v8.30] = "Use Microblaze version 8.30"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v8.30", 
"-mcpu=v8.30.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v8.30", "-v8.30", "" 
,d)}"
-
-TUNEVALID[v8.20] = "Use Microblaze version 8.20"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v8.20", 
"-mcpu=v8.20.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v8.20", "-v8.20", "" 
,d)}"
-
-TUNEVALID[v8.10] = "Use Microblaze version 8.10"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v8.10", 
"-mcpu=v8.10.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v8.10", "-v8.10", "" 
,d)}"
-
-TUNEVALID[v8.00] = "Use Microblaze version 8.00"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v8.00", 
"-mcpu=v8.00.a", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v8.00", "-v8.00", "" 
,d)}"
-
-TUNECONFLICTS[v8.00] += "reorder"
-TUNECONFLICTS[v8.10] += "reorder"
-TUNECONFLICTS[v8.20] += "reorder"
-
-# Perform some additional sanity checking
-python __anonymous () {
-    import bb
-    tune_features = bb.data.getVar('TUNE_FEATURES', d, 1)
-    tuneslist = tune_features.split()
-
-    #
-    # GCC will fail on v8.30 if reorder and pattern-compare are not 
-    # both in ccflags
-    # -mxl-reorder requires -mxl-pattern-compare for -mcpu=v8.30.a
-    # Check if either one exists alone and if so, add the other
-    #
-    if 'v8.30' in tuneslist:
-        if 'reorder' in tuneslist and 'pattern-compare' not in tuneslist:
-            d.setVar("TUNE_FEATURES", "%s pattern-compare" % tune_features)
-}
diff --git a/conf/machine/include/microblaze/feature-microblaze-v9.inc 
b/conf/machine/include/microblaze/feature-microblaze-v9.inc
deleted file mode 100644
index 4777398ced..0000000000
--- a/conf/machine/include/microblaze/feature-microblaze-v9.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-# Setup version 'feature set' for supported Microblaze version 9 versions
-TUNEVALID[v9.6] = "Use Microblaze version 9.6"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v9.6", 
"-mcpu=v9.6", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v9.6", "-v9.6", "" 
,d)}"
-
-TUNEVALID[v9.0] = "Use Microblaze version 9.0"
-MBCCARGSVERSION += "${@bb.utils.contains("TUNE_FEATURES", "v9.0", 
"-mcpu=v9.0", "" ,d)}"
-MBPKGVERSION .= "${@bb.utils.contains("TUNE_FEATURES", "v9.0", "-v9.0", "" 
,d)}"
diff --git a/conf/machine/include/microblaze/feature-microblaze-versions.inc 
b/conf/machine/include/microblaze/feature-microblaze-versions.inc
index 1d99ede492..dcdf020dd2 100644
--- a/conf/machine/include/microblaze/feature-microblaze-versions.inc
+++ b/conf/machine/include/microblaze/feature-microblaze-versions.inc
@@ -1,22 +1,104 @@
-# Microblaze Versions are defined as features sets, each containing 
-# a set of hardware features.
-
-MBCCARGSVERSION = ""
-MBPKGVERSION = ""
-require conf/machine/include/microblaze/feature-microblaze-v10.inc
-require conf/machine/include/microblaze/feature-microblaze-v9.inc
-require conf/machine/include/microblaze/feature-microblaze-v8.inc
-require conf/machine/include/microblaze/feature-microblaze-v7.inc
-
-# Setup a 'feature set' conflict list which ensures only one version is 
selected
-# when defining the TUNE_FEATURES_tune-<>  in local.conf file.
-TUNECONFLICTS[v10.0] += "v7.30 v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.6"
-TUNECONFLICTS[v9.6]  += "v7.30 v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v10.0"
-TUNECONFLICTS[v9.0]  += "v7.30 v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.6 v10.0"
-TUNECONFLICTS[v8.50] += "v7.30 v8.00 v8.10 v8.20 v8.30 v8.40 v9.0 v9.6 v10.0"
-TUNECONFLICTS[v8.40] += "v7.30 v8.00 v8.10 v8.20 v8.30 v8.50 v9.0 v9.6 v10.0"
-TUNECONFLICTS[v8.30] += "v7.30 v8.00 v8.10 v8.20 v8.40 v8.50 v9.0 v9.6 v10.0"
-TUNECONFLICTS[v8.20] += "v7.30 v8.00 v8.10 v8.30 v8.40 v8.50 v9.0 v9.6 v10.0"
-TUNECONFLICTS[v8.10] += "v7.30 v8.00 v8.20 v8.30 v8.40 v8.50 v9.0 v9.6 v10.0"
-TUNECONFLICTS[v8.00] += "v7.30 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.6 v10.0"
-TUNECONFLICTS[v7.30] += "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.6 v10.0"
+# MicroBlaze versions are defined as features, the features are setup to
+# conflict with other versions as well as unavailable features for particular
+# versions.
+
+def microblaze_parse_version(s):
+    # versions before v9 use the "vX.YY.Z" scheme where Z = [ab]
+    # versions after v8 use the "vX.Y" scheme
+    import re
+    m = re.search("^v(\d+)\.(\d+)(\.([ab]))?", s)
+    if m:
+        major, minor = int(m.group(1)), int(m.group(2))
+        if major < 9:
+            return (major, minor, m.group(4) or "a")
+        return (major, minor)
+    return None
+
+def microblaze_version_conflict(ver, d):
+    tunes = d.getVarFlags("TUNEVALID").keys()
+    conflict = []
+    version = microblaze_parse_version(ver)
+    for i in tunes:
+        iversion = microblaze_parse_version(i)
+        if iversion and iversion != version:
+            conflict.append(i)
+    return " ".join(conflict)
+
+def microblaze_current_version(d):
+    tunes = (d.getVar("TUNE_FEATURES") or "").split()
+    for i in tunes:
+        version = microblaze_parse_version(i)
+        if version:
+            return version
+    return None
+
+def microblaze_format_gcc_version(ver):
+    if ver:
+        if ver[0] <= 8 and len(ver) > 2:
+            return "v%d.%d.%s" % ver[0:3]
+        else:
+            return "v%d.%d" % ver[0:2]
+    return ""
+
+def microblaze_format_pkg_version(ver):
+    if ver:
+        if ver[0] <= 8 and len(ver) > 2 and ver[2] != "a":
+            return "v%d.%d.%s" % ver[0:3]
+        else:
+            return "v%d.%d" % ver[0:2]
+    return ""
+
+# MicroBlaze versions
+TUNEVALID[v7.30] = "MicroBlaze version 7.30"
+TUNEVALID[v8.00] = "MicroBlaze version 8.00"
+TUNEVALID[v8.10] = "MicroBlaze version 8.10"
+TUNEVALID[v8.20] = "MicroBlaze version 8.20"
+TUNEVALID[v8.30] = "MicroBlaze version 8.30"
+TUNEVALID[v8.40] = "MicroBlaze version 8.40"
+TUNEVALID[v8.50] = "MicroBlaze version 8.50"
+TUNEVALID[v9.0] = "MicroBlaze version 9.0"
+TUNEVALID[v9.1] = "MicroBlaze version 9.1"
+TUNEVALID[v9.2] = "MicroBlaze version 9.2"
+TUNEVALID[v9.3] = "MicroBlaze version 9.3"
+TUNEVALID[v9.4] = "MicroBlaze version 9.4"
+TUNEVALID[v9.5] = "MicroBlaze version 9.5"
+TUNEVALID[v9.6] = "MicroBlaze version 9.6"
+TUNEVALID[v10.0] = "MicroBlaze version 10.0"
+
+# Version conflict matrix
+TUNECONFLICTS[v7.30] := "${@microblaze_version_conflict('v7.30', d)}"
+TUNECONFLICTS[v8.00] := "${@microblaze_version_conflict('v8.00', d)}"
+TUNECONFLICTS[v8.10] := "${@microblaze_version_conflict('v8.10', d)}"
+TUNECONFLICTS[v8.20] := "${@microblaze_version_conflict('v8.20', d)}"
+TUNECONFLICTS[v8.30] := "${@microblaze_version_conflict('v8.30', d)}"
+TUNECONFLICTS[v8.40] := "${@microblaze_version_conflict('v8.40', d)}"
+TUNECONFLICTS[v8.50] := "${@microblaze_version_conflict('v8.50', d)}"
+TUNECONFLICTS[v9.0] := "${@microblaze_version_conflict('v9.0', d)}"
+TUNECONFLICTS[v9.1] := "${@microblaze_version_conflict('v9.1', d)}"
+TUNECONFLICTS[v9.2] := "${@microblaze_version_conflict('v9.2', d)}"
+TUNECONFLICTS[v9.3] := "${@microblaze_version_conflict('v9.3', d)}"
+TUNECONFLICTS[v9.4] := "${@microblaze_version_conflict('v9.4', d)}"
+TUNECONFLICTS[v9.5] := "${@microblaze_version_conflict('v9.5', d)}"
+TUNECONFLICTS[v9.6] := "${@microblaze_version_conflict('v9.6', d)}"
+TUNECONFLICTS[v10.0] := "${@microblaze_version_conflict('v10.0', d)}"
+
+# Version/feature conflicts
+TUNECONFLICTS[v7.30] += "reorder little-endian"
+TUNECONFLICTS[v8.00] += "reorder"
+TUNECONFLICTS[v8.10] += "reorder"
+TUNECONFLICTS[v8.20] += "reorder"
+
+# Version flags
+TUNE_CCARGS += 
"-mcpu=${@microblaze_format_gcc_version(microblaze_current_version(d))}"
+MBPKGARCH_VERSION = 
"-${@microblaze_format_pkg_version(microblaze_current_version(d))}"
+
+# Perform some additional tune feature dependency enforcement
+python __anonymous () {
+    tunes = (d.getVar('TUNE_FEATURES') or "").split()
+    if len(tunes) != 0:
+        # For v8.30 pattern-compare is required if reorder is enabled, enforce
+        # this in tune features.
+        if 'v8.30' in tunes and 'reorder' in tunes and 'pattern-compare' not 
in tunes:
+            d.setVar("TUNE_FEATURES_append", " pattern-compare")
+}
+
diff --git a/conf/machine/include/tune-microblaze-features.inc 
b/conf/machine/include/tune-microblaze-features.inc
index ad08a18664..29463d2bcb 100644
--- a/conf/machine/include/tune-microblaze-features.inc
+++ b/conf/machine/include/tune-microblaze-features.inc
@@ -12,9 +12,9 @@ require 
conf/machine/include/microblaze/feature-microblaze-reorder.inc
 TUNE_ARCH = "microblaze${@bb.utils.contains("TUNE_FEATURES", "little-endian", 
"el", "eb" ,d)}"
 
 # Compiler args
-TUNE_CCARGS += "${MBCCARGSENDIAN} ${MBCCARGSVERSION} ${MBCCARGSBARRELSHIFT} 
${MBCCARGSMUL} ${MBCCARGSDIV} ${MBCCARGSFPU} ${MBCCARGSPATTERNCOMPARE} 
${MBCCARGSREORDER}"
+TUNE_CCARGS += "${MBCCARGSENDIAN} ${MBCCARGSBARRELSHIFT} ${MBCCARGSMUL} 
${MBCCARGSDIV} ${MBCCARGSFPU} ${MBCCARGSPATTERNCOMPARE} ${MBCCARGSREORDER}"
 
 # Package Architecture formatting
 MBPKGMATH = "${MBPKGMUL}${MBPKGDIV}${MBPKGFPU}"
-TUNE_PKGARCH = 
"microblaze${MBPKGENDIAN}${MBPKGVERSION}${MBPKGBARRELSHIFT}${MBPKGSPATTERNCOMPARE}${MBPKGREORDER}${MBPKGMATH}"
+TUNE_PKGARCH = 
"microblaze${MBPKGENDIAN}${MBPKGARCH_VERSION}${MBPKGBARRELSHIFT}${MBPKGSPATTERNCOMPARE}${MBPKGREORDER}${MBPKGMATH}"
 
-- 
2.11.0

-- 
_______________________________________________
meta-xilinx mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/meta-xilinx

Reply via email to