build: Genereate OPTEE_SP_UUID from cmake

Generate the OPTEE_SP_UUID define from cmake instead of having it
defined optee_sp_user_defines.h.
The ${NAME}_SP_UUID_BYTES defined inside ${NAME}_sp.h are not used
anywhere. Delete them, and generate a OPTEE_SP_UUID_BYTES definition
instead.
This will mean that there is only one definition for the UUID and the
other formats are derived from it.

Signed-off-by: Jelle Sels <jelle.sels@arm.com>
Change-Id: Ia7b4cba22c47350cbbef7de370892ffe8f08a908
diff --git a/deployments/attestation/common/attestation_sp.h b/deployments/attestation/common/attestation_sp.h
index e949193..89424aa 100644
--- a/deployments/attestation/common/attestation_sp.h
+++ b/deployments/attestation/common/attestation_sp.h
@@ -7,8 +7,4 @@
 #ifndef ATTESTATION_SP_H
 #define ATTESTATION_SP_H
 
-#define ATTESTATION_SP_UUID_BYTES \
-	{0xa1, 0xba, 0xf1, 0x55, 0x88, 0x76, 0x46, 0x95, \
-	 0x8f, 0x7c, 0x54, 0x95, 0x5e, 0x8d, 0xb9, 0x74}
-
 #endif /* ATTESTATION_SP_H */
diff --git a/deployments/attestation/opteesp/CMakeLists.txt b/deployments/attestation/opteesp/CMakeLists.txt
index ef86ef3..c38be06 100644
--- a/deployments/attestation/opteesp/CMakeLists.txt
+++ b/deployments/attestation/opteesp/CMakeLists.txt
@@ -21,9 +21,13 @@
 add_executable(attestation)
 target_include_directories(attestation PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "a1baf155-8876-4695-8f7c-54955e8db974")
-set(SP_UUID_LE "0x55f1baa1 0x95467688 0x95547c8f 0x74b98d5e")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "ATT" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "attestation"
+)
 
 #-------------------------------------------------------------------------------
 #  Default deployment specific configuration
diff --git a/deployments/attestation/opteesp/optee_sp_user_defines.h b/deployments/attestation/opteesp/optee_sp_user_defines.h
index 475a2b9..ebc7dad 100644
--- a/deployments/attestation/opteesp/optee_sp_user_defines.h
+++ b/deployments/attestation/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef OPTEE_SP_USER_DEFINES_H
 #define OPTEE_SP_USER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{0xa1baf155, 0x8876, 0x4695, \
-		{0x8f, 0x7c, 0x54, 0x95, 0x5e, 0x8d, 0xb9, 0x74}}
-
 #define OPTEE_SP_FLAGS				0
 
 /* Provisioned stack size */
diff --git a/deployments/crypto/common/crypto_sp.h b/deployments/crypto/common/crypto_sp.h
index be1e097..8771f00 100644
--- a/deployments/crypto/common/crypto_sp.h
+++ b/deployments/crypto/common/crypto_sp.h
@@ -7,8 +7,4 @@
 #ifndef CRYPTO_SP_H
 #define CRYPTO_SP_H
 
-#define CRYPTO_SP_UUID_BYTES \
-	{0xd9, 0xdf, 0x52, 0xd5, 0x16, 0xa2, 0x4b, 0xb2, \
-	 0x9a, 0xa4, 0xd2, 0x6d, 0x3b, 0x84, 0xe8, 0xc0}
-
 #endif /* CRYPTO_SP_H */
diff --git a/deployments/crypto/opteesp/CMakeLists.txt b/deployments/crypto/opteesp/CMakeLists.txt
index e7039b9..9f6453a 100644
--- a/deployments/crypto/opteesp/CMakeLists.txt
+++ b/deployments/crypto/opteesp/CMakeLists.txt
@@ -21,9 +21,13 @@
 add_executable(crypto)
 target_include_directories(crypto PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "d9df52d5-16a2-4bb2-9aa4-d26d3b84e8c0")
