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
