diff --git a/tools/cmake/common/TargetCompileDefinitions.cmake b/tools/cmake/common/TargetCompileDefinitions.cmake
new file mode 100644
index 0000000..15d55ad
--- /dev/null
+++ b/tools/cmake/common/TargetCompileDefinitions.cmake
@@ -0,0 +1,99 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+macro(generate_uuid_formats uuid)
+	#Create a list of byte
+	string(REGEX MATCHALL "([A-Za-z0-9][A-Za-z0-9])" SEPARATED_HEX "${uuid}")
+	list(JOIN SEPARATED_HEX ", 0x" UUID_BYTES )
+	#Generate the uuid_byte string
+	#{ 0x01, 0x10, 0x9c, 0xf8, 0xe5, 0xca, 0x44, 0x6f,
+	# 0x9b, 0x55, 0xf3, 0xcd, 0xc6, 0x51, 0x10, 0xc8, }
+
+	string(PREPEND UUID_BYTES "{0x")
+	string(APPEND UUID_BYTES "}")
+
+	#Split the list of bytes in to the struct fields
+	list(SUBLIST SEPARATED_HEX 0 4 uuid_timeLow)
+	list(SUBLIST SEPARATED_HEX 4 2 uuid_timeMid)
+	list(SUBLIST SEPARATED_HEX 6 2 uuid_timeHiAndVersion)
+	list(SUBLIST SEPARATED_HEX 8 8 uuid_clockSeqAndNode)
+
+	#Combine the bytes in the fields
+	list(JOIN uuid_timeLow "" uuid_timeLow )
+	string(PREPEND uuid_timeLow "0x")
+
+	list(JOIN uuid_timeMid "" uuid_timeMid )
+	string(PREPEND uuid_timeMid " 0x")
+
+	list(JOIN uuid_timeHiAndVersion "" uuid_timeHiAndVersion )
+	string(PREPEND uuid_timeHiAndVersion " 0x")
+
+	list(JOIN uuid_clockSeqAndNode ", 0x" uuid_clockSeqAndNode )
+	string(PREPEND uuid_clockSeqAndNode " 0x")
+
+	#Combine the different fields into one uuid_struct string
+	#{ 0x01109cf8, 0xe5ca, 0x446f, \
+	#{ 0x9b, 0x55, 0xf3, 0xcd, 0xc6, 0x51, 0x10, 0xc8 } }
+
+	string(CONCAT UUID_STRUCT "{" ${uuid_timeLow} "," ${uuid_timeMid}
+		"," ${uuid_timeHiAndVersion} ", {" ${uuid_clockSeqAndNode} "}}")
+
+	# Swith endianess
+	list(SUBLIST SEPARATED_HEX 0 4 hex1)
+	list(SUBLIST SEPARATED_HEX 4 4 hex2)
+	list(SUBLIST SEPARATED_HEX 8 4 hex3)
+	list(SUBLIST SEPARATED_HEX 12 4 hex4)
+
+	list(REVERSE hex1)
+	list(REVERSE hex2)
+	list(REVERSE hex3)
+	list(REVERSE hex4)
+	string(CONCAT UUID_LE " 0x" ${hex1} " 0x" ${hex2} " 0x" ${hex3}
+		" 0x" ${hex4})
+
+endmacro()
+
+#[===[.rst:
+.. cmake:command:: set_target_uuids
+
+.. code:: cmake
+
+set_target_uuids(
+	SP_UUID <uuid>
+	SP_NAME <name>
+	)
+
+INPUTS:
+
+``SP_UUID``
+The UUID of the SP as a string.
+
+``SP_NAME``
+The name of the SP.
+
+#]===]
+
+function (set_target_uuids)
+	set(options)
+	set(oneValueArgs SP_UUID SP_NAME)
+	set(multiValueArgs)
+	cmake_parse_arguments(TARGET "${options}" "${oneValueArgs}"
+		"${multiValueArgs}" ${ARGN} )
+
+	if(NOT DEFINED TARGET_SP_UUID)
+		message(FATAL_ERROR "set_target_uuids: mandatory parameter SP_UUID not defined!")
+	endif()
+	if(NOT DEFINED TARGET_SP_NAME)
+		message(FATAL_ERROR "set_target_uuids: mandatory parameter SP_NAME not defined!")
+	endif()
+
+	generate_uuid_formats(${TARGET_SP_UUID})
+	target_compile_definitions(${TARGET_SP_NAME}
+		PRIVATE OPTEE_SP_UUID=${UUID_STRUCT}
+		PRIVATE OPTEE_SP_UUID_BYTES=${UUID_BYTES}
+	)
+	set(SP_UUID_LE ${UUID_LE} PARENT_SCOPE)
+endfunction()
