summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorKshitij Sisodia <kshitij.sisodia@arm.com>2022-05-20 14:30:02 +0100
committerKshitij Sisodia <kshitij.sisodia@arm.com>2022-05-23 16:11:45 +0100
commit9c6f9f8afcb003fd72944918d6b6e200d68c0918 (patch)
treeb1237909970ac74232f4ed81a26edc0847204269 /scripts
parent6f6df0934f991b64fef494b86643b3f5074fca0e (diff)
downloadml-embedded-evaluation-kit-9c6f9f8afcb003fd72944918d6b6e200d68c0918.tar.gz
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>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/cmsis-dsp.cmake12
-rw-r--r--scripts/cmake/cmsis-pack-gen/CMakeLists.txt2
-rw-r--r--scripts/cmake/cmsis-pack-gen/use-case-api.yml12
-rw-r--r--scripts/cmake/platforms/mps3/build_configuration.cmake13
-rw-r--r--scripts/cmake/tensorflow.cmake2
-rw-r--r--scripts/cmake/toolchains/bare-metal-armclang.cmake36
-rw-r--r--scripts/cmake/toolchains/bare-metal-gcc.cmake33
-rw-r--r--scripts/py/requirements.txt1
8 files changed, 48 insertions, 63 deletions
diff --git a/scripts/cmake/cmsis-dsp.cmake b/scripts/cmake/cmsis-dsp.cmake
index 73f6100..f22d5ef 100644
--- a/scripts/cmake/cmsis-dsp.cmake
+++ b/scripts/cmake/cmsis-dsp.cmake
@@ -68,16 +68,8 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
endif()
endif ()
-# 5. Add any custom/conditional flags for compilation or linkage
-if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortex-m55" OR "${CMAKE_SYSTEM_ARCH}" STREQUAL "armv8.1-m.main")
- target_compile_definitions(${CMSIS_DSP_TARGET} PUBLIC
- ARM_MATH_MVEI
- ARM_MATH_DSP
- ARM_MATH_LOOPUNROLL)
-elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL cortex-m33)
- # Placeholder, if building with Cortex-M33
-endif()
-
+# 5. General compile definitions
+target_compile_definitions(${CMSIS_DSP_TARGET} PUBLIC ARM_MATH_LOOPUNROLL)
# 6. Provide the library path for the top level CMake to use:
set(CMSIS_DSP_LIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${CMSIS_DSP_TARGET}.a")
diff --git a/scripts/cmake/cmsis-pack-gen/CMakeLists.txt b/scripts/cmake/cmsis-pack-gen/CMakeLists.txt
index 19787b6..db5cfff 100644
--- a/scripts/cmake/cmsis-pack-gen/CMakeLists.txt
+++ b/scripts/cmake/cmsis-pack-gen/CMakeLists.txt
@@ -22,7 +22,7 @@
# here along with their dependencies. #
#########################################################
-cmake_minimum_required(VERSION 3.15.6)
+cmake_minimum_required(VERSION 3.21.0)
project(ml-embedded-eval-kit-api
DESCRIPTION "Platform agnostic API for all examples.")
diff --git a/scripts/cmake/cmsis-pack-gen/use-case-api.yml b/scripts/cmake/cmsis-pack-gen/use-case-api.yml
index 8796dff..fb0cbd9 100644
--- a/scripts/cmake/cmsis-pack-gen/use-case-api.yml
+++ b/scripts/cmake/cmsis-pack-gen/use-case-api.yml
@@ -23,7 +23,7 @@
#
# Ideal usage: from the root of the repository
#
-# ml-embedded-eval-kit $ packgen -s ./source/ \ # Source dir
+# ml-embedded-eval-kit $ packgen -s ./ \ # Source dir (run this from repo root)
# -v ./scripts/cmake/cmsis-pack-gen/use-case-api.yml \ # This file's path
# -o <path-to>/ml-embedded-eval-kit-pack \ # Where to generate the ouput
# -i <path-to>/tensorflow.tensorflow-lite-micro.pdsc \ # Tensorflow packs' PDSC file
@@ -41,18 +41,18 @@ packs:
- name: "ml-embedded-eval-kit-uc-api"
description: "Sample use case APIs derived from ml-embedded-eval-kit"
vendor: "ARM"
- license: ""
+ license: "LICENSE_APACHE_2.0.txt"
url: "https://review.mlplatform.org/admin/repos/ml/ethos-u/ml-embedded-evaluation-kit/"
requirements:
packages:
- - attributes: {vendor: "tensorflow", name: "tensorflow-lite-micro", version: "0.4.0"}
- - attributes: {vendor: "ARM", name: "CMSIS", version: "5.9.0"}
+ - attributes: {vendor: "tensorflow", name: "tensorflow-lite-micro", version: "1.22.02"}
+ - attributes: {vendor: "ARM", name: "CMSIS", version: "5.8.0"}
releases:
- version: "22.05.0"
- date: "2022-05-04"
- description: "Experimental package"
+ date: "2022-05-23"
+ description: "Beta release package"
# @TODO: Add API header names and descriptions here (see placeholder below).
# apis:
diff --git a/scripts/cmake/platforms/mps3/build_configuration.cmake b/scripts/cmake/platforms/mps3/build_configuration.cmake
index 6e21d9b..749b1e1 100644
--- a/scripts/cmake/platforms/mps3/build_configuration.cmake
+++ b/scripts/cmake/platforms/mps3/build_configuration.cmake
@@ -22,18 +22,7 @@ function(set_platform_global_defaults)
if (TARGET_SUBSYSTEM STREQUAL sse-300)
set(CMAKE_SYSTEM_PROCESSOR cortex-m55 CACHE STRING "Cortex-M CPU to use")
elseif(TARGET_SUBSYSTEM STREQUAL sse-310)
- # For CMake versions older than 3.21, the compiler and linker flags for
- # ArmClang are added by CMake automatically which makes it mandatory to
- # define the system processor. For CMake versions 3.21 or later (that
- # implement policy CMP0123) we use armv8.1-m as the arch until the
- # toolchain officially supports Cortex-M85. For older version of CMake
- # we revert to using Cortex-M55 as the processor (as this will work
- # for M85 too).
- if(POLICY CMP0123)
- set(CMAKE_SYSTEM_ARCH armv8.1-m.main CACHE STRING "System arch to use")
- else()
- set(CMAKE_SYSTEM_PROCESSOR cortex-m55)
- endif()
+ set(CMAKE_SYSTEM_PROCESSOR cortex-m85 CACHE STRING "Cortex-M CPU to use")
endif()
endif()
diff --git a/scripts/cmake/tensorflow.cmake b/scripts/cmake/tensorflow.cmake
index 8a790bc..ac11542 100644
--- a/scripts/cmake/tensorflow.cmake
+++ b/scripts/cmake/tensorflow.cmake
@@ -51,7 +51,7 @@ if (TARGET_PLATFORM STREQUAL native)
else()
set(TENSORFLOW_LITE_MICRO_TARGET "cortex_m_generic")
- if ("${CMAKE_SYSTEM_ARCH}" STREQUAL "armv8.1-m.main")
+ if ("${CMAKE_SYSTEM_ARCH}" STREQUAL "armv8.1-m.main" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortex-m85")
# TensorFlow's generic makefile doesn't currently have a flow for Cortex-M85.
# We build for Arm Cortex-M55 instead.
# @TODO: check with latest TensorFlow package.
diff --git a/scripts/cmake/toolchains/bare-metal-armclang.cmake b/scripts/cmake/toolchains/bare-metal-armclang.cmake
index 97da76f..3db3320 100644
--- a/scripts/cmake/toolchains/bare-metal-armclang.cmake
+++ b/scripts/cmake/toolchains/bare-metal-armclang.cmake
@@ -25,40 +25,46 @@ set(CMAKE_ASM_COMPILER_AR armar)
set(CMAKE_CROSSCOMPILING true)
set(CMAKE_SYSTEM_NAME Generic)
-set(MIN_ARM_CLANG_VERSION 6.16)
-
# Skip compiler test execution
set(CMAKE_C_COMPILER_WORKS 1)
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)
# Flags for cortex-m55
+ set(MIN_ARM_CLANG_VERSION 6.16)
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)
+ # Flags for cortex-m85
+ set(MIN_ARM_CLANG_VERSION 6.18)
+ set(CPU_ID M85)
+ set(CPU_COMPILE_DEF CPU_CORTEX_${CPU_ID})
+ set(ARM_CPU "ARMC${CPU_ID}")
+ 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_ARCH STREQUAL armv8.1-m.main)
+ # Flags for generic armv8.1-m profile
+ set(MIN_ARM_CLANG_VERSION 6.16)
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,18 +87,16 @@ add_compile_options(
# Arch compile options:
add_compile_options(
-mthumb
- -mfloat-abi=${FLOAT_ABI}
--target=arm-arm-non-eabi
-mlittle-endian
-MD
- ${CPU_COMPILE_OPTION})
+ ${CPU_COMPILE_OPTION}
+ ${FLOAT_ABI_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_COMPILE_DEF}>:${CPU_COMPILE_DEF}>)
# Link options:
add_link_options(${CPU_LINK_OPT})
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_C_COMPILER_WORKS 1)
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 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL cortex-m55)
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 @@ add_compile_options(
# 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"
diff --git a/scripts/py/requirements.txt b/scripts/py/requirements.txt
index aeff2e0..7b4045c 100644
--- a/scripts/py/requirements.txt
+++ b/scripts/py/requirements.txt
@@ -10,3 +10,4 @@ resampy==0.2.2
scipy==1.8.0
six==1.16.0
SoundFile==0.10.3.post1
+cmake==3.22.4