-set(SP_UUID_LE "0xd552dfd9 0xb24ba216 0x6dd2a49a 0xc0e8843b")
 set(SP_HEAP_SIZE "490 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "CRYPTO" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "crypto"
+)
 
 #-------------------------------------------------------------------------------
 #  Components that are specific to deployment in the opteesp environment.
diff --git a/deployments/crypto/opteesp/optee_sp_user_defines.h b/deployments/crypto/opteesp/optee_sp_user_defines.h
index 29b2749..bbcc12b 100644
--- a/deployments/crypto/opteesp/optee_sp_user_defines.h
+++ b/deployments/crypto/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef OPTEE_SP_USER_DEFINES_H
 #define OPTEE_SP_USER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{0xd9df52d5, 0x16a2, 0x4bb2, \
-		{0x9a, 0xa4, 0xd2, 0x6d, 0x3b, 0x84, 0xe8, 0xc0}}
-
 #define OPTEE_SP_FLAGS			0
 
 /* Provisioned stack size */
diff --git a/deployments/env-test/common/env_test.h b/deployments/env-test/common/env_test.h
index 7a25ee2..4fd9792 100644
--- a/deployments/env-test/common/env_test.h
+++ b/deployments/env-test/common/env_test.h
@@ -7,8 +7,4 @@
 #ifndef ENV_TEST_H
 #define ENV_TEST_H
 
-#define ENV_TEST_SP_UUID_BYTES \
-	{0x33, 0xc7, 0x5b, 0xaf, 0xac, 0x6a, 0x4f, 0xef, \
-	 0x8a, 0xc7, 0xe9, 0x90, 0x9b, 0xee, 0x2d, 0x17}
-
 #endif /* ENV_TEST_H */
diff --git a/deployments/env-test/opteesp/CMakeLists.txt b/deployments/env-test/opteesp/CMakeLists.txt
index cff00ff..7031a01 100644
--- a/deployments/env-test/opteesp/CMakeLists.txt
+++ b/deployments/env-test/opteesp/CMakeLists.txt
@@ -22,9 +22,13 @@
 add_executable(env-test)
 target_include_directories(env-test PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "33c75baf-ac6a-4fe4-8ac7-e9909bee2d17")
-set(SP_UUID_LE "0xaf5bc733 0xe44f6aac 0x90e9c78a 0x172dee9b")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "ENVTEST" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "env-test"
+)
 
 #-------------------------------------------------------------------------------
 #  Components that are env-test specific to deployment in the opteesp
diff --git a/deployments/env-test/opteesp/optee_sp_user_defines.h b/deployments/env-test/opteesp/optee_sp_user_defines.h
index 7c78790..ebc7dad 100644
--- a/deployments/env-test/opteesp/optee_sp_user_defines.h
+++ b/deployments/env-test/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef OPTEE_SP_USER_DEFINES_H
 #define OPTEE_SP_USER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{0x33c75baf, 0xac6a, 0x4fe4, \
-		{0x8a, 0xc7, 0xe9, 0x90, 0x9b, 0xee, 0x2d, 0x17}}
-
 #define OPTEE_SP_FLAGS				0
 
 /* Provisioned stack size */
diff --git a/deployments/internal-trusted-storage/common/its_sp.h b/deployments/internal-trusted-storage/common/its_sp.h
index ffaf25e..20562a4 100644
--- a/deployments/internal-trusted-storage/common/its_sp.h
+++ b/deployments/internal-trusted-storage/common/its_sp.h
@@ -8,9 +8,4 @@
 #ifndef ITS_SP_H
 #define ITS_SP_H
 
-/* UUID for the Internal Trusted Store */
-#define ITS_SP_UUID_BYTES \
-	{ 0xdc, 0x1e, 0xef, 0x48, 0xb1, 0x7a, 0x4c, 0xcf, \
-	  0xac, 0x8b, 0xdf, 0xcf, 0xf7, 0x71, 0x1b, 0x14, }
-
 #endif /* ITS_SP_H */
