Refactor se-proxy deployment structure

Refactors the se-proxy deployment build and directory structure
to allow for alternative build configurations.

Signed-off-by: Julian Hall <julian.hall@arm.com>
Change-Id: I42b4ebf14f1a2a7a7b5ceb6ae684bf71538f700c
diff --git a/deployments/se-proxy/opteesp/CMakeLists.txt b/deployments/se-proxy/config/default-opteesp/CMakeLists.txt
similarity index 83%
rename from deployments/se-proxy/opteesp/CMakeLists.txt
rename to deployments/se-proxy/config/default-opteesp/CMakeLists.txt
index fadbf72..5ecef65 100644
--- a/deployments/se-proxy/opteesp/CMakeLists.txt
+++ b/deployments/se-proxy/config/default-opteesp/CMakeLists.txt
@@ -8,7 +8,7 @@
 
 # Set default platform.
 set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Target platform location.")
-include(../../deployment.cmake REQUIRED)
+include(../../../deployment.cmake REQUIRED)
 
 #-------------------------------------------------------------------------------
 #  The CMakeLists.txt for building the se-proxy deployment for opteesp
@@ -30,6 +30,10 @@
 	SP_NAME "se-proxy"
 )
 
+target_include_directories(se-proxy PRIVATE
+	${CMAKE_CURRENT_LIST_DIR}
+)
+
 #-------------------------------------------------------------------------------
 #  Components that are specific to deployment in the opteesp environment.
 #
@@ -40,7 +44,9 @@
 		"environments/opteesp"
 )
 
-include(../se-proxy.cmake REQUIRED)
+include(../../env/commonsp/se_proxy_sp.cmake REQUIRED)
+include(../../infra/stub/stub.cmake REQUIRED)
+include(../../se-proxy.cmake REQUIRED)
 
 #-------------------------------------------------------------------------------
 #  Set target platform to provide drivers needed by the deployment
@@ -48,15 +54,13 @@
 #-------------------------------------------------------------------------------
 add_platform(TARGET "se-proxy")
 
-
+#-------------------------------------------------------------------------------
+#  Deployment specific build options
+#-------------------------------------------------------------------------------
 target_compile_definitions(se-proxy PRIVATE
 	ARM64=1
 )
 
-target_include_directories(se-proxy PRIVATE
-	${TS_ROOT}/deployments/se-proxy/opteesp
-)
-
 if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
 	target_compile_options(se-proxy PRIVATE
 		-std=c99
@@ -66,7 +70,9 @@
 
 compiler_generate_stripped_elf(TARGET se-proxy NAME "${SP_UUID_CANON}.stripped.elf" RES STRIPPED_ELF)
 
-######################################## install
+#-------------------------------------------------------------------------------
+#  Deployment specific install options
+#-------------------------------------------------------------------------------
 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
 	set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
 endif()
diff --git a/deployments/se-proxy/opteesp/default_se-proxy.dts.in b/deployments/se-proxy/config/default-opteesp/default_se-proxy.dts.in
similarity index 100%
rename from deployments/se-proxy/opteesp/default_se-proxy.dts.in
rename to deployments/se-proxy/config/default-opteesp/default_se-proxy.dts.in
diff --git a/deployments/se-proxy/opteesp/optee_sp_user_defines.h b/deployments/se-proxy/config/default-opteesp/optee_sp_user_defines.h
similarity index 100%
rename from deployments/se-proxy/opteesp/optee_sp_user_defines.h
rename to deployments/se-proxy/config/default-opteesp/optee_sp_user_defines.h
diff --git a/deployments/se-proxy/sp/CMakeLists.txt b/deployments/se-proxy/config/default-sp/CMakeLists.txt
similarity index 84%
rename from deployments/se-proxy/sp/CMakeLists.txt
rename to deployments/se-proxy/config/default-sp/CMakeLists.txt
index ea95008..f6c1f0d 100644
--- a/deployments/se-proxy/sp/CMakeLists.txt
+++ b/deployments/se-proxy/config/default-sp/CMakeLists.txt
@@ -8,7 +8,7 @@
 
 # Set default platform.
 set(TS_PLATFORM "arm/fvp/fvp_base_revc-2xaemv8a" CACHE STRING "Target platform location.")
-include(../../deployment.cmake REQUIRED)
+include(../../../deployment.cmake REQUIRED)
 
 #-------------------------------------------------------------------------------
 #  The CMakeLists.txt for building the se-proxy deployment for generic sp
@@ -40,7 +40,9 @@
 		environments/sp
 )
 
