MLBEDSW-2593 Build FreeRTOS kernel as a part of ethosu_core target

The ethosu_core target now includes the FreeRTOS kernel if the
CORE_SOFTWARE_RTOS is set to FreeRTOS. Currently supported
builds are for cortex M3, M4, M7, M33, and M55. The FreeRTOSConfig.h
file is generated as a part of the build.

Change-Id: Ief6921fd0d9aa3849497ef0810d2714a12eb6773
diff --git a/rtos/freertos_config/FreeRTOSConfig.h.in b/rtos/freertos_config/FreeRTOSConfig.h.in
new file mode 100644
index 0000000..58e13a7
--- /dev/null
+++ b/rtos/freertos_config/FreeRTOSConfig.h.in
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 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.
+ */
+/* Please refer to http://www.freertos.org/a00110.html for refernce. */
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+/******************************************************************************
+ * Defines
+ ******************************************************************************/
+/* Hardware features */
+#define configENABLE_MPU                                0
+#define configENABLE_FPU                                0
+#define configENABLE_TRUSTZONE                          0
+/* Scheduling */
+#define configCPU_CLOCK_HZ                              @SYSTEM_CORE_CLOCK@
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION         0
+#define configUSE_PREEMPTION                            1
+#define configUSE_TIME_SLICING                          1
+#define configMAX_PRIORITIES                            5
+#define configIDLE_SHOULD_YIELD                         1
+#define configUSE_16_BIT_TICKS                          0
+#define configRUN_FREERTOS_SECURE_ONLY                  1
+/* Stack and heap */
+#define configMINIMAL_STACK_SIZE                        (uint16_t)128
+#define configMINIMAL_SECURE_STACK_SIZE                 1024
+#define configTOTAL_HEAP_SIZE                           (size_t)(50 * 1024)
+#define configMAX_TASK_NAME_LEN                         12
+/* OS features */
+#define configUSE_MUTEXES                               1
+#define configUSE_TICKLESS_IDLE                         1
+#define configUSE_APPLICATION_TASK_TAG                  0
+#define configUSE_NEWLIB_REENTRANT                      0
+#define configUSE_CO_ROUTINES                           0
+#define configUSE_COUNTING_SEMAPHORES                   1
+#define configUSE_RECURSIVE_MUTEXES                     1
+#define configUSE_QUEUE_SETS                            0
+#define configUSE_TASK_NOTIFICATIONS                    1
+#define configUSE_TRACE_FACILITY                        1
+/* Hooks */
+#define configUSE_IDLE_HOOK                             0
+#define configUSE_TICK_HOOK                             0
+#define configUSE_MALLOC_FAILED_HOOK                    0
+/* Debug features */
+#define configCHECK_FOR_STACK_OVERFLOW                  0
+#define configASSERT(x)                                 if ((x) == 0) { taskDISABLE_INTERRUPTS(); for( ;; ); }
+#define configQUEUE_REGISTRY_SIZE                       0
+/* Timers and queues */
+#define configUSE_TIMERS                                0
+#define configTIMER_TASK_PRIORITY                       3
+#define configTIMER_TASK_STACK_DEPTH                    configMINIMAL_STACK_SIZE
+#define configTIMER_QUEUE_LENGTH                        5
+/* Task settings */
+#define INCLUDE_vTaskPrioritySet                        1
+#define INCLUDE_uxTaskPriorityGet                       1
+#define INCLUDE_vTaskDelete                             1
+#define INCLUDE_vTaskCleanUpResources                   0
+#define INCLUDE_vTaskSuspend                            1
+#define INCLUDE_vTaskDelayUntil                         1
+#define INCLUDE_vTaskDelay                              1
+#define INCLUDE_uxTaskGetStackHighWaterMark             0
+#define INCLUDE_xTaskGetIdleTaskHandle                  0
+#define INCLUDE_eTaskGetState                           1
+#define INCLUDE_xTaskResumeFromISR                      0
+#define INCLUDE_xTaskGetCurrentTaskHandle               1
+#define INCLUDE_xTaskGetSchedulerState                  0
+#define INCLUDE_xSemaphoreGetMutexHolder                0
+#define INCLUDE_xTimerPendFunctionCall                  1
+#define configUSE_STATS_FORMATTING_FUNCTIONS            1
+#define configCOMMAND_INT_MAX_OUTPUT_SIZE               2048
+#ifdef __NVIC_PRIO_BITS
+#define configPRIO_BITS                                 __NVIC_PRIO_BITS
+#else
+#define configPRIO_BITS                                 3
+#endif
+/* Interrupt settings */
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY         0x07
+#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5
+#define configKERNEL_INTERRUPT_PRIORITY                 (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY            (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
+#ifndef __IASMARM__
+    #define configGENERATE_RUN_TIME_STATS               0
+    #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
+    #define portGET_RUN_TIME_COUNTER_VALUE()            0
+    #define configTICK_RATE_HZ                          (TickType_t)10000
+#endif /* __IASMARM__ */
+#if defined(CPU_CORTEX_M3) || defined(CPU_CORTEX_M4) || defined(CPU_CORTEX_M7)
+#define xPortPendSVHandler                              PendSV_Handler
+#define vPortSVCHandler                                 SVC_Handler
+#define xPortSysTickHandler                             SysTick_Handler
+#endif
+#endif /* FREERTOS_CONFIG_H */