MLECO-2948: Minor refactoring for platform modules.

Reducing dependency on cmsis-device sources as these will
be removed under MLECO-2944. Also, starting to refactor
to allow HAL to drop NPU and TA init routines - this will
happen in future CRs.

Added platform driver for native, and subsequent patches
will attempt to get rid of the HAL "profile" specific
sources and allow platform stub implementations at a level
below HAL. This will allow platforms drivers to only
override the range of functions that they actually want to
implement and will fall back on stubs for the rest. In this
CR only "utils" have been removed.

Change-Id: I09b4a28e20847a07a956c818c6f47c74aab89063
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 14ec1aa..bbd7756 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -236,4 +236,4 @@
 
 endforeach()
 
-print_useroptions()
\ No newline at end of file
+print_useroptions()
diff --git a/scripts/cmake/platforms/native/build_configuration.cmake b/scripts/cmake/platforms/native/build_configuration.cmake
index bc91804..63f9491 100644
--- a/scripts/cmake/platforms/native/build_configuration.cmake
+++ b/scripts/cmake/platforms/native/build_configuration.cmake
@@ -22,6 +22,7 @@
                 CACHE FILEPATH "Toolchain file")
     endif()
 
+    set(PLATFORM_DRIVERS_DIR "${HAL_PLATFORM_DIR}/native" PARENT_SCOPE)
     set(TEST_TPIP ${DOWNLOAD_DEP_DIR}/test)
 
     file(MAKE_DIRECTORY ${TEST_TPIP})
diff --git a/source/hal/CMakeLists.txt b/source/hal/CMakeLists.txt
index ea19de5..0d844b2 100644
--- a/source/hal/CMakeLists.txt
+++ b/source/hal/CMakeLists.txt
@@ -43,8 +43,7 @@
 target_include_directories(${HAL_TARGET}
     PUBLIC
     include
-    ${PLATFORM_PROFILE_DIR}/timer/include
-    ${PLATFORM_PROFILE_DIR}/utils/include)
+    ${PLATFORM_PROFILE_DIR}/timer/include)
 
 ## Common sources for all profiles
 target_sources(${HAL_TARGET}
@@ -52,8 +51,7 @@
     hal.c
     ${PLATFORM_PROFILE_DIR}/data_presentation/data_psn.c
     ${PLATFORM_PROFILE_DIR}/data_acquisition/data_acq.c
-    ${PLATFORM_PROFILE_DIR}/timer/platform_timer.c
-    ${PLATFORM_PROFILE_DIR}/utils/system_init.c)
+    ${PLATFORM_PROFILE_DIR}/timer/platform_timer.c)
 
 if (DEFINED VERIFY_TEST_OUTPUT)
     message(STATUS "Test output verification flag is: ${VERIFY_TEST_OUTPUT}")
@@ -61,13 +59,14 @@
         VERIFY_TEST_OUTPUT=${VERIFY_TEST_OUTPUT})
 endif ()
 
+if (NOT DEFINED PLATFORM_DRIVERS_DIR)
+    message(FATAL_ERROR "PLATFORM_DRIVERS_DIR need to be defined for this target")
+endif()
+
+
 ############################ bare-metal profile #############################
 if (PLATFORM_PROFILE STREQUAL bare-metal)
 
-    if (NOT DEFINED PLATFORM_DRIVERS_DIR)
-        message(FATAL_ERROR "PLATFORM_DRIVERS_DIR need to be defined for this target")
-    endif()
-
     ## Additional include directories - public
     target_include_directories(${HAL_TARGET}
         PUBLIC
@@ -96,15 +95,6 @@
     # Add dependencies for platform_driver first, in case they are needed by it.
     add_subdirectory(cmsis_device ${CMAKE_BINARY_DIR}/cmsis_device)
 
-    # Add platform-drivers target
-    add_subdirectory(${PLATFORM_DRIVERS_DIR} ${CMAKE_BINARY_DIR}/platform_driver)
-
-    # Link time library targets:
-    target_link_libraries(${HAL_TARGET}
-        PUBLIC
-        log
-        platform-drivers)
-
     # If Ethos-U is enabled, we need the driver library too
     if (ETHOS_U_NPU_ENABLED)
 
@@ -172,6 +162,7 @@
 
 ############################   native profile   #############################
 elseif (PLATFORM_PROFILE STREQUAL native)
+
     ## Additional include directories - private
     target_include_directories(${HAL_TARGET}
         PRIVATE
@@ -187,13 +178,17 @@
         PUBLIC
         PLATFORM_HAL=PLATFORM_UNKNOWN_LINUX_OS
         ACTIVATION_BUF_SRAM_SZ=0)
-
-    target_link_libraries(${HAL_TARGET}
-        PUBLIC
-        log)
-
 endif()
 
+# Add platform-drivers target
+add_subdirectory(${PLATFORM_DRIVERS_DIR} ${CMAKE_BINARY_DIR}/platform_driver)
+
+# Link time library targets:
+target_link_libraries(${HAL_TARGET}
+    PUBLIC
+    log
+    platform-drivers)
+
 # Display status:
 message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
 message(STATUS "*******************************************************")
diff --git a/source/hal/cmsis_device/include/irqs.h b/source/hal/cmsis_device/include/irqs.h
index 5ddda97..234edd7 100644
--- a/source/hal/cmsis_device/include/irqs.h
+++ b/source/hal/cmsis_device/include/irqs.h
@@ -32,19 +32,6 @@
  **/
 extern void Reset_Handler(void);
 
-/**
- * @brief   Gets the system tick triggered cycle counter for the CPU.
- * @return  64-bit counter value.
- **/
-extern uint64_t Get_SysTick_Cycle_Count(void);
-
-/**
- * @brief   Initialises the system tick registers.
- * @return  Error code return from sys tick configuration function
- *          (0 = no error).
- **/
-extern int Init_SysTick(void);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/hal/cmsis_device/source/irqs.c b/source/hal/cmsis_device/source/irqs.c
index 7d8aa06..2ecd4d5 100644
--- a/source/hal/cmsis_device/source/irqs.c
+++ b/source/hal/cmsis_device/source/irqs.c
@@ -25,8 +25,6 @@
 #include <stdio.h>
 #include <inttypes.h>
 
-static uint64_t cpu_cycle_count = 0;
-
 /**
  * External references
  */
@@ -165,24 +163,9 @@
 /**
  * @brief   System tick interrupt handler.
  **/
-void SysTick_Handler(void)
+__attribute__((weak)) void SysTick_Handler(void)
 {
-    /* Increment the cycle counter based on load value. */
-    cpu_cycle_count += SysTick->LOAD + 1;
-}
-
-/**
- * Gets the current SysTick derived counter value
- */
-uint64_t Get_SysTick_Cycle_Count(void)
-{
-    uint32_t systick_val;
-
-    NVIC_DisableIRQ(SysTick_IRQn);
-    systick_val = SysTick->VAL & SysTick_VAL_CURRENT_Msk;
-    NVIC_EnableIRQ(SysTick_IRQn);
-
-    return cpu_cycle_count + (SysTick->LOAD - systick_val);
+    DEFAULT_IRQ_HANDLER_CALL();
 }
 
 /**
@@ -218,44 +201,12 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 112 -  128 */
 };
 