-include(../se-proxy.cmake REQUIRED)
+include(../../env/commonsp/se_proxy_sp.cmake REQUIRED)
+include(../../infra/stub/stub.cmake REQUIRED)
+include(../../se-proxy.cmake REQUIRED)
 
 #-------------------------------------------------------------------------------
 #  Set target platform to provide drivers needed by the deployment
@@ -48,7 +50,9 @@
 #-------------------------------------------------------------------------------
 add_platform(TARGET "se-proxy")
 
-
+#-------------------------------------------------------------------------------
+#  Deployment specific build options
+#-------------------------------------------------------------------------------
 target_compile_definitions(se-proxy PRIVATE
 	ARM64=1
 )
@@ -66,7 +70,9 @@
 include(${TS_ROOT}/tools/cmake/common/ExportMemoryRegionsToManifest.cmake REQUIRED)
 export_memory_regions_to_manifest(TARGET se-proxy NAME "${SP_UUID_CANON}_memory_regions.dtsi" RES EXPORT_MEMORY_REGIONS_DTSI)
 
-######################################## install
+#-------------------------------------------------------------------------------
+#  Deployment specific install options
+#-------------------------------------------------------------------------------
 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
 	set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "location to install build output to." FORCE)
 endif()
diff --git a/deployments/se-proxy/sp/default_se-proxy.dts.in b/deployments/se-proxy/config/default-sp/default_se-proxy.dts.in
similarity index 100%
rename from deployments/se-proxy/sp/default_se-proxy.dts.in
rename to deployments/se-proxy/config/default-sp/default_se-proxy.dts.in
diff --git a/deployments/se-proxy/common/se_proxy_sp.c b/deployments/se-proxy/env/commonsp/se_proxy_sp.c
similarity index 96%
rename from deployments/se-proxy/common/se_proxy_sp.c
rename to deployments/se-proxy/env/commonsp/se_proxy_sp.c
index a37396f..45fcb38 100644
--- a/deployments/se-proxy/common/se_proxy_sp.c
+++ b/deployments/se-proxy/env/commonsp/se_proxy_sp.c
@@ -11,8 +11,8 @@
 #include "sp_discovery.h"
 #include "sp_rxtx.h"
 #include "trace.h"
-#include "service_proxy_factory.h"
-#include "../se_proxy_interfaces.h"
+#include "deployments/se-proxy/infra/service_proxy_factory.h"
+#include "deployments/se-proxy/se_proxy_interfaces.h"
 
 static bool sp_init(uint16_t *own_sp_id);
 
