diff --git a/tools/targets/__init__.py b/tools/targets/__init__.py index 48a24e9eca3..eb905e83546 100644 --- a/tools/targets/__init__.py +++ b/tools/targets/__init__.py @@ -52,8 +52,8 @@ "Cortex-M33-NS": ["M33", "M33_NS", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"], "Cortex-M33F": ["M33", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"], "Cortex-M33F-NS": ["M33", "M33_NS", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"], - "Cortex-M33FD": ["M33", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"], - "Cortex-M33FD-NS": ["M33", "M33_NS", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"] + "Cortex-M33FE": ["M33", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"], + "Cortex-M33FE-NS": ["M33", "M33_NS", "CORTEX_M", "LIKE_CORTEX_M33", "CORTEX"] } CORE_ARCH = { @@ -73,8 +73,8 @@ "Cortex-M33F": 8, "Cortex-M33-NS": 8, "Cortex-M33F-NS": 8, - "Cortex-M33FD": 8, - "Cortex-M33FD-NS": 8, + "Cortex-M33FE": 8, + "Cortex-M33FE-NS": 8, } ################################################################################ diff --git a/tools/toolchains/__init__.py b/tools/toolchains/__init__.py index 0fabbaf024f..b7ad33d2bc1 100644 --- a/tools/toolchains/__init__.py +++ b/tools/toolchains/__init__.py @@ -78,8 +78,8 @@ class mbedToolchain: "Cortex-M33": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM"], "Cortex-M33F-NS": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "DOMAIN_NS=1", "__FPU_PRESENT=1U", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM"], "Cortex-M33F": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "__FPU_PRESENT=1U", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM"], - "Cortex-M33FD-NS": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "DOMAIN_NS=1", "__FPU_PRESENT=1U", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM", "__DSP_PRESENT=1U"], - "Cortex-M33FD": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "__FPU_PRESENT=1U", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM", "__DSP_PRESENT=1U"], + "Cortex-M33FE-NS": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "DOMAIN_NS=1", "__FPU_PRESENT=1U", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM", "__DSP_PRESENT=1U"], + "Cortex-M33FE": ["__CORTEX_M33", "ARM_MATH_ARMV8MML", "__FPU_PRESENT=1U", "__CMSIS_RTOS", "__MBED_CMSIS_RTOS_CM", "__DSP_PRESENT=1U"], } MBED_CONFIG_FILE_NAME="mbed_config.h" diff --git a/tools/toolchains/arm.py b/tools/toolchains/arm.py index 09f76a8fa49..94722b2ee0e 100644 --- a/tools/toolchains/arm.py +++ b/tools/toolchains/arm.py @@ -25,6 +25,7 @@ from shutil import rmtree from distutils.version import LooseVersion +from tools.targets import CORE_ARCH from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS from tools.hooks import hook_tool from tools.utils import mkdir, NotSupportedException, run_cmd @@ -363,7 +364,7 @@ class ARMC6(ARM_STD): SUPPORTED_CORES = ["Cortex-M0", "Cortex-M0+", "Cortex-M3", "Cortex-M4", "Cortex-M4F", "Cortex-M7", "Cortex-M7F", "Cortex-M7FD", "Cortex-M23", "Cortex-M23-NS", "Cortex-M33", "Cortex-M33F", - "Cortex-M33-NS", "Cortex-M33F-NS", "Cortex-M33FD-NS", "Cortex-M33FD", + "Cortex-M33-NS", "Cortex-M33F-NS", "Cortex-M33FE-NS", "Cortex-M33FE", "Cortex-A9"] ARMCC_RANGE = (LooseVersion("6.10"), LooseVersion("7.0")) @@ -380,76 +381,67 @@ def __init__(self, target, *args, **kwargs): if not set(("ARM", "ARMC6")).intersection(set(target.supported_toolchains)): raise NotSupportedException("ARM/ARMC6 compiler support is required for ARMC6 build") - if target.core.lower().endswith("fd"): - self.flags['common'].append("-mcpu=%s" % target.core.lower()[:-2]) - self.flags['ld'].append("--cpu=%s" % target.core.lower()[:-2]) - self.SHEBANG += " -mcpu=%s" % target.core.lower()[:-2] - elif target.core.lower().endswith("fd-ns"): - self.flags['common'].append("-mcpu=%s" % target.core.lower()[:-5]) - self.flags['ld'].append("--cpu=%s" % target.core.lower()[:-5]) - self.SHEBANG += " -mcpu=%s" % target.core.lower()[:-5] - elif target.core.lower().endswith("f"): - self.flags['common'].append("-mcpu=%s" % target.core.lower()[:-1]) - self.flags['ld'].append("--cpu=%s" % target.core.lower()[:-1]) - self.SHEBANG += " -mcpu=%s" % target.core.lower()[:-1] - elif target.core.startswith("Cortex-M33"): - self.flags['common'].append("-mcpu=cortex-m33+nodsp") - self.flags['common'].append("-mfpu=none") - self.flags['ld'].append("--cpu=Cortex-M33.no_dsp.no_fp") - elif not target.core.startswith("Cortex-M23"): - self.flags['common'].append("-mcpu=%s" % target.core.lower()) - self.flags['ld'].append("--cpu=%s" % target.core.lower()) - self.SHEBANG += " -mcpu=%s" % target.core.lower() - - if target.core == "Cortex-M4F": + core = target.core + if CORE_ARCH[target.core] == 8: + if (not target.core.endswith("-NS")) and kwargs.get('build_dir', False): + # Create Secure library + build_dir = kwargs['build_dir'] + secure_file = join(build_dir, "cmse_lib.o") + self.flags["ld"] += ["--import_cmse_lib_out=%s" % secure_file] + + # Add linking time preprocessor macro DOMAIN_NS + if target.core.endswith("-NS"): + define_string = self.make_ld_define("DOMAIN_NS", "0x1") + self.flags["ld"].append(define_string) + core = target.core[:-3] + else: + # Add secure build flag + self.flags['cxx'].append("-mcmse") + self.flags['c'].append("-mcmse") + + cpu = { + "Cortex-M0+": "cortex-m0plus", + "Cortex-M4F": "cortex-m4", + "Cortex-M7F": "cortex-m7", + "Cortex-M7FD": "cortex-m7", + "Cortex-M33": "cortex-m33+no_dsp+no_fp", + "Cortex-M33F": "cortex-m33+no_dsp", + "Cortex-M33FE": "cortex-m33"}.get(core, core) + + cpu = cpu.lower() + self.flags['common'].append("-mcpu=%s" % cpu) + self.SHEBANG += " -mcpu=%s" % cpu + + # FPU handling + if core == "Cortex-M4F": self.flags['common'].append("-mfpu=fpv4-sp-d16") self.flags['common'].append("-mfloat-abi=hard") - elif target.core == "Cortex-M7F": + self.flags['ld'].append("--cpu=cortex-m4") + elif core == "Cortex-M7F": self.flags['common'].append("-mfpu=fpv5-sp-d16") self.flags['common'].append("-mfloat-abi=hard") - elif target.core == "Cortex-M7FD": + self.flags['ld'].append("--cpu=cortex-m7.fp.sp") + elif core == "Cortex-M7FD": self.flags['common'].append("-mfpu=fpv5-d16") self.flags['common'].append("-mfloat-abi=hard") - elif target.core.startswith("Cortex-M23"): - self.flags['common'].append("-march=armv8-m.base") - elif target.core.startswith("Cortex-M33F"): + self.flags['ld'].append("--cpu=cortex-m7") + elif core == "Cortex-M33F": self.flags['common'].append("-mfpu=fpv5-sp-d16") self.flags['common'].append("-mfloat-abi=hard") - - if ((target.core.startswith("Cortex-M23") or - target.core.startswith("Cortex-M33")) and - not target.core.endswith("-NS")): - self.flags['cxx'].append("-mcmse") - self.flags['c'].append("-mcmse") - - # Create Secure library - if ((target.core.startswith("Cortex-M23") or - target.core.startswith("Cortex-M33")) and - not target.core.endswith("-NS") and - kwargs.get('build_dir', False)): - build_dir = kwargs['build_dir'] - secure_file = join(build_dir, "cmse_lib.o") - self.flags["ld"] += ["--import_cmse_lib_out=%s" % secure_file] - - # Add linking time preprocessor macro DOMAIN_NS - if ((target.core.startswith("Cortex-M23") or - target.core.startswith("Cortex-M33")) and - target.core.endswith("-NS")): - define_string = self.make_ld_define("DOMAIN_NS", "0x1") - self.flags["ld"].append(define_string) + self.flags['ld'].append("--cpu=cortex-m33.no_dsp") + elif core == "Cortex-M33": + self.flags['ld'].append("--cpu=cortex-m33.no_dsp.no_fp") + else: + self.flags['ld'].append("--cpu=%s" % cpu) asm_cpu = { "Cortex-M0+": "Cortex-M0", "Cortex-M4F": "Cortex-M4.fp", "Cortex-M7F": "Cortex-M7.fp.sp", "Cortex-M7FD": "Cortex-M7.fp.dp", - "Cortex-M23-NS": "Cortex-M23", "Cortex-M33": "Cortex-M33.no_dsp.no_fp", - "Cortex-M33-NS": "Cortex-M33.no_dsp.no_fp", "Cortex-M33F": "Cortex-M33.no_dsp", - "Cortex-M33F-NS": "Cortex-M33.no_dsp", - "Cortex-M33FD": "Cortex-M33", - "Cortex-M33FD-NS": "Cortex-M33"}.get(target.core, target.core) + "Cortex-M33FE": "Cortex-M33"}.get(core, core) self.flags['asm'].append("--cpu=%s" % asm_cpu) diff --git a/tools/toolchains/gcc.py b/tools/toolchains/gcc.py index af3c5ca6aa3..bc50e09e449 100644 --- a/tools/toolchains/gcc.py +++ b/tools/toolchains/gcc.py @@ -20,6 +20,7 @@ from distutils.spawn import find_executable from distutils.version import LooseVersion +from tools.targets import CORE_ARCH from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS from tools.hooks import hook_tool from tools.utils import run_cmd, NotSupportedException @@ -52,37 +53,46 @@ def __init__(self, target, notify=None, macros=None, build_profile=None, self.flags["common"].append("-DMBED_RTOS_SINGLE_THREAD") self.flags["ld"].append("--specs=nano.specs") - if target.core == "Cortex-M0+": - self.cpu = ["-mcpu=cortex-m0plus"] - elif target.core.startswith("Cortex-M4"): - self.cpu = ["-mcpu=cortex-m4"] - elif target.core.startswith("Cortex-M7"): - self.cpu = ["-mcpu=cortex-m7"] - elif target.core.startswith("Cortex-M23"): - self.cpu = ["-mcpu=cortex-m23"] - elif target.core.startswith("Cortex-M33FD"): - self.cpu = ["-mcpu=cortex-m33"] - elif target.core.startswith("Cortex-M33F"): - self.cpu = ["-mcpu=cortex-m33+nodsp"] - elif target.core.startswith("Cortex-M33"): + core = target.core + if CORE_ARCH[target.core] == 8: + # Add linking time preprocessor macro DOMAIN_NS + if target.core.endswith("-NS"): + self.flags["ld"].append("-DDOMAIN_NS=1") + core = target.core[:-3] + else: + self.cpu.append("-mcmse") + self.flags["ld"].extend([ + "-Wl,--cmse-implib", + "-Wl,--out-implib=%s" % join(build_dir, "cmse_lib.o") + ]) + + cpu = { + "Cortex-M0+": "cortex-m0plus", + "Cortex-M4F": "cortex-m4", + "Cortex-M7F": "cortex-m7", + "Cortex-M7FD": "cortex-m7", + "Cortex-M33F": "cortex-m33+no_dsp", + "Cortex-M33FE": "cortex-m33"}.get(core, core) + + if core == "Cortex-M33": self.cpu = ["-march=armv8-m.main"] else: - self.cpu = ["-mcpu={}".format(target.core.lower())] + self.cpu = ["-mcpu={}".format(cpu.lower())] if target.core.startswith("Cortex-M"): self.cpu.append("-mthumb") # FPU handling, M7 possibly to have double FPU - if target.core == "Cortex-M4F": + if core == "Cortex-M4F": self.cpu.append("-mfpu=fpv4-sp-d16") self.cpu.append("-mfloat-abi=softfp") - elif target.core == "Cortex-M7F": + elif core == "Cortex-M7F": self.cpu.append("-mfpu=fpv5-sp-d16") self.cpu.append("-mfloat-abi=softfp") - elif target.core == "Cortex-M7FD": + elif core == "Cortex-M7FD": self.cpu.append("-mfpu=fpv5-d16") self.cpu.append("-mfloat-abi=softfp") - elif target.core.startswith("Cortex-M33F"): + elif core.startswith("Cortex-M33F"): self.cpu.append("-mfpu=fpv5-sp-d16") self.cpu.append("-mfloat-abi=softfp") @@ -94,21 +104,6 @@ def __init__(self, target, notify=None, macros=None, build_profile=None, self.cpu.append("-mfloat-abi=hard") self.cpu.append("-mno-unaligned-access") - if ((target.core.startswith("Cortex-M23") or - target.core.startswith("Cortex-M33")) and - not target.core.endswith("-NS")): - self.cpu.append("-mcmse") - self.flags["ld"].extend([ - "-Wl,--cmse-implib", - "-Wl,--out-implib=%s" % join(build_dir, "cmse_lib.o") - ]) - - # Add linking time preprocessor macro DOMAIN_NS - if ((target.core.startswith("Cortex-M23") or - target.core.startswith("Cortex-M33")) and - target.core.endswith("-NS")): - self.flags["ld"].append("-DDOMAIN_NS=1") - self.flags["common"] += self.cpu main_cc = join(tool_path, "arm-none-eabi-gcc")