Build: Create a dedicated target for the interface of CC-312 stack

This patch introduces a dedicated target for the interface
APIs to help modularize the CC-312 stack build process.

Signed-off-by: Antonio de Angelis <antonio.deangelis@arm.com>
Change-Id: Ia2074e8b5e544f7ef82767af520bbf9698edf27d
diff --git a/bl2/CMakeLists.txt b/bl2/CMakeLists.txt
index f5d3bb9..93884e7 100644
--- a/bl2/CMakeLists.txt
+++ b/bl2/CMakeLists.txt
@@ -70,7 +70,6 @@
 
 target_compile_definitions(bl2_mbedcrypto_config
     INTERFACE
-        BUILD_PSA_DRIVER_API=False
         $<$<STREQUAL:${MCUBOOT_SIGNATURE_TYPE},RSA>:MCUBOOT_SIGN_RSA>
         $<$<STREQUAL:${MCUBOOT_SIGNATURE_TYPE},RSA>:MCUBOOT_SIGN_RSA_LEN=${MCUBOOT_SIGNATURE_KEY_LEN}>
         MBEDTLS_CONFIG_FILE="${MCUBOOT_MBEDCRYPTO_CONFIG_FILEPATH}"
diff --git a/lib/ext/cryptocell-312-runtime/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/CMakeLists.txt
index 7c4f412..0e14f31 100644
--- a/lib/ext/cryptocell-312-runtime/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/CMakeLists.txt
@@ -12,33 +12,20 @@
 cmake_policy(SET CMP0076 NEW)
 cmake_policy(SET CMP0079 NEW)
 
-if (NOT DEFINED CC312_LIB_TARGET)
-    set(CC312_LIB_TARGET cc312)
-endif()
-if (NOT DEFINED CC312_PAL_TARGET)
-    set(CC312_PAL_TARGET cc312_pal)
-endif()
-if (NOT DEFINED CC312_CDMPU_TARGET)
-    set(CC312_CDMPU_TARGET cc312_cdmpu)
-endif()
+set(CC312_LIB_TARGET            ${CC312_LIB_PREFIX}cc312)
+set(CC312_PAL_TARGET            ${CC312_LIB_PREFIX}cc312_pal)
+set(CC312_CDMPU_TARGET          ${CC312_LIB_PREFIX}cc312_cdmpu)
+set(CC312_MBEDTLS_API_TARGET    ${CC312_LIB_PREFIX}cc312_mbedtls_api)
+set(CC312_PSA_DRIVER_API_TARGET ${CC312_LIB_PREFIX}cc312_psa_driver_api)
 
-# Controls whether to build the PSA Crypto Unified Driver interface
-if (NOT DEFINED BUILD_PSA_DRIVER_API)
-    set(BUILD_PSA_DRIVER_API True)
-endif()
-message(STATUS
-    "${CC312_LIB_TARGET} has BUILD_PSA_DRIVER_API: ${BUILD_PSA_DRIVER_API}")
+# Add library targets for this project
+add_library(${CC312_LIB_TARGET} STATIC EXCLUDE_FROM_ALL)
+add_library(${CC312_PAL_TARGET} STATIC EXCLUDE_FROM_ALL)
+add_library(${CC312_CDMPU_TARGET} INTERFACE)
 
-add_library(${CC312_LIB_TARGET} STATIC)
-# The extra libraries don't change much, so if we've already got one just ignore
-# it. it's still possible to create multiple targets by altering the name
-# variable.
-if(NOT TARGET ${CC312_PAL_TARGET})
-    add_library(${CC312_PAL_TARGET} INTERFACE)
-endif()
-if(NOT TARGET ${CC312_CDMPU_TARGET})
-    add_library(${CC312_CDMPU_TARGET} INTERFACE)
-endif()
+# Library interface components
+add_library(${CC312_MBEDTLS_API_TARGET} STATIC EXCLUDE_FROM_ALL)
+add_library(${CC312_PSA_DRIVER_API_TARGET} STATIC EXCLUDE_FROM_ALL)
 
 add_subdirectory(codesafe)
 add_subdirectory(host)
@@ -48,28 +35,36 @@
 
 target_compile_definitions(${CC312_LIB_TARGET}
     PRIVATE
-        $<IF:$<BOOL:${BUILD_PSA_DRIVER_API}>,BUILD_PSA_DRIVER_API=True,BUILD_PSA_DRIVER_API=False>
         DLLI_MAX_BUFF_SIZE=0x10000
-        USE_MBEDTLS_CRYPTOCELL
         CC_MNG_MIN_BACKUP_SIZE_IN_BYTES=512
+        CC_SUPPORT_PKA_64_16
+    INTERFACE
+        USE_MBEDTLS_CRYPTOCELL
         $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:CC_PAL_MAX_LOG_LEVEL=3>
     PUBLIC
         CC_IOT
-        CC_SUPPORT_PKA_64_16
 )
 target_link_libraries(${CC312_LIB_TARGET}
     PRIVATE
         ${CC312_PAL_TARGET}
+        ${CC312_LIB_PREFIX}mbedcrypto
+        platform_s
+    INTERFACE
+        ${CC312_MBEDTLS_API_TARGET}
 )
 
 ########################## PAL #################################################
 
 target_compile_definitions(${CC312_PAL_TARGET}
-    INTERFACE
-        CC_TRNG_MODE=0
-        $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:CC_PAL_MAX_LOG_LEVEL=3>
+    PUBLIC
         CC_IOT
-        CC_SUPPORT_PKA_64_16
+    INTERFACE
+        $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:CC_PAL_MAX_LOG_LEVEL=3>
+)
+
+target_link_libraries(${CC312_PAL_TARGET}
+    PRIVATE
+        platform_s
 )
 
 ########################## CDMPU ###############################################
@@ -87,3 +82,30 @@
         CC_IOT
         CC_SUPPORT_PKA_64_16
 )
