1# MicroBlaze versions are defined as features, the features are setup to 2# conflict with other versions as well as unavailable features for particular 3# versions. 4# 5# Versions before v9.0 of MicroBlaze use a versioning scheme of "vX.YY.Z" 6# (where Z = [abc]). For v8.* versions of MicroBlaze the revision (Z) changes 7# did not affect ABI and are ignored by this tune configuration. Though this 8# format is expected by GCC including the revision, but this is defaulted to 9# ".a". 10# 11# Since v9.0 of MicroBlaze the revision (Z) part of versions was entirely 12# dropped and the version scheme was changed to "vX.Y". 13 14def microblaze_current_version(d, gcc = False): 15 import re 16 # find the current version, and convert it to major/minor integers 17 version = None 18 for t in (d.getVar("TUNE_FEATURES") or "").split(): 19 m = re.search(r"^v(\d+)\.(\d+)", t) 20 if m: 21 version = int(m.group(1)), int(m.group(2)) 22 break 23 24 # format the version string in generic or GCC specific formats 25 if version: 26 if version[0] <= 8: 27 return ("v%d.%02d" % version[0:2]) + (".a" if gcc else "") 28 else: 29 return "v%d.%d" % version[0:2] 30 return "" 31 32# MicroBlaze versions 33TUNEVALID[v8.00] = "MicroBlaze version 8.00" 34TUNEVALID[v8.10] = "MicroBlaze version 8.10" 35TUNEVALID[v8.20] = "MicroBlaze version 8.20" 36TUNEVALID[v8.30] = "MicroBlaze version 8.30" 37TUNEVALID[v8.40] = "MicroBlaze version 8.40" 38TUNEVALID[v8.50] = "MicroBlaze version 8.50" 39TUNEVALID[v9.0] = "MicroBlaze version 9.0" 40TUNEVALID[v9.1] = "MicroBlaze version 9.1" 41TUNEVALID[v9.2] = "MicroBlaze version 9.2" 42TUNEVALID[v9.3] = "MicroBlaze version 9.3" 43TUNEVALID[v9.4] = "MicroBlaze version 9.4" 44TUNEVALID[v9.5] = "MicroBlaze version 9.5" 45TUNEVALID[v9.6] = "MicroBlaze version 9.6" 46TUNEVALID[v10.0] = "MicroBlaze version 10.0" 47TUNEVALID[v11.0] = "MicroBlaze version 11.0" 48 49# Version conflict matrix 50TUNECONFLICTS[v8.00] = "" 51TUNECONFLICTS[v8.10] = "v8.00" 52TUNECONFLICTS[v8.20] = "v8.00 v8.10" 53TUNECONFLICTS[v8.30] = "v8.00 v8.10 v8.20" 54TUNECONFLICTS[v8.40] = "v8.00 v8.10 v8.20 v8.30" 55TUNECONFLICTS[v8.50] = "v8.00 v8.10 v8.20 v8.30 v8.40" 56TUNECONFLICTS[v9.0] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50" 57TUNECONFLICTS[v9.1] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0" 58TUNECONFLICTS[v9.2] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1" 59TUNECONFLICTS[v9.3] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1 v9.2" 60TUNECONFLICTS[v9.4] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1 v9.2 v9.3" 61TUNECONFLICTS[v9.5] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1 v9.2 v9.3 v9.4" 62TUNECONFLICTS[v9.6] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1 v9.2 v9.3 v9.4 v9.5" 63TUNECONFLICTS[v10.0] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1 v9.2 v9.3 v9.4 v9.5 v9.6" 64TUNECONFLICTS[v11.0] = "v8.00 v8.10 v8.20 v8.30 v8.40 v8.50 v9.0 v9.1 v9.2 v9.3 v9.4 v9.5 v9.6 v10.0" 65 66# Version flags 67TUNE_CCARGS += "${@'-mcpu=%s' % (microblaze_current_version(d, True)) if microblaze_current_version(d, True) != '' else ''}" 68MBPKGARCH_VERSION = "${@'-%s' % (microblaze_current_version(d, True)) if microblaze_current_version(d, True) != '' else ''}" 69 70