Updating message handler firmware

The 'message handler' firmware was based on a custom interface between
Linux and the firmware. Because the kernel driver has been converted
into a rpmsg driver, the 'message handler' application has been updated
into an OpenAMP based firmware.

Change-Id: I1339180c4f53cbad42501a2827863b7b49561ff4
diff --git a/applications/message_handler_openamp/CMakeLists.txt b/applications/message_handler_openamp/CMakeLists.txt
new file mode 100644
index 0000000..f2624c3
--- /dev/null
+++ b/applications/message_handler_openamp/CMakeLists.txt
@@ -0,0 +1,76 @@
+#
+# SPDX-FileCopyrightText: Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
+#
+# 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("Skipping message handler openamp")
+    return()
+endif()
+
+#############################################################################
+# Configuration
+#############################################################################
+
+set(MESSAGE_HANDLER_MODEL_0 "" CACHE STRING "Path to built in model 0")
+set(MESSAGE_HANDLER_MODEL_1 "" CACHE STRING "Path to built in model 1")
+set(MESSAGE_HANDLER_MODEL_2 "" CACHE STRING "Path to built in model 2")
+set(MESSAGE_HANDLER_MODEL_3 "" CACHE STRING "Path to built in model 3")
+
+set(MESSAGE_HANDLER_ARENA_SIZE 2000000 CACHE STRING "Total size of all message handler tensor arenas")
+
+#############################################################################
+# TFLM arena
+#############################################################################
+
+# 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}")
+
+#############################################################################
+# Message handler application
+#############################################################################
+
+ethosu_add_executable(message_handler_openamp
+    SOURCES
+        main.cpp
+        core_driver_mutex.cpp
+        freertos_allocator.cpp
+        inference_runner.cpp
+        message_handler.cpp
+        remoteproc.cpp
+    LIBRARIES
+        $<$<TARGET_EXISTS:ethosu_core_driver>:ethosu_core_driver>
+        ethosu_log
+        ethosu_mailbox
+        freertos_kernel
+        inference_process
+        openamp-freertos)
+
+target_include_directories(message_handler_openamp PRIVATE
+    ${LINUX_DRIVER_STACK_PATH}/kernel)
+
+target_compile_definitions(message_handler_openamp PRIVATE
+    TENSOR_ARENA_SIZE=${TENSOR_ARENA_SIZE}
+    $<$<BOOL:${MESSAGE_HANDLER_MODEL_0}>:MODEL_0=${MESSAGE_HANDLER_MODEL_0}>
+    $<$<BOOL:${MESSAGE_HANDLER_MODEL_1}>:MODEL_1=${MESSAGE_HANDLER_MODEL_1}>
+    $<$<BOOL:${MESSAGE_HANDLER_MODEL_2}>:MODEL_2=${MESSAGE_HANDLER_MODEL_2}>
+    $<$<BOOL:${MESSAGE_HANDLER_MODEL_3}>:MODEL_3=${MESSAGE_HANDLER_MODEL_3}>)