Fix: multiple MbedTLS integration fixes

List of changes:
- prefetched source is ignored by MbedTLS.cmake
  Setting MBEDTLS_SOURCE_DIR does not make MbedTLS.cmake to use the
  externally provided source code. This is because MBEDTLS_SOURCE_DIR
  is not passed to LazyFetch_MakeAvailable().
  As a fix, pass the variable to LazyFetch.
- patch MbedTLS to allow building libmbedcrypto only. This is needed to
  decrease dependencies in yocto.
- allow passing python interpreter location down to MbedTLS build

Change-Id: I25b598e086f5f2af948cd288c2f3faa50bce1cc6
Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
diff --git a/external/MbedTLS/0001-Add-capability-to-build-libmbedcrypto-only.patch b/external/MbedTLS/0001-Add-capability-to-build-libmbedcrypto-only.patch
new file mode 100644
index 0000000..e85634c
--- /dev/null
+++ b/external/MbedTLS/0001-Add-capability-to-build-libmbedcrypto-only.patch
@@ -0,0 +1,126 @@
+From b8d7d8bd3e447d471f56dc95e0315c965f393edd Mon Sep 17 00:00:00 2001
+From: Gyorgy Szing <Gyorgy.Szing@arm.com>
+Date: Tue, 28 Mar 2023 18:20:44 +0200
+Subject: [PATCH 1/1] Add capability to build libmbedcrypto only
+
+Introduce the CRYPTO_ONLY option which configures cmake to build only
+libmbedcrypto.
+
+Upstream-status: Invalid [other]
+  - This is a Trusted Services specific change, there is not intention
+    to upstream this change.
+
+Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
+---
+ library/CMakeLists.txt | 57 +++++++++++++++++++++++++++++-------------
+ 1 file changed, 39 insertions(+), 18 deletions(-)
+
+diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
+index c9714bbfb..d0087c616 100644
+--- a/library/CMakeLists.txt
++++ b/library/CMakeLists.txt
+@@ -2,6 +2,7 @@ option(USE_STATIC_MBEDTLS_LIBRARY "Build mbed TLS static library." ON)
+ option(USE_SHARED_MBEDTLS_LIBRARY "Build mbed TLS shared library." OFF)
+ option(LINK_WITH_PTHREAD "Explicitly link mbed TLS library to pthread." OFF)
+ option(LINK_WITH_TRUSTED_STORAGE "Explicitly link mbed TLS library to trusted_storage." OFF)
++option(CRYPTO_ONLY "Build mbedcrypto linrary only." On)
+
+ # Set the project root directory if it's not already defined, as may happen if
+ # the library folder is included directly by a parent project, without
+@@ -248,18 +249,27 @@ if (USE_STATIC_MBEDTLS_LIBRARY)
+     set(mbedcrypto_static_target ${mbedcrypto_target})
+ endif()
+
+-set(target_libraries ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target})
++set(target_libraries ${mbedcrypto_target})
++
++if (NOT CRYPTO_ONLY)
++    list(APPEND target_libraries ${mbedx509_target} ${mbedtls_target})
++endif()
+
+ if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
+     string(APPEND mbedtls_static_target    "_static")
+     string(APPEND mbedx509_static_target   "_static")
+     string(APPEND mbedcrypto_static_target "_static")
+
++
++    list(APPEND target_libraries
++        ${mbedcrypto_static_target})
++
++if (NOT CRYPTO_ONLY)
+     list(APPEND target_libraries
+-        ${mbedcrypto_static_target}
+         ${mbedx509_static_target}
+         ${mbedtls_static_target})
+ endif()
++endif()
+
+ if(USE_STATIC_MBEDTLS_LIBRARY)
+     add_library(${mbedcrypto_static_target} STATIC ${src_crypto})
+@@ -270,13 +280,15 @@ if(USE_STATIC_MBEDTLS_LIBRARY)
+         target_link_libraries(${mbedcrypto_static_target} PUBLIC everest)
+     endif()
+
+-    add_library(${mbedx509_static_target} STATIC ${src_x509})
+-    set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509)
+-    target_link_libraries(${mbedx509_static_target} PUBLIC ${libs} ${mbedcrypto_static_target})
++    if (NOT CRYPTO_ONLY)
++        add_library(${mbedx509_static_target} STATIC ${src_x509})
++        set_target_properties(${mbedx509_static_target} PROPERTIES OUTPUT_NAME mbedx509)
++        target_link_libraries(${mbedx509_static_target} PUBLIC ${libs} ${mbedcrypto_static_target})
+
+-    add_library(${mbedtls_static_target} STATIC ${src_tls})
+-    set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls)
+-    target_link_libraries(${mbedtls_static_target} PUBLIC ${libs} ${mbedx509_static_target})
++        add_library(${mbedtls_static_target} STATIC ${src_tls})
++        set_target_properties(${mbedtls_static_target} PROPERTIES OUTPUT_NAME mbedtls)
++        target_link_libraries(${mbedtls_static_target} PUBLIC ${libs} ${mbedx509_static_target})
++    endif()
+ endif(USE_STATIC_MBEDTLS_LIBRARY)
+
+ if(USE_SHARED_MBEDTLS_LIBRARY)
+@@ -288,14 +300,15 @@ if(USE_SHARED_MBEDTLS_LIBRARY)
+     if(TARGET everest)
+         target_link_libraries(${mbedcrypto_target} PUBLIC everest)
+     endif()
+-
+-    add_library(${mbedx509_target} SHARED ${src_x509})
+-    set_target_properties(${mbedx509_target} PROPERTIES VERSION 3.3.0 SOVERSION 4)
+-    target_link_libraries(${mbedx509_target} PUBLIC ${libs} ${mbedcrypto_target})
+-
+-    add_library(${mbedtls_target} SHARED ${src_tls})
+-    set_target_properties(${mbedtls_target} PROPERTIES VERSION 3.3.0 SOVERSION 19)
+-    target_link_libraries(${mbedtls_target} PUBLIC ${libs} ${mbedx509_target})
++    if (NOT CRYPTO_ONLY)
++        add_library(${mbedx509_target} SHARED ${src_x509})
++        set_target_properties(${mbedx509_target} PROPERTIES VERSION 3.3.0 SOVERSION 4)
++        target_link_libraries(${mbedx509_target} PUBLIC ${libs} ${mbedcrypto_target})
++
++        add_library(${mbedtls_target} SHARED ${src_tls})
++        set_target_properties(${mbedtls_target} PROPERTIES VERSION 3.3.0 SOVERSION 19)
++        target_link_libraries(${mbedtls_target} PUBLIC ${libs} ${mbedx509_target})
++    endif()
+ endif(USE_SHARED_MBEDTLS_LIBRARY)
+
+ foreach(target IN LISTS target_libraries)
+@@ -320,7 +333,15 @@ endforeach(target)
+
+ set(lib_target "${MBEDTLS_TARGET_PREFIX}lib")
+
+-add_custom_target(${lib_target} DEPENDS ${mbedcrypto_target} ${mbedx509_target} ${mbedtls_target})
++add_custom_target(${lib_target} DEPENDS ${mbedcrypto_target})
++
++if(NOT CRYPTO_ONLY)
++    add_dependencies(${lib_target} ${mbedx509_target} ${mbedtls_target})
++endif()
++
+ if(USE_STATIC_MBEDTLS_LIBRARY AND USE_SHARED_MBEDTLS_LIBRARY)
+-    add_dependencies(${lib_target} ${mbedcrypto_static_target} ${mbedx509_static_target} ${mbedtls_static_target})
++    add_dependencies(${lib_target} ${mbedcrypto_static_target})
++    if(NOT CRYPTO_ONLY)
++        add_dependencies(${lib_target} ${mbedx509_static_target} ${mbedtls_static_target})
++    endif()
+ endif()
+--
+2.39.1.windows.1
+