#
# Copyright (c) 2020-2021 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 (NOT TARGET freertos_kernel)
    message("Not building ethosu_message_dispatcher, required freertos not built.")
    return()
endif()

set(MESSAGE_HANDLER_ARENA_SIZE 2000000 CACHE STRING "Size of message handler tensor arena")

ethosu_add_executable(message_handler
    SOURCES
        main.cpp
        message_handler.cpp
        message_queue.cpp
    LIBRARIES
        cmsis_device
        $<$<TARGET_EXISTS:ethosu_core_driver>:ethosu_core_driver>
        ethosu_mailbox
        freertos_kernel
        inference_process)

target_include_directories(message_handler PRIVATE
    ${LINUX_DRIVER_STACK_PATH}/kernel)

target_compile_definitions(message_handler PRIVATE
    TENSOR_ARENA_SIZE=${MESSAGE_HANDLER_ARENA_SIZE})
