# # Copyright (c) 2019-2022 Arm Limited. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the License); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an AS IS BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # if(CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m3") add_compile_definitions(CPU_CORTEX_M3) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m33") add_compile_definitions(CPU_CORTEX_M33) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m4") add_compile_definitions(CPU_CORTEX_M4) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m55") add_compile_definitions(CPU_CORTEX_M55) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m7") add_compile_definitions(CPU_CORTEX_M7) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m85") add_compile_definitions(CPU_CORTEX_M85) else() message(FATAL_ERROR "Unsupported compiler ${CMAKE_SYSTEM_PROCESSOR}.") endif() if((${TARGET} STREQUAL "mps2") OR (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m55")) set("SYSTEM_CORE_CLOCK" "25000000") else() set("SYSTEM_CORE_CLOCK" "32000000") endif() configure_file(FreeRTOSConfig.h.in FreeRTOSConfig.h) set(FREERTOS_CONFIG_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}) # FreeRTOS kernel library add_library(freertos_kernel STATIC) target_compile_options(freertos_kernel PRIVATE $<$:${TOOLCHAIN_CXX_OPTIONS}> "-Wno-redundant-decls") # Set include directories target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/include ${FREERTOS_CONFIG_INCLUDE_DIR} ) # Add kernel source files target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/tasks.c ${FREERTOS_KERNEL_PATH}/list.c ${FREERTOS_KERNEL_PATH}/queue.c ) # Add the heap implementation # heap_3 uses the compiler supplied malloc & free for the heap. target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/MemMang/heap_3.c) if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m3") target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM3/port.c ) target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM3 ) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m4") target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM4F/port.c ) target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM4F ) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m7") target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM7/r0p1/port.c ) target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM7/r0p1 ) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m33") target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure/port.c ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c ) target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure ) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m55") # TODO: using the same port files as Cortex-M33. Update for Cortex-M55. target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure/port.c ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c ) target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure ) elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "cortex-m85") # TODO: using the same port files as Cortex-M33. Update for Cortex-M85. target_sources(freertos_kernel PRIVATE ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure/port.c ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure/portasm.c ) target_include_directories(freertos_kernel PUBLIC ${FREERTOS_KERNEL_PATH}/portable/GCC/ARM_CM33_NTZ/non_secure ) else() message(FATAL_ERROR "Invalid processor ${CMAKE_SYSTEM_PROCESSOR} when building FreeRTOS kernel") endif()