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)
 
