[meta-xilinx] [PATCH 3/4] feature-microblaze-versions.inc: Clean up and consolidation
Nathan Rossi
nathan at nathanrossi.com
Wed Jan 18 05:40:56 PST 2017
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 <nathan at nathanrossi.com>
---
.../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
More information about the meta-xilinx
mailing list