-/**
- * SysTick initialisation
- */
-int Init_SysTick(void)
-{
-    const uint32_t ticks_10ms = GetSystemCoreClock()/100 + 1;
-    int err = 0;
-
-    /* Reset CPU cycle count value. */
-    cpu_cycle_count = 0;
-
-    /* Changing configuration for sys tick => guard from being
-     * interrupted. */
-    NVIC_DisableIRQ(SysTick_IRQn);
-
-    /* SysTick init - this will enable interrupt too. */
-    err = SysTick_Config(ticks_10ms);
-
-    /* Enable interrupt again. */
-    NVIC_EnableIRQ(SysTick_IRQn);
-
-    /* Wait for SysTick to kick off */
-    while (!err && !SysTick->VAL) {
-        __NOP();
-    }
-
-    return err;
-}
-
 /* Reset handler - starting point of our application. */
 __attribute__((used)) void Reset_Handler(void)
 {
     /* Initialise system. */
     SystemInit();
 
-    /* Configure the system tick. */
-    Init_SysTick();
-
     /* cmsis supplied entry point. */
     __PROGRAM_START();
 }
diff --git a/source/hal/hal.c b/source/hal/hal.c
index ff470d5..d78ac95 100644
--- a/source/hal/hal.c
+++ b/source/hal/hal.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,14 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "hal.h"            /* API */
+#include "hal.h"                /* API */
 
-#include "hal_config.h"     /* HAL configuration */
-#include "system_init.h"
-#include "log_macros.h"
+#include "hal_config.h"         /* HAL configuration */
+#include "platform_drivers.h"   /* Platform drivers */
+#include "log_macros.h"         /* Logging macros */
 
 #include <stdio.h>
 #include <assert.h>
+#include <string.h>
 
 #if defined(ARM_NPU)
 
@@ -71,9 +72,9 @@
     platform->data_acq  = data_acq;
     platform->data_psn  = data_psn;
     platform->timer     = timer;
-    platform->platform_init     = system_init;
-    platform->platform_release  = system_release;
-    system_name(platform->plat_name, sizeof(platform->plat_name));
+    platform->platform_init     = platform_init;
+    platform->platform_release  = platform_release;
+    platform_name(platform->plat_name, sizeof(platform->plat_name));
 
     return 0;
 }
diff --git a/source/hal/include/hal.h b/source/hal/include/hal.h
index a192ea7..a535dc9 100644
--- a/source/hal/include/hal.h
+++ b/source/hal/include/hal.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,7 +23,6 @@
  * will also need to be aware of the API exposed by data acquisition and
  * data presentation modules.
  */
-#include "hal_config.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/source/hal/platform/mps3/CMakeLists.txt b/source/hal/platform/mps3/CMakeLists.txt
index 46db2aa..cd95d6c 100644
--- a/source/hal/platform/mps3/CMakeLists.txt
+++ b/source/hal/platform/mps3/CMakeLists.txt
@@ -70,27 +70,38 @@
     include
     ${SOURCE_GEN_DIR})
 
