diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake
new file mode 100644
index 0000000..e3b604a
--- /dev/null
+++ b/cmake/helpers.cmake
@@ -0,0 +1,49 @@
+#
+# 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.
+#
+
+function(ethosu_link_options target scope)
+    cmake_parse_arguments(ARG "" "LINK_FILE" "" ${ARGN})
+
+    if (CMAKE_CXX_COMPILER_ID STREQUAL "ARMClang")
+        set(LINK_FILE_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_LINK_FILE}.scatter)
+        set(LINK_FILE_OPTION "--scatter")
+
+    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+        set(LINK_FILE ${ARG_LINK_FILE}.ld)
+        set(LINK_FILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/${LINK_FILE})
+        set(LINK_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/${LINK_FILE})
+        set(LINK_FILE_OPTION "-T")
+
+        set(prop "$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>")
+        add_custom_command(
+            OUTPUT ${LINK_FILE_OUT}
+            DEPENDS ${LINK_FILE_IN}
+            BYPRODUCTS ${LINK_FILE_OUT}
+            COMMAND ${CMAKE_C_COMPILER} -E -x c -P -o ${LINK_FILE_OUT} ${LINK_FILE_IN}
+            COMMAND_EXPAND_LISTS "$<$<BOOL:${prop}>:-D$<JOIN:${prop},;-D>>"
+            COMMENT "Preprocessing and generating linker script"
+            VERBATIM)
+        add_custom_target(${target}-linker-script
+            DEPENDS ${LINK_FILE_OUT}
+            VERBATIM)
+        add_dependencies(${target} ${target}-linker-script)
+    endif()
+
+    target_link_options(${target} ${scope} ${LINK_FILE_OPTION} ${LINK_FILE_OUT})
+    set_target_properties(${target} PROPERTIES LINK_DEPENDS ${LINK_FILE_OUT})
+endfunction()
diff --git a/cmake/toolchain/arm-none-eabi-gcc.cmake b/cmake/toolchain/arm-none-eabi-gcc.cmake
new file mode 100644
index 0000000..ea95eef
--- /dev/null
+++ b/cmake/toolchain/arm-none-eabi-gcc.cmake
@@ -0,0 +1,91 @@
+#
+# 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.
+#
+
+if (NOT TARGET_CPU)
+    set(TARGET_CPU "cortex-m4")
+endif()
+
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_C_COMPILER "arm-none-eabi-gcc")
+set(CMAKE_CXX_COMPILER "arm-none-eabi-g++")
+
+# Convert TARGET_CPU=Cortex-M33+nofp+nodsp into
+#   - CMAKE_SYSTEM_PROCESSOR=cortex-m33
+#   - TARGET_CPU_FEATURES=no-fp;no-dsp
+string(REPLACE "+" ";" TARGET_CPU_FEATURES ${TARGET_CPU})
+list(POP_FRONT TARGET_CPU_FEATURES CMAKE_SYSTEM_PROCESSOR)
+string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR)
+
+set(CMAKE_EXECUTABLE_SUFFIX ".elf")
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+
+# Select C/C++ version
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_CXX_STANDARD 14)
+
+# Compile options
+add_compile_options(
+    -mcpu=${TARGET_CPU}
+    -mthumb
+    "$<$<COMPILE_LANGUAGE:CXX>:-fno-unwind-tables;-fno-rtti;-fno-exceptions>")
+
+# Link options
+add_link_options(
+    -mcpu=${TARGET_CPU}
+    -mthumb
+    --specs=nosys.specs)
+
+# Set floating point unit
+if("${TARGET_CPU}" MATCHES "\\+fp")
+    set(FLOAT hard)
+elseif("${TARGET_CPU}" MATCHES "\\+nofp")
+    set(FLOAT soft)
+elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortex-m33" OR
+       "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortex-m55")
+    set(FLOAT hard)
+else()
+    set(FLOAT soft)
+endif()
+
+if (FLOAT)
+    add_compile_options(-mfloat-abi=${FLOAT})
+    add_link_options(-mfloat-abi=${FLOAT})
+endif()
+
+# Compilation warnings
+add_compile_options(
+    -Wall
+    -Wextra
+    -Wsign-compare
+    -Wunused
+    -Wswitch-default
+#    -Wformat
+    -Wdouble-promotion
+    -Wredundant-decls
+    -Wshadow
+#    -Wcast-align
+    -Wnull-dereference
+    -Wno-format-extra-args
+    -Wno-unused-function
+    -Wno-unused-parameter
+    -Wno-unused-label
+    -Wno-missing-field-initializers
+    -Wno-return-type)
diff --git a/cmake/toolchain/armclang.cmake b/cmake/toolchain/armclang.cmake
new file mode 100644
index 0000000..72eb456
--- /dev/null
+++ b/cmake/toolchain/armclang.cmake
@@ -0,0 +1,86 @@
+#
+# 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.
+#
+
+if (NOT TARGET_CPU)
+    set(TARGET_CPU "cortex-m4")
+endif()
+
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_C_COMPILER "armclang")
+set(CMAKE_CXX_COMPILER "armclang")
+set(CMAKE_LINKER "armlink")
+
+# Convert TARGET_CPU=Cortex-M33+nofp+nodsp into
+#   - CMAKE_SYSTEM_PROCESSOR=cortex-m33
+#   - __CPU_FEATURES=no-fp;no-dsp
+string(REPLACE "+" ";" __CPU_FEATURES ${TARGET_CPU})
+list(POP_FRONT __CPU_FEATURES CMAKE_SYSTEM_PROCESSOR)
+string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR)
+
+# Link target
+set(__LINK_TARGET ${CMAKE_SYSTEM_PROCESSOR})
+
+if ("nodsp" IN_LIST __CPU_FEATURES)
+    string(APPEND __LINK_TARGET ".no_dsp")
+endif()
+
+if ("nofp" IN_LIST __CPU_FEATURES)
+    string(APPEND __LINK_TARGET ".no_fp")
+endif()
+
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "cortex-m55")
+    set(__LINK_TARGET 8.1-M.Main.dsp)
+endif()
+
+# Define C/C++ standards
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_CXX_STANDARD 14)
+
+# Compile options
+add_compile_options(
+    -mcpu=${TARGET_CPU}
+    -mthumb
+    "$<$<CONFIG:DEBUG>:-gdwarf-3>"
+    "$<$<COMPILE_LANGUAGE:CXX>:-fno-unwind-tables;-fno-rtti;-fno-exceptions>")
+
+# Link options
+add_link_options(
+    --cpu=${__LINK_TARGET}
+    --lto
+    --info common,debug,sizes,totals,veneers,unused
+    --symbols
+    --diag_suppress=L6439W)
+
+# Compilation warnings
+add_compile_options(
+    -Wall
+    -Wextra
+    -Wsign-compare
+    -Wunused
+    -Wswitch-default
+    -Wformat
+    -Wdouble-promotion
+    -Wredundant-decls
+    -Wshadow
+    -Wcast-align
+    -Wnull-dereference
+    -Wno-format-extra-args
+    -Wno-unused-function
+    -Wno-unused-label
+    -Wno-missing-field-initializers
+    -Wno-return-type)