+
+########################## DRIVER INTERFACE ####################################
+
+
+target_compile_definitions(${CC312_PSA_DRIVER_API_TARGET}
+    PUBLIC
+        MBEDTLS_PSA_CRYPTO_DRIVERS
+        PSA_CRYPTO_DRIVER_CC3XX
+)
+
+target_link_libraries(${CC312_PSA_DRIVER_API_TARGET}
+    PUBLIC
+        ${CC312_LIB_PREFIX}mbedcrypto
+    INTERFACE
+        ${CC312_LIB_TARGET}
+    PRIVATE
+        platform_s
+)
+
+target_link_libraries(${CC312_MBEDTLS_API_TARGET}
+    PUBLIC
+        ${CC312_LIB_PREFIX}mbedcrypto
+    INTERFACE
+        ${CC312_LIB_TARGET}
+    PRIVATE
+        platform_s
+)
diff --git a/lib/ext/cryptocell-312-runtime/codesafe/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/codesafe/CMakeLists.txt
index d44c327..acfcb47 100644
--- a/lib/ext/cryptocell-312-runtime/codesafe/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/codesafe/CMakeLists.txt
@@ -7,7 +7,5 @@
 
 add_subdirectory(src/crypto_api)
 add_subdirectory(src/mbedtls_api)
-if (BUILD_PSA_DRIVER_API)
-    add_subdirectory(src/psa_driver_api)
-endif()
+add_subdirectory(src/psa_driver_api)
 # add_subdirectory(src/secure_boot_debug)