+## Include directories - private
+target_include_directories(${PLATFORM_DRIVERS_TARGET}
+    PRIVATE
+    source/include)
+
 ## Platform sources
 target_sources(${PLATFORM_DRIVERS_TARGET}
     PRIVATE
     source/device_mps3.c
-    source/timer_mps3.c)
+    source/timer_mps3.c
+    source/platform_drivers.c)
+
+## Directory for additional compnents required by MPS3:
+if (NOT DEFINED COMPONENTS_DIR)
+    set(COMPONENTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../components)
+endif()
 
 ## Platform component: uart
 target_sources(${PLATFORM_DRIVERS_TARGET}
         PRIVATE
-        ${CMAKE_CURRENT_SOURCE_DIR}/../../components/uart_cmsdk/uart_cmsdk.c)
+        ${COMPONENTS_DIR}/uart_cmsdk/uart_cmsdk.c)
 target_include_directories(${PLATFORM_DRIVERS_TARGET}
         PUBLIC
-        ${CMAKE_CURRENT_SOURCE_DIR}/../../components/uart_cmsdk/include)
+        ${COMPONENTS_DIR}/uart_cmsdk/include)
 
 ## Platform component: LCD
 target_sources(${PLATFORM_DRIVERS_TARGET}
         PRIVATE
-        ${CMAKE_CURRENT_SOURCE_DIR}/../../components/lcd_mps3/glcd_mps3.c)
+        ${COMPONENTS_DIR}/lcd_mps3/glcd_mps3.c)
 target_include_directories(${PLATFORM_DRIVERS_TARGET}
         PUBLIC
-        ${CMAKE_CURRENT_SOURCE_DIR}/../../components/lcd_mps3/include)
+        ${COMPONENTS_DIR}/lcd_mps3/include)
 
 ## This target provides the following definitions for MPS3 specific behaviour
 ## TODO: We should aim to remove this now with platform refactoring..
@@ -100,13 +111,11 @@
     ACTIVATION_BUF_SRAM_SZ=${ACTIVATION_BUF_SRAM_SZ}
     $<$<BOOL:TA_CONFIG_FILE>:TIMING_ADAPTER_AVAILABLE>)
 
-# 5. Add dependencies:
-
+# Add dependencies:
 target_link_libraries(${PLATFORM_DRIVERS_TARGET} PUBLIC
-        cmsis_device
-        log)
+    log cmsis_device)
 
-# 6 Display status:
+# Display status:
 message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
 message(STATUS "*******************************************************")
 message(STATUS "Library                                : " ${PLATFORM_DRIVERS_TARGET})
diff --git a/source/hal/platform/mps3/include/platform_drivers.h b/source/hal/platform/mps3/include/platform_drivers.h
index c5ed561..156b136 100644
--- a/source/hal/platform/mps3/include/platform_drivers.h
+++ b/source/hal/platform/mps3/include/platform_drivers.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,15 +15,36 @@
  * limitations under the License.
  */
 
-#ifndef PLATFORM_DRIVER_H
-#define PLATFORM_DRIVER_H
+#ifndef PLATFORM_DRIVERS_H
+#define PLATFORM_DRIVERS_H
 
-#include "log_macros.h"   /* Logging related helpers. */
-#include "uart_stdout.h"    /* stdout over UART. */
-#include "smm_mps3.h"       /* Mem map for MPS3 peripherals. */
-#include "glcd_mps3.h"      /* LCD functions. */
+#include "log_macros.h"     /* Logging related helpers. */
+
+/* Platform components */
 #include "timer_mps3.h"     /* Timer functions. */
-#include "device_mps3.h"    /* FPGA level definitions and functions. */
-#include "peripheral_irqs.h"/* IRQ numbers for this platform */
+#include "cmsis.h"          /* For CPU related defintiions */
+#include "glcd_mps3.h"      /* LCD functions. */
 
-#endif /* PLATFORM_DRIVER_H */
+/** Platform definitions. TODO: These should be removed. */
+#include "peripheral_memmap.h"  /* Peripheral memory map definitions. */
+#include "peripheral_irqs.h"    /* IRQ numbers for this platform. */
+
+/**
+ * @brief   Initialises the platform components.
+ * @return  0 if successful, error code otherwise.
+ */
+int platform_init(void);
+
+/**
+ * @brief   Teardown for platform components.
+ */
+void platform_release(void);
+
+/**
+ * @brief   Sets the platform name.
+ * @param[out] name     Name of the platform to be set
+ * @param[in]  size     Size of the input buffer
+ */
+void platform_name(char* name, size_t size);
+
+#endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/platform/mps3/include/timer_mps3.h b/source/hal/platform/mps3/include/timer_mps3.h
index 70d059c..b5db722 100644
--- a/source/hal/platform/mps3/include/timer_mps3.h
+++ b/source/hal/platform/mps3/include/timer_mps3.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,6 @@
 #define TIMER_MPS3_H
 
 #include <stdint.h>
