# # Copyright (c) 2020-2022 Arm Limited. # # 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 "Total size of all message handler tensor arenas") set(MESSAGE_HANDLER_MODEL_0 FALSE CACHE STRING "Path to built in model 0") set(MESSAGE_HANDLER_MODEL_1 FALSE CACHE STRING "Path to built in model 1") set(MESSAGE_HANDLER_MODEL_2 FALSE CACHE STRING "Path to built in model 2") set(MESSAGE_HANDLER_MODEL_3 FALSE CACHE STRING "Path to built in model 3") ethosu_add_executable(message_handler SOURCES main.cpp message_handler.cpp message_queue.cpp LIBRARIES cmsis_device $<$:ethosu_core_driver> ethosu_mailbox freertos_kernel inference_process) target_include_directories(message_handler PRIVATE ${LINUX_DRIVER_STACK_PATH}/kernel) # Split total tensor arena equally for each NPU if (TARGET ethosu_core_driver AND ETHOSU_TARGET_NPU_COUNT GREATER 0) set(NUM_ARENAS ${ETHOSU_TARGET_NPU_COUNT}) else() set(NUM_ARENAS 1) endif() math(EXPR TENSOR_ARENA_SIZE "${MESSAGE_HANDLER_ARENA_SIZE} / ${NUM_ARENAS}") target_compile_definitions(message_handler PRIVATE TENSOR_ARENA_SIZE=${TENSOR_ARENA_SIZE} $<$:MODEL_0=${MESSAGE_HANDLER_MODEL_0}> $<$:MODEL_1=${MESSAGE_HANDLER_MODEL_1}> $<$:MODEL_2=${MESSAGE_HANDLER_MODEL_2}> $<$:MODEL_3=${MESSAGE_HANDLER_MODEL_3}>) install(FILES $ DESTINATION "lib/firmware" RENAME "arm-${ETHOSU_TARGET_NPU_CONFIG}.fw" )