diff --git a/deployments/internal-trusted-storage/opteesp/CMakeLists.txt b/deployments/internal-trusted-storage/opteesp/CMakeLists.txt
index ffae662..ba3c654 100644
--- a/deployments/internal-trusted-storage/opteesp/CMakeLists.txt
+++ b/deployments/internal-trusted-storage/opteesp/CMakeLists.txt
@@ -18,9 +18,13 @@
 add_executable(internal-trusted-storage)
 target_include_directories(internal-trusted-storage PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "dc1eef48-b17a-4ccf-ac8b-dfcff7711b14")
-set(SP_UUID_LE "0x48ef1edc 0xcf4c7ab1 0xcfdf8bac 0x141b71f7")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "ITS" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "internal-trusted-storage"
+)
 
 add_components(TARGET "internal-trusted-storage"
 	BASE_DIR ${TS_ROOT}
diff --git a/deployments/internal-trusted-storage/opteesp/optee_sp_user_defines.h b/deployments/internal-trusted-storage/opteesp/optee_sp_user_defines.h
index 304748a..bbcc12b 100644
--- a/deployments/internal-trusted-storage/opteesp/optee_sp_user_defines.h
+++ b/deployments/internal-trusted-storage/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef OPTEE_SP_USER_DEFINES_H
 #define OPTEE_SP_USER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{ 0xdc1eef48, 0xb17a, 0x4ccf, \
-		{ 0xac, 0x8b, 0xdf, 0xcf, 0xf7, 0x71, 0x1b, 0x14 } }
-
 #define OPTEE_SP_FLAGS			0
 
 /* Provisioned stack size */
diff --git a/deployments/protected-storage/common/ps_sp.h b/deployments/protected-storage/common/ps_sp.h
index 43e257f..ebe7df3 100644
--- a/deployments/protected-storage/common/ps_sp.h
+++ b/deployments/protected-storage/common/ps_sp.h
@@ -7,8 +7,4 @@
 #ifndef PS_SP_H
 #define PS_SP_H
 
-#define PS_SP_UUID_BYTES \
-	{ 0x75, 0x1b, 0xf8, 0x01, 0x3d, 0xde, 0x47, 0x68, \
-	  0xa5, 0x14, 0x0f, 0x10, 0xae, 0xed, 0x17, 0x90 }
-
 #endif /* PS_SP_H */
diff --git a/deployments/protected-storage/opteesp/CMakeLists.txt b/deployments/protected-storage/opteesp/CMakeLists.txt
index d4813b4..a7034c0 100644
--- a/deployments/protected-storage/opteesp/CMakeLists.txt
+++ b/deployments/protected-storage/opteesp/CMakeLists.txt
@@ -18,9 +18,13 @@
 add_executable(protected-storage)
 target_include_directories(protected-storage PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "751bf801-3dde-4768-a514-0f10aeed1790")
-set(SP_UUID_LE "0x01f81b75 0x6847de3d 0x100f14a5 0x9017edae")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "PS" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "protected-storage"
+)
 
 add_components(TARGET "protected-storage"
 	BASE_DIR ${TS_ROOT}
diff --git a/deployments/protected-storage/opteesp/optee_sp_user_defines.h b/deployments/protected-storage/opteesp/optee_sp_user_defines.h
index 1da382a..bbcc12b 100644
--- a/deployments/protected-storage/opteesp/optee_sp_user_defines.h
+++ b/deployments/protected-storage/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef OPTEE_SP_USER_DEFINES_H
 #define OPTEE_SP_USER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{ 0x751bf801, 0x3dde, 0x4768, \
-		{ 0xa5, 0x14, 0x0f, 0x10, 0xae, 0xed, 0x17, 0x90 } }
-
 #define OPTEE_SP_FLAGS			0
 
 /* Provisioned stack size */