-#include <time.h>
 
 /* Container for timestamp up-counters. */
 typedef struct _mps3_time_counter {
@@ -47,7 +46,7 @@
  * @brief       Gets the duration elapsed between two counters in milliseconds.
  * @param[in]   start   Pointer to base_time_counter value at start time.
  * @param[in]   end     Pointer to base_time_counter value at end.
- * @returns     Difference in milliseconds between the two give counters 
+ * @returns     Difference in milliseconds between the two give counters
  *              expressed as an unsigned integer.
  **/
 uint32_t get_duration_milliseconds(base_time_counter *start,
@@ -57,7 +56,7 @@
  * @brief       Gets the duration elapsed between two counters in microseconds.
  * @param[in]   start   Pointer to base_time_counter value at start time.
  * @param[in]   end     Pointer to base_time_counter value at end.
- * @returns     Difference in microseconds between the two give counters 
+ * @returns     Difference in microseconds between the two give counters
  *              expressed as an unsigned integer.
  **/
 uint32_t get_duration_microseconds(base_time_counter *start,
@@ -83,4 +82,9 @@
  **/
 void stop_cycle_counter(void);
 
+/**
+ * @brief   System tick interrupt handler.
+ **/
+void SysTick_Handler(void);
+
 #endif /* TIMER_MPS3_H */
diff --git a/source/hal/platform/mps3/source/device_mps3.c b/source/hal/platform/mps3/source/device_mps3.c
index fa57c2e..de715fb 100644
--- a/source/hal/platform/mps3/source/device_mps3.c
+++ b/source/hal/platform/mps3/source/device_mps3.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,11 +21,9 @@
 
 #include <inttypes.h>
 
-extern uint32_t GetSystemCoreClock(void);
-
 uint32_t GetMPS3CoreClock(void)
 {
-    const uint32_t default_clock = GetSystemCoreClock();
+    const uint32_t default_clock = 32000000 /* 32 MHz clock */;
     static int warned_once = 0;
     if (0 != MPS3_SCC->CFG_ACLK) {
         if (default_clock != MPS3_SCC->CFG_ACLK) {
diff --git a/source/hal/platform/mps3/include/device_mps3.h b/source/hal/platform/mps3/source/include/device_mps3.h
similarity index 98%
rename from source/hal/platform/mps3/include/device_mps3.h
rename to source/hal/platform/mps3/source/include/device_mps3.h
index e0dea1b..445965d 100644
--- a/source/hal/platform/mps3/include/device_mps3.h
+++ b/source/hal/platform/mps3/source/include/device_mps3.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,7 +21,6 @@
 extern "C" {
 #endif
 
-#include "cmsis.h"      /* CMSIS device header. */
 #include "smm_mps3.h"   /* Memory map for MPS3. */
 
 #include <stdio.h>
diff --git a/source/hal/platform/mps3/include/smm_mps3.h b/source/hal/platform/mps3/source/include/smm_mps3.h
similarity index 99%
rename from source/hal/platform/mps3/include/smm_mps3.h
rename to source/hal/platform/mps3/source/include/smm_mps3.h
index 1c0e0f2..5a2bcc5 100644
--- a/source/hal/platform/mps3/include/smm_mps3.h
+++ b/source/hal/platform/mps3/source/include/smm_mps3.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,9 +17,10 @@
 #ifndef SMM_MPS3_H
 #define SMM_MPS3_H
 
-#include "cmsis.h"                  /* Device specific header file. */
+#include "cmsis.h"                  /* For CPU related defintiions */
 #include "peripheral_memmap.h"      /* Peripheral memory map definitions. */
 
+
 #if defined ( __CC_ARM   )
 #pragma anon_unions
 #endif
diff --git a/source/hal/profiles/bare-metal/utils/system_init.c b/source/hal/platform/mps3/source/platform_drivers.c
similarity index 76%
rename from source/hal/profiles/bare-metal/utils/system_init.c
rename to source/hal/platform/mps3/source/platform_drivers.c
index 23af14f..da2b39c 100644
--- a/source/hal/profiles/bare-metal/utils/system_init.c
+++ b/source/hal/platform/mps3/source/platform_drivers.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,20 +14,57 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "system_init.h"
 
-#include <string.h>
-#include <inttypes.h>
+#include "platform_drivers.h"
 
-#if defined(MPS3_PLATFORM)
+#include "uart_stdout.h"    /* stdout over UART. */
+#include "log_macros.h"     /* Logging functions */
+#include "device_mps3.h"    /* FPGA level definitions and functions. */
+
+#include <string.h>         /* For strncpy */
+
+/**
+ * @brief   Checks if the platform is valid by checking
+ *          the CPU ID for the FPGA implementation against
+ *          the register from the CPU core.
+ * @return  0 if successful, 1 otherwise
+ */
+static int verify_platform(void);
+
+int platform_init(void)
+{
+    int err = 0;
+
+    SystemCoreClockUpdate();    /* From start up code */
+
+    /* UART init - will enable valid use of printf (stdout
+     * re-directed at this UART (UART0) */
+    UartStdOutInit();
+
+    if (0 != (err = verify_platform())) {
+        return err;
+    }
+
+    /** TODO: Add ARM NPU and TA init here */
+    return 0;
+}
+
+void platform_release(void)
+{
+    __disable_irq();
+}
+
+void platform_name(char* name, size_t size)
+{
+    strncpy(name, DESIGN_NAME, size);
+}
+
 #define CREATE_MASK(msb, lsb)           (int)(((1U << ((msb) - (lsb) + 1)) - 1) << (lsb))
 #define MASK_BITS(arg, msb, lsb)        (int)((arg) & CREATE_MASK(msb, lsb))
 #define EXTRACT_BITS(arg, msb, lsb)     (int)(MASK_BITS(arg, msb, lsb) >> (lsb))
-#endif /* MPS3_PLATFORM */
 
-int system_init(void)
+static int verify_platform(void)
 {
-#if defined(MPS3_PLATFORM)
     uint32_t id = 0;
     uint32_t fpgaid = 0;
     uint32_t apnote = 0;
@@ -38,14 +75,9 @@
 
     /* Initialise the LEDs as the switches are */
     MPS3_FPGAIO->LED = MPS3_FPGAIO->SWITCHES & 0xFF;
-#endif
 
-    /* UART init - will enable valid use of printf (stdout
-     * re-directed at this UART (UART0) */
-    UartStdOutInit();
-    info("Processor internal clock: %" PRIu32 "Hz\n", GetSystemCoreClock());
+    info("Processor internal clock: %" PRIu32 "Hz\n", GetMPS3CoreClock());
 
-#if defined(MPS3_PLATFORM)
     /* Get revision information from various registers */
     rev = MPS3_SCC->CFG_REG4;
     fpgaid = MPS3_SCC->SCC_ID;
@@ -92,23 +124,8 @@
             EXTRACT_BITS(id, 7, 4), EXTRACT_BITS(id, 23, 20),
             EXTRACT_BITS(id, 3, 0));
     }
-#else /* MPS3_PLATFORM */
-
-    info("%s: complete\n", __FUNCTION__);
-    return 0;
-#endif /* MPS3_PLATFORM */
 
     /* If the CPU is anything other than M33 or M55, we return 1 */
     printf_err("CPU mismatch!\n");
     return 1;
 }
-
-void system_release(void)
-{
-    __disable_irq();
-}
-
-void system_name(char* name, size_t size)
-{
-    strncpy(name, DESIGN_NAME, size);
-}
\ No newline at end of file
diff --git a/source/hal/platform/mps3/source/timer_mps3.c b/source/hal/platform/mps3/source/timer_mps3.c
index 9b8914c..16ff4cd 100644
--- a/source/hal/platform/mps3/source/timer_mps3.c
+++ b/source/hal/platform/mps3/source/timer_mps3.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +19,18 @@
 #include "log_macros.h"
 #include "device_mps3.h"
 
-#include <inttypes.h>
+static uint64_t cpu_cycle_count = 0;    /* 64-bit cpu cycle counter */
+
+/**
+ * @brief   Gets the system tick triggered cycle counter for the CPU.
+ * @return  64-bit counter value.
+ **/
+static uint64_t Get_SysTick_Cycle_Count(void);
+
+/**
+ * SysTick initialisation
+ */
+static int Init_SysTick(void);
 
 void timer_reset(void)
 {
@@ -111,3 +122,52 @@
 {
     /* Nothing to do for FPGA */
 }
+
+void SysTick_Handler(void)
+{
+    /* Increment the cycle counter based on load value. */
+    cpu_cycle_count += SysTick->LOAD + 1;
+}
+
+/**
+ * Gets the current SysTick derived counter value
+ */
+static uint64_t Get_SysTick_Cycle_Count(void)
+{
+    uint32_t systick_val;
+
+    NVIC_DisableIRQ(SysTick_IRQn);
+    systick_val = SysTick->VAL & SysTick_VAL_CURRENT_Msk;
+    NVIC_EnableIRQ(SysTick_IRQn);
+
+    return cpu_cycle_count + (SysTick->LOAD - systick_val);
+}
+
+/**
+ * SysTick initialisation
+ */
+static int Init_SysTick(void)
+{
+    const uint32_t ticks_10ms = GetMPS3CoreClock()/100 + 1;
+    int err = 0;
+
+    /* Reset CPU cycle count value. */
+    cpu_cycle_count = 0;
+
+    /* Changing configuration for sys tick => guard from being
+     * interrupted. */
+    NVIC_DisableIRQ(SysTick_IRQn);
+
+    /* SysTick init - this will enable interrupt too. */
+    err = SysTick_Config(ticks_10ms);
+
+    /* Enable interrupt again. */
+    NVIC_EnableIRQ(SysTick_IRQn);
+
+    /* Wait for SysTick to kick off */
+    while (!err && !SysTick->VAL) {
+        __NOP();
+    }
+
+    return err;
+}
diff --git a/source/hal/platform/native/CMakeLists.txt b/source/hal/platform/native/CMakeLists.txt
new file mode 100644
index 0000000..0435cf1
--- /dev/null
+++ b/source/hal/platform/native/CMakeLists.txt
@@ -0,0 +1,56 @@
+#----------------------------------------------------------------------------
+#  Copyright (c) 2022 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
+#
+#      http://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.
+#----------------------------------------------------------------------------
+
+#########################################################
+#    Native target platform support library             #
+#########################################################
+
+cmake_minimum_required(VERSION 3.15.6)
+
+set(PLATFORM_DRIVERS_TARGET platform-drivers)
+
+project(${PLATFORM_DRIVERS_TARGET}
+    DESCRIPTION     "Platform drivers library for native target"
+    LANGUAGES       C CXX)
+
+# We should not be cross-compiling
+if (${CMAKE_CROSSCOMPILING})
+    message(FATAL_ERROR "Native drivers not available when cross-compiling.")
+endif()
+
+
+# Create static library
+add_library(${PLATFORM_DRIVERS_TARGET} STATIC)
+
+## Include directories - public
+target_include_directories(${PLATFORM_DRIVERS_TARGET}
+    PUBLIC
+    include)
+
+## Platform sources
+target_sources(${PLATFORM_DRIVERS_TARGET}
+    PRIVATE
+    source/platform_drivers.c)
+
+# Add dependencies:
+target_link_libraries(${PLATFORM_DRIVERS_TARGET} PUBLIC log)
+
+# Display status:
+message(STATUS "*******************************************************")
+message(STATUS "Library                                : " ${PLATFORM_DRIVERS_TARGET})
+message(STATUS "CMAKE_SYSTEM_PROCESSOR                 : " ${CMAKE_SYSTEM_PROCESSOR})
+message(STATUS "*******************************************************")
diff --git a/source/hal/platform/native/include/platform_drivers.h b/source/hal/platform/native/include/platform_drivers.h
new file mode 100644
index 0000000..ca6b6e0
--- /dev/null
+++ b/source/hal/platform/native/include/platform_drivers.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2022 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
+ *
+ *     http://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.
+ */
+
+#ifndef PLATFORM_DRIVERS_H
+#define PLATFORM_DRIVERS_H
+
+#include "log_macros.h"     /* Logging related helpers. */
+
+/**
+ * @brief   Initialises the platform components.
+ * @return  0 if successful, error code otherwise.
+ */
+int platform_init(void);
+
+/**
+ * @brief   Teardown for platform components.
+ */
+void platform_release(void);
+
+/**
+ * @brief   Sets the platform name.
+ * @param[out] name     Name of the platform to be set
+ * @param[in]  size     Size of the input buffer
+ */
+void platform_name(char* name, size_t size);
+
+#endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/profiles/native/utils/system_init.c b/source/hal/platform/native/source/platform_drivers.c
similarity index 78%
rename from source/hal/profiles/native/utils/system_init.c
rename to source/hal/platform/native/source/platform_drivers.c
index 8e0b768..10db99a 100644
--- a/source/hal/profiles/native/utils/system_init.c
+++ b/source/hal/platform/native/source/platform_drivers.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,19 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "system_init.h"
+
+#include "platform_drivers.h"
 
 #include <string.h>
 
-int system_init(void)
+int platform_init(void)
 {
     return 0;
 }
 
-void system_release(void)
+void platform_release(void)
 {}
 
-void system_name(char* name, size_t size)
+void platform_name(char* name, size_t size)
 {
     strncpy(name, "native", size);
 }
\ No newline at end of file
diff --git a/source/hal/platform/simple/CMakeLists.txt b/source/hal/platform/simple/CMakeLists.txt
index cd3a2bc..44c4089 100644
--- a/source/hal/platform/simple/CMakeLists.txt
+++ b/source/hal/platform/simple/CMakeLists.txt
@@ -72,7 +72,8 @@
 target_sources(${PLATFORM_DRIVERS_TARGET}
     PRIVATE
     source/stubs_glcd.c
-    source/timer_simple_platform.c)
+    source/timer_simple_platform.c
+    source/platform_drivers.c)
 
 ## Platform component: uart
 target_sources(${PLATFORM_DRIVERS_TARGET}
diff --git a/source/hal/platform/simple/include/platform_drivers.h b/source/hal/platform/simple/include/platform_drivers.h
index 0fb092e..c9928c0 100644
--- a/source/hal/platform/simple/include/platform_drivers.h
+++ b/source/hal/platform/simple/include/platform_drivers.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,18 +15,36 @@
  * limitations under the License.
  */
 
-#ifndef PLATFORM_DRIVER_H
-#define PLATFORM_DRIVER_H
+#ifndef PLATFORM_DRIVERS_H
+#define PLATFORM_DRIVERS_H
 
 #include "log_macros.h"   /* Logging related helpers. */
 
 /* Platform components */
-#include "uart_stdout.h"    /* stdout over UART. */
-#include "stubs/glcd.h"     /* LCD stubs to support use cases that use LCD */
+#include "stubs/glcd.h"             /* LCD stubs to support use cases that use LCD */
 #include "timer_simple_platform.h"  /* timer implementation */
+#include "cmsis.h"                  /* For CPU related defintiions */
 
-#include "cmsis.h"                  /* CPU device specific header file    */
-#include "peripheral_memmap.h"      /* peripheral memory map definitions */
-#include "peripheral_irqs.h"        /* IRQ numbers for the platform */
+/** Platform definitions. TODO: These should be removed. */
+#include "peripheral_memmap.h"  /* Peripheral memory map definitions. */
+#include "peripheral_irqs.h"    /* IRQ numbers for this platform. */
 
-#endif /* PLATFORM_DRIVER_H */
+/**
+ * @brief   Initialises the platform components.
+ * @return  0 if successful, error code otherwise.
+ */
+int platform_init(void);
+
+/**
+ * @brief   Teardown for platform components.
+ */
+void platform_release(void);
+
+/**
+ * @brief   Sets the platform name.
+ * @param[out] name     Name of the platform to be set
+ * @param[in]  size     Size of the input buffer
+ */
+void platform_name(char* name, size_t size);
+
+#endif /* PLATFORM_DRIVERS_H */
diff --git a/source/hal/platform/simple/include/stubs/glcd.h b/source/hal/platform/simple/include/stubs/glcd.h
index 5915f7d..b31938f 100644
--- a/source/hal/platform/simple/include/stubs/glcd.h
+++ b/source/hal/platform/simple/include/stubs/glcd.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,6 +17,8 @@
 #ifndef STUBS_SIMPLE_PLATFORM_H
 #define STUBS_SIMPLE_PLATFORM_H
 
+#include <stdint.h>
+
 /****************************************************************************/
 /*              Definitions and stub functions for modules currently        */
 /*              unavailable on this target platform                         */
@@ -58,10 +60,10 @@
  * @param[in] downsample_factor   factor by which the image
  *                                is downsampled by.
  */
-void GLCD_Image(void *data, const unsigned int width,
-                const unsigned int height, const unsigned int channels,
-                const unsigned int pos_x, const unsigned int pos_y,
-                const unsigned int downsample_factor);
+void GLCD_Image(const void *data, const uint32_t width,
+                const uint32_t height, const uint32_t channels,
+                const uint32_t pos_x, const uint32_t pos_y,
+                const uint32_t downsample_factor);
 
 /**
  * @brief      Clear display
diff --git a/source/hal/platform/simple/include/timer_simple_platform.h b/source/hal/platform/simple/include/timer_simple_platform.h
index 03d8245..4df22da 100644
--- a/source/hal/platform/simple/include/timer_simple_platform.h
+++ b/source/hal/platform/simple/include/timer_simple_platform.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,4 +51,9 @@
  */
 void stop_cycle_counter(void);
 
+/**
+ * @brief   System tick interrupt handler.
+ **/
+void SysTick_Handler(void);
+
 #endif /* TIMER_SIMPLE_PLATFORM_H */
diff --git a/source/hal/platform/simple/source/platform_drivers.c b/source/hal/platform/simple/source/platform_drivers.c
new file mode 100644
index 0000000..c92a964
--- /dev/null
+++ b/source/hal/platform/simple/source/platform_drivers.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2022 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
+ *
+ *     http://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.
+ */
+
+#include "platform_drivers.h"
+
+#include "uart_stdout.h"
+#include <string.h>
+
+int platform_init(void)
+{
+    SystemCoreClockUpdate();    /* From start up code */
+
+    /* UART init - will enable valid use of printf (stdout
+     * re-directed at this UART (UART0) */
+    UartStdOutInit();
+
+    info("%s: complete\n", __FUNCTION__);
+
+    /** TODO: Add ARM NPU and TA init here */
+    return 0;
+}
+
+void platform_release(void)
+{
+    __disable_irq();
+}
+
+void platform_name(char* name, size_t size)
+{
+    strncpy(name, DESIGN_NAME, size);
+}
diff --git a/source/hal/platform/simple/source/stubs_glcd.c b/source/hal/platform/simple/source/stubs_glcd.c
index 6b60dcd..d843cf4 100644
--- a/source/hal/platform/simple/source/stubs_glcd.c
+++ b/source/hal/platform/simple/source/stubs_glcd.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31,9 +31,10 @@
     UNUSED(bitmap);
 }
 
-void GLCD_Image(void *data, const unsigned int width, const unsigned int height,
-    const unsigned int channels, const unsigned int pos_x,
-    const unsigned int pos_y, const unsigned int downsample_factor)
+void GLCD_Image(const void *data, const uint32_t width,
+               const uint32_t height, const uint32_t channels,
+               const uint32_t pos_x, const uint32_t pos_y,
+               const uint32_t downsample_factor)
 {
     UNUSED(data);
     UNUSED(pos_x);
diff --git a/source/hal/platform/simple/source/timer_simple_platform.c b/source/hal/platform/simple/source/timer_simple_platform.c
index 4bcd07b..3d28261 100644
--- a/source/hal/platform/simple/source/timer_simple_platform.c
+++ b/source/hal/platform/simple/source/timer_simple_platform.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,11 +16,26 @@
  */
 #include "timer_simple_platform.h"
 
-#include "irqs.h"
-#include "log_macros.h"
+#include "log_macros.h"     /* Logging macros */
+#include "cmsis.h"          /* For CPU related defintiions */
 
 #include <inttypes.h>
 
+static uint64_t cpu_cycle_count = 0;    /* 64-bit cpu cycle counter */
+extern uint32_t SystemCoreClock;        /* Expected to come from the cmsis-device lib */
+
+/**
+ * @brief   Gets the system tick triggered cycle counter for the CPU.
+ * @return  64-bit counter value.
+ **/
+static uint64_t Get_SysTick_Cycle_Count(void);
+
+/**
+ * SysTick initialisation
+ */
+static int Init_SysTick(void);
+
+
 base_time_counter get_time_counter(void)
 {
     base_time_counter t = {
@@ -56,3 +71,53 @@
 {
     /* Add any custom requirement for this platform here */
 }
+
+
+void SysTick_Handler(void)
+{
+    /* Increment the cycle counter based on load value. */
+    cpu_cycle_count += SysTick->LOAD + 1;
+}
+
+/**
+ * Gets the current SysTick derived counter value
+ */
+static uint64_t Get_SysTick_Cycle_Count(void)
+{
+    uint32_t systick_val;
+
+    NVIC_DisableIRQ(SysTick_IRQn);
+    systick_val = SysTick->VAL & SysTick_VAL_CURRENT_Msk;
+    NVIC_EnableIRQ(SysTick_IRQn);
+
+    return cpu_cycle_count + (SysTick->LOAD - systick_val);
+}
+
+/**
+ * SysTick initialisation
+ */
+static int Init_SysTick(void)
+{
+    const uint32_t ticks_10ms = SystemCoreClock/100 + 1;
+    int err = 0;
+
+    /* Reset CPU cycle count value. */
+    cpu_cycle_count = 0;
+
+    /* Changing configuration for sys tick => guard from being
+     * interrupted. */
+    NVIC_DisableIRQ(SysTick_IRQn);
+
+    /* SysTick init - this will enable interrupt too. */
+    err = SysTick_Config(ticks_10ms);
+
+    /* Enable interrupt again. */
+    NVIC_EnableIRQ(SysTick_IRQn);
+
+    /* Wait for SysTick to kick off */
+    while (!err && !SysTick->VAL) {
+        __NOP();
+    }
+
+    return err;
+}
\ No newline at end of file
diff --git a/source/hal/profiles/bare-metal/data_acquisition/data_acq.c b/source/hal/profiles/bare-metal/data_acquisition/data_acq.c
index 1e40b02..7113a24 100644
--- a/source/hal/profiles/bare-metal/data_acquisition/data_acq.c
+++ b/source/hal/profiles/bare-metal/data_acquisition/data_acq.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,6 +17,8 @@
 #include "data_acq.h"
 
 #include "bsp.h"
+#include "log_macros.h"
+#include "uart_stdout.h"
 
 #include <assert.h>
 #include <stdlib.h>
@@ -31,7 +33,6 @@
 static int get_uart_user_input(char* user_input, int size)
 {
     if (true != GetLine(user_input, size - 1)) {
-        printf_err("invalid input\n");
         return 1;
     }
     return 0;
diff --git a/source/hal/profiles/bare-metal/data_presentation/lcd/lcd_img.c b/source/hal/profiles/bare-metal/data_presentation/lcd/lcd_img.c
index 7064396..bb950c3 100644
--- a/source/hal/profiles/bare-metal/data_presentation/lcd/lcd_img.c
+++ b/source/hal/profiles/bare-metal/data_presentation/lcd/lcd_img.c
@@ -17,6 +17,7 @@
 #include "lcd_img.h"
 
 #include "bsp.h"
+#include "log_macros.h"
 
 #include <string.h>
 #include <assert.h>
diff --git a/source/hal/profiles/bare-metal/timer/platform_timer.c b/source/hal/profiles/bare-metal/timer/platform_timer.c
index c8e7252..11ccf8b 100644
--- a/source/hal/profiles/bare-metal/timer/platform_timer.c
+++ b/source/hal/profiles/bare-metal/timer/platform_timer.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Arm Limited. All rights reserved.
+ * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
  * SPDX-License-Identifier: Apache-2.0
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,6 +16,7 @@
  */
 #include "bsp.h"
 #include "timer.h"
+#include "log_macros.h"
 
 #include <assert.h>
 #include <string.h>
diff --git a/source/hal/profiles/bare-metal/utils/include/system_init.h b/source/hal/profiles/bare-metal/utils/include/system_init.h
deleted file mode 100644
index 84e0305..0000000
--- a/source/hal/profiles/bare-metal/utils/include/system_init.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 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
- *
- *     http://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.
- */
-#ifndef BAREMETAL_SYSTEM_INIT_H
-#define BAREMETAL_SYSTEM_INIT_H
-
-#include "bsp.h"
-
-/**
- * @brief   Initialises the platform (MPS3 FPGA board or Fixed Virtual Platform)
- *          Updates the system core clock and initialises the UART. It also
- *          verifies that the Cortex-M CPU variant being used matches the expected
- *          value if running on MPS3.
- * @return  0 if successful, error code otherwise.
-*/
-int system_init(void);
-
-/**
- * @brief  Releases the platform (MPS3 FPGA board or Fixed Virtual Platform).
- **/
-void system_release(void);
-
-/**
- * @brief  Return the name the platform (MPS3 FPGA board or Fixed Virtual Platform).
- * @param[out]   name Platform name string.
- * @param[in]    size Name string length.
- **/
-void system_name(char* name, size_t size);
-
-#endif /* BAREMETAL_SYSTEM_INIT_H */
diff --git a/source/hal/profiles/native/utils/include/system_init.h b/source/hal/profiles/native/utils/include/system_init.h
deleted file mode 100644
index 5d3fcd0..0000000
--- a/source/hal/profiles/native/utils/include/system_init.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 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
- *
- *     http://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.
- */
-#ifndef NATIVE_SYSTEM_INIT_H
-#define NATIVE_SYSTEM_INIT_H
-
-#include <stddef.h>
-/**
- * @brief  Platform initialisation for native platform.
- **/
-int system_init(void);
-
-/**
- * @brief  Platform release for native platform.
- **/
-void system_release(void);
-
-/**
- * @brief       Returns the name of the platform.
- * @param[out]  name Platform name string.
- * @param[in]   size Name string length.
- */
-void system_name(char* name, size_t size);
-
-#endif /* NATIVE_SYSTEM_INIT_H */
diff --git a/source/profiler/CMakeLists.txt b/source/profiler/CMakeLists.txt
index e59dc01..b02b276 100644
--- a/source/profiler/CMakeLists.txt
+++ b/source/profiler/CMakeLists.txt
@@ -31,6 +31,11 @@
 
 target_include_directories(profiler PUBLIC include)
 
+# Set the CPU profiling defintiion
+if (CPU_PROFILE_ENABLED)
+    target_compile_definitions(profiler PRIVATE CPU_PROFILE_ENABLED)
+endif()
+
 # Profiling API depends on the logging interface and the HAL library.
 target_link_libraries(profiler PRIVATE log hal)