MLECO-3225: Using official support for Arm Cortex-M85 CPU.
* CMake version requirement bumped up to 3.21.0
* CMake 3.22.4 installed in the local Python virtualenv
* CPU flags updated in toolchain files.
* Using __ARM_FEATURE_DSP instead of potentially defining
ARM_MATH_DSP wrongly.
* CMake project version bumped up to 22.05.0
Changes also made for MLECO-3107 (pack generation):
* TensorFlow Lite Micro CMSIS-pack version updated to
1.22.02.
* Change to using __ARM_FEATURE_DSP will also help the
generated pack.
Partial changes for MLECO-3095:
* CMSIS updated to version post 5.9.0
* TensorFlow Lite Micro updated to latest available
* Ethos-U driver and core-platform repositories updated
to 20.05_rc2 tags.
Change-Id: I012c9e65897aed8ce589cff9bfe3a19efc3edeb9
Signed-off-by: Kshitij Sisodia <kshitij.sisodia@arm.com>
diff --git a/scripts/cmake/toolchains/bare-metal-gcc.cmake b/scripts/cmake/toolchains/bare-metal-gcc.cmake
index a6d6c0e..9c1cd4f 100644
--- a/scripts/cmake/toolchains/bare-metal-gcc.cmake
+++ b/scripts/cmake/toolchains/bare-metal-gcc.cmake
@@ -30,7 +30,7 @@
set(CMAKE_CXX_COMPILER_WORKS 1)
if (NOT DEFINED CMAKE_SYSTEM_PROCESSOR AND NOT DEFINED CMAKE_SYSTEM_ARCH)
- set(CMAKE_SYSTEM_PROCESSOR cortex-m55)
+ set(CMAKE_SYSTEM_PROCESSOR cortex-m55 CACHE STRING "Cortex-M CPU to use")
endif()
if (CMAKE_SYSTEM_PROCESSOR STREQUAL cortex-m55)
@@ -38,25 +38,26 @@
set(CPU_ID M55)
set(CPU_COMPILE_DEF CPU_CORTEX_${CPU_ID})
set(ARM_CPU "ARMC${CPU_ID}")
- set(FLOAT_ABI hard)
- set(ARM_MATH_DSP 1)
- set(ARM_MATH_LOOPUNROLL 1)
set(CPU_HEADER_FILE "${ARM_CPU}.h")
set(CPU_COMPILE_OPTION "-mcpu=${CMAKE_SYSTEM_PROCESSOR}")
+ set(FLOAT_ABI_COMPILE_OPTION "-mfloat-abi=hard")
set(CPU_LINK_OPT "--cpu=Cortex-${CPU_ID}")
-elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL cortex-m85 OR CMAKE_SYSTEM_ARCH STREQUAL armv8.1-m.main)
- # Flags for Cortex-M85
+elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL cortex-m85)
+ # Flags for cortex-m85
+ # @TODO: Current versions of GNU compiler do not support Cortex-M85, we compile for Cortex-M55 instead.
+ message(WARNING "Arm GNU Toolchain does not support Arm Cortex-M85 yet, switching to Cortex-M55.")
+ set(CMAKE_SYSTEM_PROCESSOR cortex-m55 CACHE STRING "Cortex-M CPU to use" FORCE)
+ # No need to duplicate the definitions here.
+ # Flags from Cortex-M55 will be added as this toolchain file will be read by CMake again.
+elseif (CMAKE_SYSTEM_ARCH STREQUAL armv8.1-m.main)
+ # Flags for generic target armv8.1-m.main (will work for cortex-m55 and cortex-m85
set(CPU_ID ARMv81MML_DSP_DP_MVE_FP)
set(ARM_CPU "ARMv81MML")
set(CPU_COMPILE_DEF ${CPU_ID})
set(FLOAT_ABI hard)
- set(ARM_MATH_DSP 1)
- set(ARM_MATH_LOOPUNROLL 1)
-
- # @TODO: Revise once we have the CPU file in CMSIS and CPU flags
- # are supported by toolchains.
set(CPU_HEADER_FILE "${CPU_ID}.h")
set(CPU_COMPILE_OPTION "-march=armv8.1-m.main+mve.fp+fp.dp")
+ set(FLOAT_ABI_COMPILE_OPTION "-mfloat-abi=hard")
set(CPU_LINK_OPT "--cpu=8.1-M.Main.mve.fp")
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL cortex-m33)
# Flags for cortex-m33 to go here
@@ -81,23 +82,21 @@
# Arch compile options:
add_compile_options(
-mthumb
- -mfloat-abi=${FLOAT_ABI}
-mlittle-endian
-MD
+ ${FLOAT_ABI_COMPILE_OPTION}
${CPU_COMPILE_OPTION})
# Compile definitions:
add_compile_definitions(
- CPU_HEADER_FILE=\"${CPU_HEADER_FILE}\"
- $<$<BOOL:${CPU_COMPILE_DEF}>:${CPU_COMPILE_DEF}>
- $<$<BOOL:${ARM_MATH_DSP}>:ARM_MATH_DSP>
- $<$<BOOL:${ARM_MATH_LOOPUNROLL}>:ARM_MATH_LOOPUNROLL>)
+ $<$<BOOL:${CPU_HEADER_FILE}>:CPU_HEADER_FILE=\"${CPU_HEADER_FILE}\">
+ $<$<BOOL:${CPU_COMPILE_DEF}>:${CPU_COMPILE_DEF}>)
# Link options:
add_link_options(
-mthumb
${CPU_COMPILE_OPTION}
- -mfloat-abi=${FLOAT_ABI}
+ ${FLOAT_ABI_COMPILE_OPTION}
-mlittle-endian
--stats
"SHELL:-Xlinker --gc-sections"