mirror of https://github.com/ARMmbed/mbed-os.git
MCU-Toolchain matrix: release versions and default to mbed OS 5
This modifies the behavior of 'mcu_toolchain_matrix' in build_api.py. It now prints release version support in the matrix. It also defaults to only showing targets in mbed OS 5. You can still show older release versions by modifying the 'release_version' parameter of the function.pull/2260/head
parent
edc580758e
commit
45cb6c6bd0
|
@ -36,6 +36,8 @@ from jinja2 import FileSystemLoader
|
||||||
from jinja2.environment import Environment
|
from jinja2.environment import Environment
|
||||||
from tools.config import Config
|
from tools.config import Config
|
||||||
|
|
||||||
|
RELEASE_VERSIONS = ['2', '5']
|
||||||
|
|
||||||
def prep_report(report, target_name, toolchain_name, id_name):
|
def prep_report(report, target_name, toolchain_name, id_name):
|
||||||
# Setup report keys
|
# Setup report keys
|
||||||
if not target_name in report:
|
if not target_name in report:
|
||||||
|
@ -116,9 +118,9 @@ def is_official_target(target_name, version):
|
||||||
""" Returns True, None if a target is part of the official release for the
|
""" Returns True, None if a target is part of the official release for the
|
||||||
given version. Return False, 'reason' if a target is not part of the
|
given version. Return False, 'reason' if a target is not part of the
|
||||||
official release for the given version.
|
official release for the given version.
|
||||||
|
|
||||||
target_name: name if the target (ex. 'K64F')
|
target_name: Name if the target (ex. 'K64F')
|
||||||
version: string of the version (ex. '2' or '5')
|
version: The release version string. Should be a string contained within RELEASE_VERSIONS
|
||||||
"""
|
"""
|
||||||
|
|
||||||
result = True
|
result = True
|
||||||
|
@ -154,6 +156,11 @@ def is_official_target(target_name, version):
|
||||||
(("official release: %s" + linesep) % ", ".join(required_toolchains_sorted)) + \
|
(("official release: %s" + linesep) % ", ".join(required_toolchains_sorted)) + \
|
||||||
("Currently it is only configured to support the ") + \
|
("Currently it is only configured to support the ") + \
|
||||||
("following toolchains: %s" % ", ".join(supported_toolchains_sorted))
|
("following toolchains: %s" % ", ".join(supported_toolchains_sorted))
|
||||||
|
else:
|
||||||
|
result = False
|
||||||
|
reason = ("Target '%s' has set an invalid release version of '%s'" % version) + \
|
||||||
|
("Please choose from the following release versions: %s" + ', '.join(RELEASE_VERSIONS))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
result = False
|
result = False
|
||||||
if not hasattr(target, 'release'):
|
if not hasattr(target, 'release'):
|
||||||
|
@ -163,14 +170,35 @@ def is_official_target(target_name, version):
|
||||||
|
|
||||||
return result, reason
|
return result, reason
|
||||||
|
|
||||||
|
def transform_release_toolchains(toolchains, version):
|
||||||
|
""" Given a list of toolchains and a release version, return a list of
|
||||||
|
only the supported toolchains for that release
|
||||||
|
|
||||||
|
toolchains: The list of toolchains
|
||||||
|
version: The release version string. Should be a string contained within RELEASE_VERSIONS
|
||||||
|
"""
|
||||||
|
toolchains_set = set(toolchains)
|
||||||
|
|
||||||
|
if version == '5':
|
||||||
|
return ['ARM', 'GCC_ARM', 'IAR']
|
||||||
|
else:
|
||||||
|
return toolchains
|
||||||
|
|
||||||
|
|
||||||
def get_mbed_official_release(version):
|
def get_mbed_official_release(version):
|
||||||
|
""" Given a release version string, return a tuple that contains a target
|
||||||
|
and the supported toolchains for that release.
|
||||||
|
Ex. Given '2', return (('LPC1768', ('ARM', 'GCC_ARM')), ('K64F', ('ARM', 'GCC_ARM')), ...)
|
||||||
|
|
||||||
|
version: The version string. Should be a string contained within RELEASE_VERSIONS
|
||||||
|
"""
|
||||||
|
|
||||||
MBED_OFFICIAL_RELEASE = (
|
MBED_OFFICIAL_RELEASE = (
|
||||||
tuple(
|
tuple(
|
||||||
tuple(
|
tuple(
|
||||||
[
|
[
|
||||||
TARGET_MAP[target].name,
|
TARGET_MAP[target].name,
|
||||||
tuple(TARGET_MAP[target].supported_toolchains)
|
tuple(transform_release_toolchains(TARGET_MAP[target].supported_toolchains, version))
|
||||||
]
|
]
|
||||||
) for target in TARGET_NAMES if (hasattr(TARGET_MAP[target], 'release') and version in TARGET_MAP[target].release)
|
) for target in TARGET_NAMES if (hasattr(TARGET_MAP[target], 'release') and version in TARGET_MAP[target].release)
|
||||||
)
|
)
|
||||||
|
@ -719,24 +747,57 @@ def build_mbed_libs(target, toolchain_name, options=None, verbose=False, clean=F
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
def get_unique_supported_toolchains():
|
def get_unique_supported_toolchains(release_targets=None):
|
||||||
""" Get list of all unique toolchains supported by targets """
|
""" Get list of all unique toolchains supported by targets
|
||||||
|
If release_targets is not specified, then it queries all known targets
|
||||||
|
release_targets: tuple structure returned from get_mbed_official_release()
|
||||||
|
"""
|
||||||
unique_supported_toolchains = []
|
unique_supported_toolchains = []
|
||||||
for target in TARGET_NAMES:
|
|
||||||
for toolchain in TARGET_MAP[target].supported_toolchains:
|
if not release_targets:
|
||||||
if toolchain not in unique_supported_toolchains:
|
for target in TARGET_NAMES:
|
||||||
unique_supported_toolchains.append(toolchain)
|
for toolchain in TARGET_MAP[target].supported_toolchains:
|
||||||
|
if toolchain not in unique_supported_toolchains:
|
||||||
|
unique_supported_toolchains.append(toolchain)
|
||||||
|
else:
|
||||||
|
for target in release_targets:
|
||||||
|
for toolchain in target[1]:
|
||||||
|
if toolchain not in unique_supported_toolchains:
|
||||||
|
unique_supported_toolchains.append(toolchain)
|
||||||
|
|
||||||
return unique_supported_toolchains
|
return unique_supported_toolchains
|
||||||
|
|
||||||
|
|
||||||
def mcu_toolchain_matrix(verbose_html=False, platform_filter=None):
|
def mcu_toolchain_matrix(verbose_html=False, platform_filter=None, release_version='5'):
|
||||||
""" Shows target map using prettytable """
|
""" Shows target map using prettytable """
|
||||||
unique_supported_toolchains = get_unique_supported_toolchains()
|
|
||||||
from prettytable import PrettyTable # Only use it in this function so building works without extra modules
|
from prettytable import PrettyTable # Only use it in this function so building works without extra modules
|
||||||
|
|
||||||
|
if isinstance(release_version, basestring):
|
||||||
|
# Force release_version to lowercase if it is a string
|
||||||
|
release_version = release_version.lower()
|
||||||
|
else:
|
||||||
|
# Otherwise default to printing all known targets and toolchains
|
||||||
|
release_version = 'all'
|
||||||
|
|
||||||
|
|
||||||
|
version_release_targets = {}
|
||||||
|
version_release_target_names = {}
|
||||||
|
|
||||||
|
for version in RELEASE_VERSIONS:
|
||||||
|
version_release_targets[version] = get_mbed_official_release(version)
|
||||||
|
version_release_target_names[version] = [x[0] for x in version_release_targets[version]]
|
||||||
|
|
||||||
|
if release_version in RELEASE_VERSIONS:
|
||||||
|
release_targets = version_release_targets[release_version]
|
||||||
|
else:
|
||||||
|
release_targets = None
|
||||||
|
|
||||||
|
unique_supported_toolchains = get_unique_supported_toolchains(release_targets)
|
||||||
|
prepend_columns = ["Target"] + ["mbed OS %s" % x for x in RELEASE_VERSIONS]
|
||||||
|
|
||||||
# All tests status table print
|
# All tests status table print
|
||||||
columns = ["Target"] + unique_supported_toolchains
|
columns = prepend_columns + unique_supported_toolchains
|
||||||
pt = PrettyTable(["Target"] + unique_supported_toolchains)
|
pt = PrettyTable(columns)
|
||||||
# Align table
|
# Align table
|
||||||
for col in columns:
|
for col in columns:
|
||||||
pt.align[col] = "c"
|
pt.align[col] = "c"
|
||||||
|
@ -744,7 +805,15 @@ def mcu_toolchain_matrix(verbose_html=False, platform_filter=None):
|
||||||
|
|
||||||
perm_counter = 0
|
perm_counter = 0
|
||||||
target_counter = 0
|
target_counter = 0
|
||||||
for target in sorted(TARGET_NAMES):
|
|
||||||
|
target_names = []
|
||||||
|
|
||||||
|
if release_targets:
|
||||||
|
target_names = [x[0] for x in release_targets]
|
||||||
|
else:
|
||||||
|
target_names = TARGET_NAMES
|
||||||
|
|
||||||
|
for target in sorted(target_names):
|
||||||
if platform_filter is not None:
|
if platform_filter is not None:
|
||||||
# FIlter out platforms using regex
|
# FIlter out platforms using regex
|
||||||
if re.search(platform_filter, target) is None:
|
if re.search(platform_filter, target) is None:
|
||||||
|
@ -752,6 +821,14 @@ def mcu_toolchain_matrix(verbose_html=False, platform_filter=None):
|
||||||
target_counter += 1
|
target_counter += 1
|
||||||
|
|
||||||
row = [target] # First column is platform name
|
row = [target] # First column is platform name
|
||||||
|
|
||||||
|
for version in RELEASE_VERSIONS:
|
||||||
|
if target in version_release_target_names[version]:
|
||||||
|
text = "Supported"
|
||||||
|
else:
|
||||||
|
text = "-"
|
||||||
|
row.append(text)
|
||||||
|
|
||||||
for unique_toolchain in unique_supported_toolchains:
|
for unique_toolchain in unique_supported_toolchains:
|
||||||
if unique_toolchain in TARGET_MAP[target].supported_toolchains:
|
if unique_toolchain in TARGET_MAP[target].supported_toolchains:
|
||||||
text = "Supported"
|
text = "Supported"
|
||||||
|
|
Loading…
Reference in New Issue