diff --git a/deployments/se-proxy/common/se_proxy_sp.h b/deployments/se-proxy/common/se_proxy_sp.h
index ee241b1..4ae2355 100644
--- a/deployments/se-proxy/common/se_proxy_sp.h
+++ b/deployments/se-proxy/common/se_proxy_sp.h
@@ -7,8 +7,4 @@
 #ifndef SE_PROXY_SP_H
 #define SE_PROXY_SP_H
 
-#define SE_PROXY_SP_UUID_BYTES \
-	{0x46, 0xbb, 0x39, 0xd1, 0xb4, 0xd9, 0x45, 0xb5, \
-	 0x88, 0xff, 0x04, 0x00, 0x27, 0xda, 0xb2, 0x49}
-
 #endif /* SE_PROXY_SP_H */
diff --git a/deployments/se-proxy/opteesp/CMakeLists.txt b/deployments/se-proxy/opteesp/CMakeLists.txt
index b40b7cb..1c6753a 100644
--- a/deployments/se-proxy/opteesp/CMakeLists.txt
+++ b/deployments/se-proxy/opteesp/CMakeLists.txt
@@ -22,9 +22,13 @@
 add_executable(se-proxy)
 target_include_directories(se-proxy PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "46bb39d1-b4d9-45b5-88ff-040027dab249")
-set(SP_UUID_LE "0xd139bb46 0xb545d9b4 0x0004ff88 0x49b2da27")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "SEPROXY" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "se-proxy"
+)
 
 #-------------------------------------------------------------------------------
 #  Components that are specific to deployment in the opteesp environment.
diff --git a/deployments/se-proxy/opteesp/optee_sp_user_defines.h b/deployments/se-proxy/opteesp/optee_sp_user_defines.h
index 9327e78..598cbcc 100644
--- a/deployments/se-proxy/opteesp/optee_sp_user_defines.h
+++ b/deployments/se-proxy/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef SP_HEADER_DEFINES_H
 #define SP_HEADER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{0x46bb39d1, 0xb4d9, 0x45b5, \
-		{0x88, 0xff, 0x04, 0x00, 0x27, 0xda, 0xb2, 0x49}}
-
 #define OPTEE_SP_FLAGS				0
 
 /* Provisioned stack size */
diff --git a/deployments/sfs-demo/common/sfs_demo_sp.h b/deployments/sfs-demo/common/sfs_demo_sp.h
index c9b4915..a4fe010 100644
--- a/deployments/sfs-demo/common/sfs_demo_sp.h
+++ b/deployments/sfs-demo/common/sfs_demo_sp.h
@@ -7,8 +7,4 @@
 #ifndef SFS_DEMO_SP_H
 #define SFS_DEMO_SP_H
 
-#define SFS_DEMO_SP_UUID_BYTES \
-	{ 0x01, 0x10, 0x9c, 0xf8, 0xe5, 0xca, 0x44, 0x6f, \
-	  0x9b, 0x55, 0xf3, 0xcd, 0xc6, 0x51, 0x10, 0xc8, }
-
 #endif /* SFS_DEMO_SP_H */
diff --git a/deployments/sfs-demo/opteesp/CMakeLists.txt b/deployments/sfs-demo/opteesp/CMakeLists.txt
index 364aa30..ac07e60 100644
--- a/deployments/sfs-demo/opteesp/CMakeLists.txt
+++ b/deployments/sfs-demo/opteesp/CMakeLists.txt
@@ -17,9 +17,13 @@
 project(trusted-services LANGUAGES C ASM)
 add_executable(sfs-demo)
 set(SP_UUID_CANON "01109cf8-e5ca-446f-9b55-f3cdc65110c8")