diff --git a/deployments/se-proxy/env/commonsp/se_proxy_sp.cmake b/deployments/se-proxy/env/commonsp/se_proxy_sp.cmake
new file mode 100644
index 0000000..3f05db2
--- /dev/null
+++ b/deployments/se-proxy/env/commonsp/se_proxy_sp.cmake
@@ -0,0 +1,29 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Includes components needed for deploying the se-proxy service provider
+# within a secure partition.
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+# Common components for se-proxy sp deployments
+#
+#-------------------------------------------------------------------------------
+add_components(TARGET "se-proxy"
+	BASE_DIR ${TS_ROOT}
+	COMPONENTS
+		"components/common/fdt"
+		"components/common/trace"
+		"components/common/utils"
+		"components/config/ramstore"
+		"components/config/loader/sp"
+		"components/messaging/ffa/libsp"
+		"components/rpc/common/interface"
+		"components/rpc/ffarpc/endpoint"
+)
+
+target_sources(se-proxy PRIVATE
+	${CMAKE_CURRENT_LIST_DIR}/se_proxy_sp.c
+)
diff --git a/deployments/se-proxy/common/se_proxy_sp.h b/deployments/se-proxy/env/commonsp/se_proxy_sp.h
similarity index 100%
rename from deployments/se-proxy/common/se_proxy_sp.h
rename to deployments/se-proxy/env/commonsp/se_proxy_sp.h
diff --git a/deployments/se-proxy/common/service_proxy_factory.h b/deployments/se-proxy/infra/service_proxy_factory.h
similarity index 100%
rename from deployments/se-proxy/common/service_proxy_factory.h
rename to deployments/se-proxy/infra/service_proxy_factory.h
diff --git a/deployments/se-proxy/common/service_proxy_factory.c b/deployments/se-proxy/infra/stub/service_proxy_factory.c
similarity index 100%
rename from deployments/se-proxy/common/service_proxy_factory.c
rename to deployments/se-proxy/infra/stub/service_proxy_factory.c
diff --git a/deployments/se-proxy/infra/stub/stub.cmake b/deployments/se-proxy/infra/stub/stub.cmake
new file mode 100644
index 0000000..a364f8d
--- /dev/null
+++ b/deployments/se-proxy/infra/stub/stub.cmake
@@ -0,0 +1,29 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# A stub infrastructure for the se-proxy. Infrastructure dependencies are all
+# realized with stub components that do absolutely nothing.
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+# Infrastructure components
+#
+#-------------------------------------------------------------------------------
+add_components(TARGET "se-proxy"
+	BASE_DIR ${TS_ROOT}
+	COMPONENTS
+		"components/rpc/dummy"
+		"components/rpc/common/caller"
+		"components/service/attestation/reporter/stub"
+		"components/service/attestation/key_mngr/stub"
+		"components/service/crypto/backend/stub"
+		"components/service/crypto/client/psa"
+		"components/service/secure_storage/backend/mock_store"
+)
+
+target_sources(se-proxy PRIVATE
+
+	${CMAKE_CURRENT_LIST_DIR}/service_proxy_factory.c
+)
diff --git a/deployments/se-proxy/se-proxy.cmake b/deployments/se-proxy/se-proxy.cmake
index 426c66c..9d71381 100644
--- a/deployments/se-proxy/se-proxy.cmake
+++ b/deployments/se-proxy/se-proxy.cmake
@@ -8,17 +8,7 @@
 add_components(TARGET "se-proxy"
 	BASE_DIR ${TS_ROOT}
 	COMPONENTS
-		"components/common/fdt"
-		"components/common/trace"
-		"components/common/utils"
-		"protocols/rpc/common/packed-c"
-		"protocols/service/secure_storage/packed-c"
-		"protocols/service/crypto/protobuf"
 		"components/common/tlv"
-		"components/config/ramstore"
-		"components/config/loader/sp"
-		"components/messaging/ffa/libsp"
-		"components/rpc/ffarpc/endpoint"
 		"components/rpc/common/interface"
 		"components/rpc/common/demux"
 		"components/service/common/include"
@@ -47,20 +37,9 @@
 		"components/service/attestation/include"
 		"components/service/attestation/provider"
 		"components/service/attestation/provider/serializer/packed-c"
-
-		# Stub service provider backends
-		"components/rpc/dummy"
-		"components/rpc/common/caller"
-		"components/service/attestation/reporter/stub"
-		"components/service/attestation/key_mngr/stub"
-		"components/service/crypto/backend/stub"
-		"components/service/crypto/client/psa"
-		"components/service/secure_storage/backend/mock_store"
-)
-
-target_sources(se-proxy PRIVATE
-	${CMAKE_CURRENT_LIST_DIR}/common/se_proxy_sp.c
-	${CMAKE_CURRENT_LIST_DIR}/common/service_proxy_factory.c
+		"protocols/rpc/common/packed-c"
+		"protocols/service/secure_storage/packed-c"
+		"protocols/service/crypto/protobuf"
 )
 
 #-------------------------------------------------------------------------------
@@ -69,7 +48,7 @@
 #-------------------------------------------------------------------------------
 
 # Nanopb
-include(../../../external/nanopb/nanopb.cmake)
+include(${TS_ROOT}/external/nanopb/nanopb.cmake)
 target_link_libraries(se-proxy PRIVATE nanopb::protobuf-nanopb-static)
 protobuf_generate_all(TGT "se-proxy" NAMESPACE "protobuf" BASE_DIR "${TS_ROOT}/protocols")