summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorKshitij Sisodia <kshitij.sisodia@arm.com>2021-05-07 16:08:14 +0100
committerKshitij Sisodia <kshitij.sisodia@arm.com>2021-05-07 17:28:51 +0100
commitf9c19eaa9ab11e4409679fc6d2862c89410493a7 (patch)
treeb791a4c03f1fe986a2ac32593a3dc817ae3f247a /CMakeLists.txt
parent2181d0ac35f30202985a877950c88325ff665f6b (diff)
downloadml-embedded-evaluation-kit-f9c19eaa9ab11e4409679fc6d2862c89410493a7.tar.gz
MLECO-1860: Support for Arm GNU Embedded Toolchain
This patch enables compilation of ML use cases bare-metal applications using Arm GNU Embedded Toolchain. The GNU toolchain can be used instead of the Arm Compiler that was already supported. The GNU toolchain is also set as the default toolchain when building applications for the MPS3 target. Note: The version of GNU toolchain must be 10.2.1 or higher. Change-Id: I5fff242f0f52d2db6c75d292f9fa990df1aec978 Signed-off-by: Kshitij Sisodia <kshitij.sisodia@arm.com>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt69
1 files changed, 38 insertions, 31 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0581a2c..411b4f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,15 +39,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
-project(arm_ethos_u55_eval
- VERSION 21.03
- DESCRIPTION "ARM Ethos-U55 Evaluation application for MPS3 FPGA Prototyping Board and FastModel")
-
-add_compile_definitions(PRJ_VER_STR="${PROJECT_VERSION}")
-add_compile_definitions(PRJ_DES_STR="${PROJECT_DESCRIPTION}")
-
-set(CMAKE_SCRIPTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/)
-set(DOWNLOAD_DEP_DIR ${CMAKE_BINARY_DIR}/dependencies)
+set(CMAKE_SCRIPTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake)
+set(DOWNLOAD_DEP_DIR ${CMAKE_BINARY_DIR}/dependencies)
+set(CMAKE_TOOLCHAIN_DIR ${CMAKE_SCRIPTS_DIR}/toolchains)
include(${CMAKE_SCRIPTS_DIR}/source_gen_utils.cmake)
include(${CMAKE_SCRIPTS_DIR}/util_functions.cmake)
@@ -88,15 +82,28 @@ USER_OPTION(CPU_PROFILE_ENABLED "Output CPU performance profiling information. S
BOOL)
if (TARGET_PLATFORM STREQUAL mps3)
- message(STATUS "Platform: MPS3 FPGA Prototyping Board or SSE-XXX FVP")
+ message(STATUS "Platform: MPS3 FPGA Prototyping Board or FVP")
+ set(DEFAULT_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_DIR}/bare-metal-gcc.cmake)
elseif (TARGET_PLATFORM STREQUAL simple_platform)
- message(STATUS "Platform: Simple platform within minimal peripherals")
+ message(STATUS "Platform: Simple platform with minimal peripherals")
+ set(DEFAULT_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_DIR}/bare-metal-gcc.cmake)
elseif (TARGET_PLATFORM STREQUAL native)
message(STATUS "Platform: Native (Linux based x86_64/aarch64 system)")
+ set(DEFAULT_TOOLCHAIN_FILE ${CMAKE_TOOLCHAIN_DIR}/native-gcc.cmake)
else ()
message(FATAL_ERROR "Invalid platform specified: ${TARGET_PLATFORM}")
endif ()
+if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)
+ set(CMAKE_TOOLCHAIN_FILE ${DEFAULT_TOOLCHAIN_FILE}
+ CACHE FILEPATH "Toolchain file")
+endif()
+message(STATUS "Using CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}")
+
+project(arm_ml_embedded_evaluation_kit
+ VERSION 21.05
+ DESCRIPTION "ARM ML Embedded Evaluation Kit for MPS3 FPGA and FastModel")
+
enforce_compiler_version()
setup_source_generator()
@@ -318,9 +325,11 @@ foreach(use_case ${USE_CASES})
"${SRC_GEN_DIR}/*.c"
)
- set(SRC_MAIN
- "${SRC_PATH}/application/main/Main.cc"
- )
+ set(SRC_MAIN "${SRC_PATH}/application/main/Main.cc")
+
+ set_source_files_properties(${SRC_MAIN}
+ PROPERTIES COMPILE_DEFINITIONS
+ "PRJ_VER_STR=\"${PROJECT_VERSION}\";PRJ_DES_STR=\"${PROJECT_DESCRIPTION}\"")
set(UC_LIB_NAME lib${TARGET_NAME})
@@ -364,32 +373,30 @@ foreach(use_case ${USE_CASES})
$<$<BOOL:${ETHOS_U55_ENABLED}>:${ETHOS_U55_LIBS}>
$<$<BOOL:${CMSIS_DSP_LIB}>:${CMSIS_DSP_LIB}>)
- add_executable(${TARGET_NAME} ${SRC_MAIN})
+ add_executable(${TARGET_NAME} ${SRC_MAIN} ${PLAT_RETARGET_SOURCE})
target_link_libraries(${TARGET_NAME} ${UC_LIB_NAME})
if (${CMAKE_CROSSCOMPILING})
set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".axf")
+ add_target_map_file(${TARGET_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET_NAME}.map)
endif()
if (${TARGET_PLATFORM} STREQUAL mps3)
- SET(SECTORS_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sectors/${use_case})
- file(REMOVE_RECURSE ${SECTORS_DIR})
- file(MAKE_DIRECTORY ${SECTORS_DIR})
-
- add_custom_command(TARGET ${TARGET_NAME}
- POST_BUILD
- COMMAND fromelf --bin --output=${SECTORS_DIR}/
- ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET_NAME}.axf)
-
- add_custom_target(
- run-${use_case} ALL
- COMMAND ${PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/py/gen_fpga_mem_map.py
- --scatter_file_path ${SCAT_FILE}
- --target_subsystem ${TARGET_SUBSYSTEM}
- --output_file_path ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/images-${use_case}.txt
- COMMENT "Generating FPGA mappings file")
+ set(SECTORS_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/sectors)
+ set(SECTORS_BIN_DIR ${SECTORS_DIR}/${use_case})
+
+ file(REMOVE_RECURSE ${SECTORS_BIN_DIR})
+ file(MAKE_DIRECTORY ${SECTORS_BIN_DIR})
+ file(COPY ${MPS3_FPGA_CONFIG} DESTINATION ${SECTORS_DIR})
+
+ add_bin_generation_command(
+ TARGET_NAME ${TARGET_NAME}
+ OUTPUT_DIR ${SECTORS_BIN_DIR}
+ AXF_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TARGET_NAME}.axf
+ SECTION_PATTERNS "${MPS3_SECTION_PATTERNS}"
+ OUTPUT_BIN_NAMES "${MPS3_OUTPUT_BIN_NAMES}")
elseif (${TARGET_PLATFORM} STREQUAL native)
# If native build tests