#
# Copyright (c) 2019-2020 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)
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
    $<$<COMPILE_LANGUAGE:CXX>:${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
    )
else()
    message(FATAL_ERROR "Invalid processor ${CMAKE_SYSTEM_PROCESSOR} when building FreeRTOS kernel")
endif()
