From 07a6c074088ab07baed9b7169b5c32be56f5d3c7 Mon Sep 17 00:00:00 2001
From: Jimmy Brisson <theotherjimmy@gmail.com>
Date: Wed, 31 May 2017 13:06:30 -0500
Subject: [PATCH 1/3] Revert "Disable Cortex-A in tooling to provide better
 error messages"

This reverts commit f5859b308b73ab79000c2b265edd975e143d29af.
---
 tools/build.py           |  2 --
 tools/build_api.py       |  3 ---
 tools/export/__init__.py |  4 +---
 tools/make.py            |  2 --
 tools/options.py         | 12 +-----------
 tools/project.py         |  3 +--
 tools/test.py            |  2 --
 7 files changed, 3 insertions(+), 25 deletions(-)

diff --git a/tools/build.py b/tools/build.py
index b9e4afe3687..52c034ca132 100644
--- a/tools/build.py
+++ b/tools/build.py
@@ -32,7 +32,6 @@
 from tools.targets import TARGET_NAMES, TARGET_MAP
 from tools.options import get_default_options_parser
 from tools.options import extract_profile
-from tools.options import mcu_is_enabled
 from tools.build_api import build_library, build_mbed_libs, build_lib
 from tools.build_api import mcu_toolchain_matrix
 from tools.build_api import print_build_results
@@ -136,7 +135,6 @@
 
     # Get target list
     targets = options.mcu if options.mcu else TARGET_NAMES
-    assert [mcu_is_enabled(parser, mcu) for mcu in targets]
 
     # Get toolchains list
     toolchains = options.tool if options.tool else TOOLCHAINS
diff --git a/tools/build_api.py b/tools/build_api.py
index 9c5333bc135..f5e6d526c00 100644
--- a/tools/build_api.py
+++ b/tools/build_api.py
@@ -1244,9 +1244,6 @@ def mcu_toolchain_matrix(verbose_html=False, platform_filter=None,
             # FIlter out platforms using regex
             if re.search(platform_filter, target) is None:
                 continue
-        # TODO: Remove this check when Cortex-A is re-enabled
-        if "Cortex-A" in TARGET_MAP[target].core:
-            continue
         target_counter += 1
 
         row = [target]  # First column is platform name
diff --git a/tools/export/__init__.py b/tools/export/__init__.py
index 41cd47702c8..e586c22b86e 100644
--- a/tools/export/__init__.py
+++ b/tools/export/__init__.py
@@ -33,7 +33,7 @@
 from tools.export import sw4stm32, e2studio, zip, cmsis, uvision, cdt, vscode
 from tools.export import gnuarmeclipse
 from tools.export import qtcreator
-from tools.targets import TARGET_NAMES, TARGET_MAP
+from tools.targets import TARGET_NAMES
 
 EXPORTERS = {
     'uvision5': uvision.Uvision,
@@ -100,8 +100,6 @@ def mcu_ide_matrix(verbose_html=False):
 
     perm_counter = 0
     for target in sorted(TARGET_NAMES):
-        if "Cortex-A" in TARGET_MAP[target].core:
-            continue
         row = [target]  # First column is platform name
         for ide in supported_ides:
             text = "-"
diff --git a/tools/make.py b/tools/make.py
index b41194aa260..6cc2827e0be 100644
--- a/tools/make.py
+++ b/tools/make.py
@@ -42,7 +42,6 @@
 from tools.targets import TARGET_MAP
 from tools.options import get_default_options_parser
 from tools.options import extract_profile
-from tools.options import mcu_is_enabled
 from tools.build_api import build_project
 from tools.build_api import mcu_toolchain_matrix
 from tools.build_api import mcu_toolchain_list
@@ -202,7 +201,6 @@
     if options.mcu is None :
         args_error(parser, "argument -m/--mcu is required")
     mcu = options.mcu[0]
-    assert mcu_is_enabled(parser, mcu)
 
     # Toolchain
     if options.tool is None:
diff --git a/tools/options.py b/tools/options.py
index 4cbf8bc2755..adcbe5fb9a1 100644
--- a/tools/options.py
+++ b/tools/options.py
@@ -19,7 +19,7 @@
 from os import listdir
 from argparse import ArgumentParser
 from tools.toolchains import TOOLCHAINS
-from tools.targets import TARGET_NAMES, TARGET_MAP
+from tools.targets import TARGET_NAMES
 from tools.utils import argparse_force_uppercase_type, \
     argparse_lowercase_hyphen_type, argparse_many, \
     argparse_filestring_type, args_error, argparse_profile_filestring_type,\
@@ -121,13 +121,3 @@ def extract_profile(parser, options, toolchain, fallback="develop"):
                                 " supported by profile {}").format(toolchain,
                                                                    filename))
     return profile