diff --git a/lib/ext/cryptocell-312-runtime/codesafe/src/crypto_api/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/codesafe/src/crypto_api/CMakeLists.txt
index aadbc72..cd77314 100644
--- a/lib/ext/cryptocell-312-runtime/codesafe/src/crypto_api/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/codesafe/src/crypto_api/CMakeLists.txt
@@ -10,7 +10,7 @@
 target_include_directories(${CC312_LIB_TARGET}
     PUBLIC
         cc3x_sym/driver
-    PRIVATE
+    INTERFACE
         common
         cc3x_sym/api
         pki/poly
diff --git a/lib/ext/cryptocell-312-runtime/codesafe/src/mbedtls_api/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/codesafe/src/mbedtls_api/CMakeLists.txt
index c7146ff..efbcf6b 100644
--- a/lib/ext/cryptocell-312-runtime/codesafe/src/mbedtls_api/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/codesafe/src/mbedtls_api/CMakeLists.txt
@@ -5,12 +5,23 @@
 #
 #-------------------------------------------------------------------------------
 
-target_include_directories(${CC312_LIB_TARGET}
-    PRIVATE
+target_include_directories(${CC312_CDMPU_TARGET}
+    INTERFACE
         .
 )
 
-target_sources(${CC312_LIB_TARGET}
+target_sources(${CC312_CDMPU_TARGET}
+    INTERFACE
+        ccm_alt.c
+        mbedtls_common.c
+)
+
+target_include_directories(${CC312_MBEDTLS_API_TARGET}
+    INTERFACE
+        .
+)
+
+target_sources(${CC312_MBEDTLS_API_TARGET}
     PRIVATE
         aes_alt.c
         cc_ecp_internal.c
@@ -32,14 +43,3 @@
         sha256_alt.c
         trng_api.c
 )
-
-target_include_directories(${CC312_CDMPU_TARGET}
-    INTERFACE
-        .
-)
-
-target_sources(${CC312_CDMPU_TARGET}
-    INTERFACE
-        ccm_alt.c
-        mbedtls_common.c
-)
diff --git a/lib/ext/cryptocell-312-runtime/codesafe/src/psa_driver_api/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/codesafe/src/psa_driver_api/CMakeLists.txt
index 4cef399..6317bb4 100644
--- a/lib/ext/cryptocell-312-runtime/codesafe/src/psa_driver_api/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/codesafe/src/psa_driver_api/CMakeLists.txt
@@ -5,13 +5,13 @@
 #
 #-------------------------------------------------------------------------------
 
-target_include_directories(${CC312_LIB_TARGET}
+target_include_directories(${CC312_PSA_DRIVER_API_TARGET}
     PUBLIC
         .
         include
 )
 
-target_sources(${CC312_LIB_TARGET}
+target_sources(${CC312_PSA_DRIVER_API_TARGET}
     PRIVATE
         # PSA Cryptoprocessor Unified Driver interface entry point sources
         src/cc3xx_psa_hash.c
@@ -36,9 +36,3 @@
         src/cc3xx_internal_gcm.c
         src/cc3xx_internal_chacha20_poly1305.c
 )
-
-target_compile_definitions(${CC312_LIB_TARGET}
-    PUBLIC
-        MBEDTLS_PSA_CRYPTO_DRIVERS
-        PSA_CRYPTO_DRIVER_CC3XX
-)
diff --git a/lib/ext/cryptocell-312-runtime/host/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/host/CMakeLists.txt
index 214d8a0..f5b5309 100644
--- a/lib/ext/cryptocell-312-runtime/host/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/host/CMakeLists.txt
@@ -29,12 +29,12 @@
 ########################## PAL #################################################
 
 target_include_directories(${CC312_PAL_TARGET}
-    INTERFACE
+    PUBLIC
         src/hal
 )
 
 target_sources(${CC312_PAL_TARGET}
-    INTERFACE
+    PRIVATE
         src/pal/cc_pal_trng.c
         src/pal/no_os/cc_pal_abort_plat.c
         src/pal/no_os/cc_pal_apbc.c
diff --git a/lib/ext/cryptocell-312-runtime/shared/CMakeLists.txt b/lib/ext/cryptocell-312-runtime/shared/CMakeLists.txt
index 4435fde..6158bd1 100644
--- a/lib/ext/cryptocell-312-runtime/shared/CMakeLists.txt
+++ b/lib/ext/cryptocell-312-runtime/shared/CMakeLists.txt
@@ -28,7 +28,7 @@
 )
 
 target_include_directories(${CC312_PAL_TARGET}
-    INTERFACE
+    PRIVATE
         include
         include/proj/cc3x
         hw/include
diff --git a/platform/ext/accelerator/cc312/CMakeLists.txt b/platform/ext/accelerator/cc312/CMakeLists.txt
index bccb681..3d8b793 100644
--- a/platform/ext/accelerator/cc312/CMakeLists.txt
+++ b/platform/ext/accelerator/cc312/CMakeLists.txt
@@ -37,6 +37,9 @@
 ################################ BL2 ###########################################
 
 if(BL2)
+
+    set(CC312_LIB_PREFIX bl2_)
+
     target_sources(bl2_crypto_hw
         PRIVATE
             ${CMAKE_CURRENT_SOURCE_DIR}/cc312.c
@@ -49,28 +52,25 @@
 
     target_link_libraries(bl2_crypto_hw
         PUBLIC
-            bl2_cc312
+            ${CC312_LIB_PREFIX}cc312
         PRIVATE
             bl2_mbedcrypto
             platform_bl2
     )
 
-    set(CC312_LIB_TARGET bl2_cc312)
     set(SAVED_BUILD_TYPE ${CMAKE_BUILD_TYPE})
     set(CMAKE_BUILD_TYPE ${MBEDCRYPTO_BUILD_TYPE})
-    set(BUILD_PSA_DRIVER_API False)
-    add_subdirectory(${CC312_PATH} ${CMAKE_CURRENT_BINARY_DIR}/bl2_cc312)
-    unset(BUILD_PSA_DRIVER_API)
+    add_subdirectory(${CC312_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${CC312_LIB_PREFIX}cc312)
     set(CMAKE_BUILD_TYPE ${SAVED_BUILD_TYPE} CACHE STRING "Build type: [Debug, Release, RelWithDebInfo, MinSizeRel]" FORCE)
 
-    target_sources(bl2_cc312
+    target_sources(${CC312_LIB_PREFIX}cc312
         PUBLIC
             $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:${CMAKE_CURRENT_SOURCE_DIR}/cc312_log.c>
     )
 
     # Adding two targets as link-time dependencies of each other seems bad, but
     # in reality it just means that they'll share headers and compile defs.
-    target_link_libraries(bl2_cc312
+    target_link_libraries(${CC312_LIB_PREFIX}cc312_mbedtls_api
         PRIVATE
             bl2_mbedcrypto
             platform_bl2
@@ -79,7 +79,7 @@
     )
     target_link_libraries(bl2_mbedcrypto
         PRIVATE
-            bl2_cc312
+            ${CC312_LIB_PREFIX}cc312_mbedtls_api
         PUBLIC
             bl2_crypto_hw
     )
@@ -90,7 +90,7 @@
             bl2_crypto_hw
     )
 
-    target_link_libraries(cc312_cdmpu
+    target_link_libraries(${CC312_LIB_PREFIX}cc312_cdmpu
         INTERFACE
             bl2_mbedcrypto
     )
@@ -107,7 +107,7 @@
             $<$<C_COMPILER_ID:ARMClang>:-Wno-unused-parameter>
     )
 
-    target_compile_options(bl2_cc312
+    target_compile_options(${CC312_LIB_PREFIX}cc312
         PRIVATE
             ${BL2_COMPILER_CP_FLAG}
     )
@@ -117,14 +117,18 @@
             ${BL2_COMPILER_CP_FLAG}
     )
 
-    target_compile_options(cc312_cdmpu
+    target_compile_options(${CC312_LIB_PREFIX}cc312_cdmpu
         INTERFACE
             ${BL2_COMPILER_CP_FLAG}
     )
+    unset(CC312_LIB_PREFIX)
+
 endif()
 
 ############################ Crypto Service ####################################
 
+set(CC312_LIB_PREFIX crypto_service_)
+
 target_sources(crypto_service_crypto_hw
     PRIVATE
         cc312.c
@@ -138,26 +142,25 @@
 
 target_link_libraries(crypto_service_crypto_hw
     PUBLIC
-        crypto_service_cc312
+        ${CC312_LIB_PREFIX}cc312
     PRIVATE
         crypto_service_mbedcrypto
         platform_s
 )
 
-set(CC312_LIB_TARGET crypto_service_cc312)
 set(SAVED_BUILD_TYPE ${CMAKE_BUILD_TYPE})
 set(CMAKE_BUILD_TYPE ${MBEDCRYPTO_BUILD_TYPE})
-add_subdirectory(${CC312_PATH} ${CMAKE_CURRENT_BINARY_DIR}/crypto_service_cc312)
+add_subdirectory(${CC312_PATH} ${CMAKE_CURRENT_BINARY_DIR}/${CC312_LIB_PREFIX}cc312)
 set(CMAKE_BUILD_TYPE ${SAVED_BUILD_TYPE} CACHE STRING "Build type: [Debug, Release, RelWithDebInfo, MinSizeRel]" FORCE)
 
-target_sources(crypto_service_cc312
-    PUBLIC
+target_sources(${CC312_LIB_PREFIX}cc312
+    PRIVATE
         $<$<OR:$<CONFIG:Debug>,$<CONFIG:relwithdebinfo>>:${CMAKE_CURRENT_SOURCE_DIR}/cc312_log.c>
 )
 
 # Adding two targets as link-time dependencies of each other seems bad, but
 # in reality it just means that they'll share headers and compile defs.
-target_link_libraries(crypto_service_cc312
+target_link_libraries(${CC312_LIB_PREFIX}cc312_psa_driver_api
     PRIVATE
         crypto_service_mbedcrypto
     PUBLIC
@@ -165,7 +168,7 @@
 )
 target_link_libraries(crypto_service_mbedcrypto
     PRIVATE
-        crypto_service_cc312
+        ${CC312_LIB_PREFIX}cc312_psa_driver_api
     PUBLIC
         crypto_service_crypto_hw
 )
@@ -181,3 +184,5 @@
         $<$<C_COMPILER_ID:GNU>:-Wno-unused-parameter>
         $<$<C_COMPILER_ID:ARMClang>:-Wno-unused-parameter>
 )
+
+unset(CC312_LIB_PREFIX)
diff --git a/platform/ext/target/arm/corstone1000/CMakeLists.txt b/platform/ext/target/arm/corstone1000/CMakeLists.txt
index 86e825d..16d256b 100644
--- a/platform/ext/target/arm/corstone1000/CMakeLists.txt
+++ b/platform/ext/target/arm/corstone1000/CMakeLists.txt
@@ -49,6 +49,7 @@
         Native_Driver
         partition
         services/include
+    INTERFACE
         cc312
 )
 
@@ -140,6 +141,7 @@
     PUBLIC
         partition
         Device/Include
+    INTERFACE
         cc312
     PRIVATE
         .
diff --git a/platform/ext/target/arm/musca_b1/secure_enclave/CMakeLists.txt b/platform/ext/target/arm/musca_b1/secure_enclave/CMakeLists.txt
index f354911..a70d90e 100644
--- a/platform/ext/target/arm/musca_b1/secure_enclave/CMakeLists.txt
+++ b/platform/ext/target/arm/musca_b1/secure_enclave/CMakeLists.txt
@@ -59,6 +59,7 @@
         mailbox
         ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver
         ${CMAKE_MUSCA_B1_COMMON_DIR}/Libraries
+    INTERFACE
         ${CMAKE_MUSCA_B1_COMMON_DIR}/cc312
 )
 
@@ -120,6 +121,7 @@
         PUBLIC
             partition
             Device/Include
+        INTERFACE
             ${CMAKE_MUSCA_B1_COMMON_DIR}/cc312
         PRIVATE
             .
diff --git a/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt b/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
index ada4238..c5f9c09 100644
--- a/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
+++ b/platform/ext/target/arm/musca_b1/sse_200/CMakeLists.txt
@@ -92,6 +92,7 @@
         ${CMAKE_MUSCA_B1_COMMON_DIR}/Libraries
         ${CMAKE_MUSCA_B1_COMMON_DIR}/Native_Driver
         $<$<BOOL:${FORWARD_PROT_MSG}>:${CMAKE_CURRENT_SOURCE_DIR}/mailbox>
+    INTERFACE
         ${CMAKE_MUSCA_B1_COMMON_DIR}/cc312
 )
 
@@ -194,6 +195,7 @@
         PUBLIC
             partition
             Device/Include
+        INTERFACE
             ${CMAKE_MUSCA_B1_COMMON_DIR}/cc312
         PRIVATE
             .
diff --git a/platform/ext/target/arm/musca_s1/CMakeLists.txt b/platform/ext/target/arm/musca_s1/CMakeLists.txt
index 4f3155b..dde378e 100644
--- a/platform/ext/target/arm/musca_s1/CMakeLists.txt
+++ b/platform/ext/target/arm/musca_s1/CMakeLists.txt
@@ -75,6 +75,7 @@
         partition
         services/include
         Libraries
+    INTERFACE
         cc312
 )
 
@@ -156,6 +157,7 @@
             partition
             Device/Include
             Libraries
+        INTERFACE
             cc312
         PRIVATE
             .
diff --git a/secure_fw/partitions/crypto/CMakeLists.txt b/secure_fw/partitions/crypto/CMakeLists.txt
index 8d731c5..be7031d 100644
--- a/secure_fw/partitions/crypto/CMakeLists.txt
+++ b/secure_fw/partitions/crypto/CMakeLists.txt
@@ -139,7 +139,6 @@
 
 target_compile_definitions(crypto_service_mbedcrypto_config
     INTERFACE
-        BUILD_PSA_DRIVER_API=True
         MBEDTLS_CONFIG_FILE="${TFM_MBEDCRYPTO_CONFIG_PATH}"
         $<$<BOOL:${TFM_MBEDCRYPTO_PLATFORM_EXTRA_CONFIG_PATH}>:MBEDTLS_USER_CONFIG_FILE="${TFM_MBEDCRYPTO_PLATFORM_EXTRA_CONFIG_PATH}">
         PSA_CRYPTO_SECURE