-set(SP_UUID_LE "0xf89c1001 0x6f44cae5 0xcdf3559b 0xc81051c6")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "SFSDEMO" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "sfs-demo"
+)
 
 add_components(TARGET "sfs-demo"
 	BASE_DIR ${TS_ROOT}
diff --git a/deployments/sfs-demo/opteesp/optee_sp_user_defines.h b/deployments/sfs-demo/opteesp/optee_sp_user_defines.h
index b6a8929..916a78b 100644
--- a/deployments/sfs-demo/opteesp/optee_sp_user_defines.h
+++ b/deployments/sfs-demo/opteesp/optee_sp_user_defines.h
@@ -5,10 +5,6 @@
 #ifndef OPTEE_SP_USER_DEFINES_H
 #define OPTEE_SP_USER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{ 0x01109cf8, 0xe5ca, 0x446f, \
-		{ 0x9b, 0x55, 0xf3, 0xcd, 0xc6, 0x51, 0x10, 0xc8 } }
-
 #define OPTEE_SP_FLAGS			0
 
 /* Provisioned stack size */
diff --git a/deployments/smm-gateway/common/smm_gateway_sp.h b/deployments/smm-gateway/common/smm_gateway_sp.h
index 13317e7..6f23135 100644
--- a/deployments/smm-gateway/common/smm_gateway_sp.h
+++ b/deployments/smm-gateway/common/smm_gateway_sp.h
@@ -7,8 +7,4 @@
 #ifndef SMM_GATEWAY_SP_H
 #define SMM_GATEWAY_SP_H
 
-#define SMM_GATEWAY_UUID_BYTES \
-	{0xed, 0x32, 0xd5, 0x33, 0x99, 0xe6, 0x42, 0x09, \
-	 0x9c, 0xc0, 0x2d, 0x72, 0xcd, 0xd9, 0x98, 0xa7}
-
 #endif /* SMM_GATEWAY_SP_H */
diff --git a/deployments/smm-gateway/opteesp/CMakeLists.txt b/deployments/smm-gateway/opteesp/CMakeLists.txt
index 245bf6c..8a277cd 100644
--- a/deployments/smm-gateway/opteesp/CMakeLists.txt
+++ b/deployments/smm-gateway/opteesp/CMakeLists.txt
@@ -21,9 +21,13 @@
 add_executable(smm-gateway)
 target_include_directories(smm-gateway PRIVATE "${TOP_LEVEL_INCLUDE_DIRS}")
 set(SP_UUID_CANON "ed32d533-99e6-4209-9cc0-2d72cdd998a7")
-set(SP_UUID_LE "0x33d532ed 0x0942e699 0x722dc09c 0xa798d9cd")
 set(SP_HEAP_SIZE "32 * 1024" CACHE STRING "SP heap size in bytes")
 set(TRACE_PREFIX "SMMGW" CACHE STRING "Trace prefix")
+include(${TS_ROOT}/tools/cmake/common/TargetCompileDefinitions.cmake)
+set_target_uuids(
+	SP_UUID ${SP_UUID_CANON}
+	SP_NAME "smm-gateway"
+)
 
 # Setting the MM communication buffer parameters
 set(MM_COMM_BUFFER_ADDRESS "0x00000008 0x81000000" CACHE STRING "Address of MM communicte buffer in 64 bit DTS format")
diff --git a/deployments/smm-gateway/opteesp/optee_sp_user_defines.h b/deployments/smm-gateway/opteesp/optee_sp_user_defines.h
index f4dde2b..598cbcc 100644
--- a/deployments/smm-gateway/opteesp/optee_sp_user_defines.h
+++ b/deployments/smm-gateway/opteesp/optee_sp_user_defines.h
@@ -6,10 +6,6 @@
 #ifndef SP_HEADER_DEFINES_H
 #define SP_HEADER_DEFINES_H
 
-#define OPTEE_SP_UUID \
-	{0xed32d533, 0x99e6, 0x4209, \
-		{ 0x9c, 0xc0, 0x2d, 0x72, 0xcd, 0xd9, 0x98, 0xa7 }}
-
 #define OPTEE_SP_FLAGS				0
 
 /* Provisioned stack size */
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()