-
-def mcu_is_enabled(parser, mcu):
-    if "Cortex-A" in TARGET_MAP[mcu].core:
-        args_error(
-            parser,
-            ("%s Will be supported in mbed OS 5.6. "
-             "To use the %s, please checkout the mbed OS 5.4 release branch. "
-             "See https://developer.mbed.org/platforms/Renesas-GR-PEACH/#important-notice "
-             "for more information") % (mcu, mcu))
-    return True
diff --git a/tools/project.py b/tools/project.py
index 8157a9c29c5..dce04ab6437 100644
--- a/tools/project.py
+++ b/tools/project.py
@@ -20,7 +20,7 @@
 from tools.utils import argparse_force_lowercase_type
 from tools.utils import argparse_force_uppercase_type
 from tools.utils import print_large_string
-from tools.options import extract_profile, list_profiles, mcu_is_enabled
+from tools.options import extract_profile, list_profiles
 
 def setup_project(ide, target, program=None, source_dir=None, build=None, export_path=None):
     """Generate a name, if not provided, and find dependencies
@@ -221,7 +221,6 @@ def main():
     if not options.mcu:
         args_error(parser, "argument -m/--mcu is required")
 
-    assert mcu_is_enabled(parser, options.mcu)
     # Toolchain
     if not options.ide:
         args_error(parser, "argument -i is required")
diff --git a/tools/test.py b/tools/test.py
index c6faf05663b..0058c97d37c 100644
--- a/tools/test.py
+++ b/tools/test.py
@@ -39,7 +39,6 @@
 from utils import argparse_dir_not_parent
 from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS, TOOLCHAIN_CLASSES
 from tools.settings import CLI_COLOR_MAP
-from tools.options import mcu_is_enabled
 
 if __name__ == '__main__':
     try:
@@ -116,7 +115,6 @@
         if options.mcu is None :
             args_error(parser, "argument -m/--mcu is required")
         mcu = options.mcu[0]
-        assert mcu_is_enabled(parser, mcu)
 
         # Toolchain
         if options.tool is None:

From d8caee9077cdf2e53a07efd61529c27a30c00895 Mon Sep 17 00:00:00 2001
From: Jimmy Brisson <theotherjimmy@gmail.com>
Date: Wed, 31 May 2017 13:08:15 -0500
Subject: [PATCH 2/3] Disallow building of mbed OS 2 + rtos

---
 tools/build_api.py                     | 6 ++++--
 tools/make.py                          | 4 ++--
 tools/test/build_api/build_api_test.py | 4 ++--
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/tools/build_api.py b/tools/build_api.py
index f5e6d526c00..62430bf5b35 100644
--- a/tools/build_api.py
+++ b/tools/build_api.py
@@ -478,12 +478,10 @@ def build_project(src_paths, build_path, target, toolchain_name,
         src_paths.extend(libraries_paths)
         inc_dirs.extend(map(dirname, libraries_paths))
 
-    # Build Directory
     if clean and exists(build_path):
         rmtree(build_path)
     mkdir(build_path)
 
-    # Pass all params to the unified prepare_toolchain()
     toolchain = prepare_toolchain(
         src_paths, build_path, target, toolchain_name, macros=macros,
         clean=clean, jobs=jobs, notify=notify, silent=silent, verbose=verbose,
@@ -513,6 +511,10 @@ def build_project(src_paths, build_path, target, toolchain_name,
     try:
         # Call unified scan_resources
         resources = scan_resources(src_paths, toolchain, inc_dirs=inc_dirs)
+        if  (hasattr(toolchain.target, "release_versions") and
+             "5" not in toolchain.target.release_versions and
+             "rtos" in toolchain.config.lib_config_data):
+            raise NotSupportedException("Target does not support mbed OS 5")
 
         # Change linker script if specified
         if linker_script is not None:
diff --git a/tools/make.py b/tools/make.py
index 6cc2827e0be..037bbdf2892 100644
--- a/tools/make.py
+++ b/tools/make.py
@@ -313,8 +313,8 @@
 
         except KeyboardInterrupt, e:
             print "\n[CTRL+c] exit"
-        except NotSupportedException, e:
-            print "\nNot supported for selected target"
+        except NotSupportedException as e:
+            print "\nCould not compile for %s: %s" % (mcu, str(e))
         except Exception,e:
             if options.verbose:
                 import traceback
diff --git a/tools/test/build_api/build_api_test.py b/tools/test/build_api/build_api_test.py
index 2ffcf9f49b5..5e6b1fc7983 100644
--- a/tools/test/build_api/build_api_test.py
+++ b/tools/test/build_api/build_api_test.py
@@ -131,7 +131,7 @@ def test_build_project_app_config(self, mock_prepare_toolchain, mock_exists, _,
         mock_exists.return_value = False
         mock_prepare_toolchain().link_program.return_value = 1, 2
         mock_prepare_toolchain().config = namedtuple(
-            "Config", "has_regions name")(None, None)
+            "Config", "has_regions name lib_config_data")(None, None, {})
 
         build_project(self.src_paths, self.build_path, self.target,
                       self.toolchain_name, app_config=app_config)
@@ -160,7 +160,7 @@ def test_build_project_no_app_config(self, mock_prepare_toolchain, mock_exists,
         # Needed for the unpacking of the returned value
         mock_prepare_toolchain().link_program.return_value = 1, 2
         mock_prepare_toolchain().config = namedtuple(
-            "Config", "has_regions name")(None, None)
+            "Config", "has_regions name lib_config_data")(None, None, {})
 
         build_project(self.src_paths, self.build_path, self.target,
                       self.toolchain_name)

From cee0cbd90023c6b3bd17ff31bb7a89175c1bf965 Mon Sep 17 00:00:00 2001
From: Jimmy Brisson <theotherjimmy@gmail.com>
Date: Wed, 31 May 2017 13:08:43 -0500
Subject: [PATCH 3/3] Remove Cortex-A mbed OS 5 support

---
 targets/targets.json | 4 ++--
 tools/build_api.py   | 9 ++++++++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/targets/targets.json b/targets/targets.json
index 5b5fd0c7115..454ee6f3c70 100644
--- a/targets/targets.json
+++ b/targets/targets.json
@@ -1926,7 +1926,7 @@
         "inherits": ["Target"],
         "device_has": ["ANALOGIN", "CAN", "ERROR_PATTERN", "ETHERNET", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"],
         "features": ["LWIP"],
-        "release_versions": ["2", "5"]
+        "release_versions": ["2"]
     },
     "VK_RZ_A1H": {
         "inherits": ["Target"],
@@ -1938,7 +1938,7 @@
         "device_has": ["ANALOGIN", "CAN", "ERROR_PATTERN", "ETHERNET", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SPI", "SPISLAVE", "STDIO_MESSAGES"],
         "features": ["LWIP"],
         "default_lib": "std",
-        "release_versions": ["2", "5"]
+        "release_versions": ["2"]
     },
     "MAXWSNENV": {
         "inherits": ["Target"],
diff --git a/tools/build_api.py b/tools/build_api.py
index 62430bf5b35..84a143484db 100644
--- a/tools/build_api.py
+++ b/tools/build_api.py
@@ -514,7 +514,14 @@ def build_project(src_paths, build_path, target, toolchain_name,
         if  (hasattr(toolchain.target, "release_versions") and
              "5" not in toolchain.target.release_versions and
              "rtos" in toolchain.config.lib_config_data):
-            raise NotSupportedException("Target does not support mbed OS 5")
+            if "Cortex-A" in toolchain.target.core:
+                raise NotSupportedException(
+                    ("%s Will be supported in mbed OS 5.6. "
+                     "To use the %s, please checkout the mbed OS 5.4 release branch. "
+                     "See https://developer.mbed.org/platforms/Renesas-GR-PEACH/#important-notice "
+                     "for more information") % (toolchain.target.name, toolchain.target.name))
+            else:
+                raise NotSupportedException("Target does not support mbed OS 5")
 
         # Change linker script if specified
         if linker_script is not None: