Revert "Build: fetch_remote_library function to fetch remote libraries."

This reverts commit 2e5af6eb005b6c4e9544bc72e8f4200fbc5651a1.

Reason for revert: git apply logic breaks incremental build.

Change-Id: Iee63ab12f78d76f4f0d21e95d017d7cc6c49d5bb
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d0d6ef2..4d15aea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,9 +7,7 @@
 
 cmake_minimum_required(VERSION 3.15)
 
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
 include(cmake/version.cmake)
-include(remote_library)
 
 ############################ CONFIGURATION #####################################
 
@@ -36,6 +34,8 @@
     Message(FATAL_ERROR "Unsupported generator ${CMAKE_GENERATOR}. Hint: Try -G\"Unix Makefiles\"")
 endif()
 
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+
 ############################### Compiler configuration #########################
 
 #Legacy compat option - load CMAKE_TOOLCHAIN_FILE as a TFM_TOOLCHAIN_FILE
diff --git a/cmake/remote_library.cmake b/cmake/remote_library.cmake
deleted file mode 100644
index b7f07f4..0000000
--- a/cmake/remote_library.cmake
+++ /dev/null
@@ -1,219 +0,0 @@
-#-------------------------------------------------------------------------------
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-3-Clause
-#
-#-------------------------------------------------------------------------------
-
-include(FetchContent)
-set(FETCHCONTENT_QUIET FALSE)
-
-find_package(Git)
-
-# This function applies patches if they are not applied yet.
-# It assumes that patches have not been applied if it's not possible to revert them.
-#
-# WORKING_DIRECTORY - working directory where patches should be applied.
-# PATCH_FILES - list of patches. Patches will be applied in alphabetical order.
-function(apply_patches WORKING_DIRECTORY PATCH_FILES)
-    # Sort list of patches in alphabetical order
-    # So, you can use number prefix to order patches
-    list(SORT PATCH_FILES)
-
-    # Validate if patches are already applied
-    set(EXECUTE_COMMAND "${GIT_EXECUTABLE}" apply --check -R ${PATCH_FILES})
-    execute_process(COMMAND ${EXECUTE_COMMAND}
-        WORKING_DIRECTORY ${WORKING_DIRECTORY}
-        RESULT_VARIABLE ARE_PATCHES_APPLIED
-        ERROR_QUIET
-    )
-
-    if (NOT ARE_PATCHES_APPLIED EQUAL 0)
-        # Git failed to unapply the patches, so we assume that
-        # patches should be applied
-        set(EXECUTE_COMMAND "${GIT_EXECUTABLE}" apply --verbose ${PATCH_FILES})
-        execute_process(COMMAND ${EXECUTE_COMMAND}
-            WORKING_DIRECTORY ${WORKING_DIRECTORY}
-            RESULT_VARIABLE ARE_PATCHES_APPLIED
-            COMMAND_ECHO STDOUT
-        )
-        if (NOT ARE_PATCHES_APPLIED EQUAL 0)
-            message( FATAL_ERROR "Failed to apply patches at ${WORKING_DIRECTORY}" )
-        endif()
-    endif()
-endfunction()
-
-
-# Returns a repository URL and a reference to the commit used to checkout the repository.
-#
-# REPO_URL_VAR - name of variable which receives repository URL.
-# TAG_VAR - name of variable which receives reference to commit.
-function(_get_fetch_remote_properties REPO_URL_VAR TAG_VAR)
-    # Parse arguments
-    set(options "")
-    set(oneValueArgs GIT_REPOSITORY GIT_TAG)
-    set(multiValueArgs "")
-    cmake_parse_arguments(PARSE_ARGV 2 ARG "${options}" "${oneValueArgs}" "${multiValueArgs}")
-
-    if (ARG_GIT_REPOSITORY)
-        set(${REPO_URL_VAR} ${ARG_GIT_REPOSITORY} PARENT_SCOPE)
-        set(${TAG_VAR} ${ARG_GIT_TAG} PARENT_SCOPE)
-    endif()
-endfunction()
-
-
-# This function helps to handle options with an empty string values.
-# There is a feature/bug in CMake that result in problem with the empty string arguments.
-# See https://gitlab.kitware.com/cmake/cmake/-/issues/16341 for details
-#
-# Arguments:
-#   [in]  KEY              - option name
-#   [out]  KEY_VAR         - name of variable that is set to ${KEY} on exit if value is not
-#                            an empty string otherwise to the empty string.
-#   [out]  VALUE_VAR       - name of variable that is set to option value for ${KEY}.
-#   [in/out]  ARG_LIST_VAR - name of variable that holds list of key/value pairs - arguments.
-#                            Function looks for key/value pair specified by ${KEY} variable in
-#                            this list. Function removes key/value pair specified by ${KEY} on
-#                            exit.
-#
-# Example #1:
-#   # We have following key/options:
-#   #  GIT_SUBMODULES  ""
-#   #  BOO  "abc"
-#   #  HEY  "hi"
-#   set(ARGS    GIT_SUBMODULES "" BOO "abc" HEY "hi")
-#   # Extract key/value for option "GIT_SUBMODULES"
-#   extract_key_value(GIT_SUBMODULES GIT_SUBMODULES_VAR GIT_SUBMODULES_VALUE_VAR ARGS)
-#   # ${GIT_SUBMODULES_VAR} is equal to ""
-#   # ${GIT_SUBMODULES_VALUE_VAR} is equal to ""
-#
-# Example #2:
-#   # We have following key/options:
-#   #  GIT_SUBMODULES  "name"
-#   #  BOO  "abc"
-#   #  HEY  "hi"
-#   set(ARGS    GIT_SUBMODULES "name" BOO "abc" HEY "hi")
-#   # Extract key/value for option "GIT_SUBMODULES"
-#   extract_key_value(GIT_SUBMODULES GIT_SUBMODULES_VAR GIT_SUBMODULES_VALUE_VAR ARGS)
-#   # ${GIT_SUBMODULES_VAR} is equal to "GIT_SUBMODULES"
-#   # ${GIT_SUBMODULES_VALUE_VAR} is equal to "name"
-function(extract_key_value KEY KEY_VAR VALUE_VAR ARG_LIST_VAR)
-    list(FIND ${ARG_LIST_VAR} ${KEY} KEY_INDEX)
-    if(${KEY_INDEX} GREATER_EQUAL 0)
-        # Variable has been set, remove KEY
-        list(REMOVE_AT ${ARG_LIST_VAR} ${KEY_INDEX})
-
-        # Validate that there is an option value in the list of arguments
-        list(LENGTH ${ARG_LIST_VAR} ARG_LIST_LENGTH)
-        if(${KEY_INDEX} GREATER_EQUAL ${ARG_LIST_LENGTH})
-            message(FATAL_ERROR "Missing option value for ${KEY}")
-        endif()
-
-        # Get value
-        list(GET ${ARG_LIST_VAR} ${KEY_INDEX} VALUE)
-
-        # Remove value in the list
-        list(REMOVE_AT ${ARG_LIST_VAR} ${KEY_INDEX})
-
-        # Update argument list
-        set(${ARG_LIST_VAR} ${${ARG_LIST_VAR}} PARENT_SCOPE)
-
-        # Set KEY_VAR & VALUE_VAR
-        set(${KEY_VAR} ${KEY} PARENT_SCOPE)
-        set(${VALUE_VAR} ${VALUE} PARENT_SCOPE)
-    else()
-        # Variable is not defined, set KEY_VAR & VALUE_VAR to empty strings
-        set(${KEY_VAR} "" PARENT_SCOPE)
-        set(${VALUE_VAR} "" PARENT_SCOPE)
-    endif()
-endfunction()
-
-
-# This function allows to fetch library from a remote repository or use a local
-# library copy.
-#
-# You can specify location of directory with patches. Patches are applied in
-# alphabetical order.
-#
-# Arguments:
-# [in]     LIB_NAME <name> - library name
-# [in/out] LIB_SOURCE_PATH_VAR <var> - name of variable which holds path to library source
-#           or "DOWNLOAD" if sources should be fetched from the remote repository. This
-#           variable is updated in case if library is downloaded. It will point
-#           to the path where FetchContent_Populate will locate local library copy.
-# [out]    LIB_BINARY_PATH_VAR <var> - optional name of variable which is updated to
-#           directory intended for use as a corresponding build directory if
-#           library is fetched from the remote repository.
-# [in]     LIB_BASE_DIR <path>  - is used to set FETCHCONTENT_BASE_DIR.
-# [in]     LIB_PATCH_DIR <path> - optional path to local folder which contains patches
-#           that should be applied.
-# [in]     GIT_REPOSITORY, GIT_TAG, ... - see https://cmake.org/cmake/help/latest/module/ExternalProject.html
-#           for more details
-#
-# This function set CMP0097 to NEW if CMAKE_VERSION is greater or equal than 3.18.0.
-# Because of https://gitlab.kitware.com/cmake/cmake/-/issues/20579 CMP0097 is
-# non-functional until cmake 3.18.0.
-# See https://cmake.org/cmake/help/latest/policy/CMP0097.html for more info.
-function(fetch_remote_library)
-    # Parse arguments
-    set(options "")
-    set(oneValueArgs LIB_NAME LIB_SOURCE_PATH_VAR LIB_BINARY_PATH_VAR LIB_BASE_DIR LIB_PATCH_DIR)
-    set(multiValueArgs FETCH_CONTENT_ARGS)
-    cmake_parse_arguments(PARSE_ARGV 0 ARG "${options}" "${oneValueArgs}" "${multiValueArgs}")
-
-    if(ARG_LIB_BASE_DIR)
-        set(FETCHCONTENT_BASE_DIR "${ARG_LIB_BASE_DIR}")
-    endif()
-
-    # Set to not download submodules if that option is available
-    if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.18.0")
-        cmake_policy(SET CMP0097 NEW)
-    endif()
-
-    if ("${${ARG_LIB_SOURCE_PATH_VAR}}" STREQUAL "DOWNLOAD")
-        # Process arguments which can be an empty string
-        # There is a feature/bug in CMake that result in problem with empty string arguments
-        # See https://gitlab.kitware.com/cmake/cmake/-/issues/16341 for details
-        extract_key_value(GIT_SUBMODULES GIT_SUBMODULES GIT_SUBMODULES_VALUE ARG_FETCH_CONTENT_ARGS)
-
-        # Validate that there is no empty arguments to FetchContent_Declare
-        LIST(FIND ARG_FETCH_CONTENT_ARGS "" EMPTY_VALUE_INDEX)
-        if(${EMPTY_VALUE_INDEX} GREATER_EQUAL 0)
-            # There is an unsupported empty string argument, FATAL ERROR!
-            math(EXPR EMPTY_KEY_INDEX "${EMPTY_VALUE_INDEX} - 1")
-            list(GET ARG_FETCH_CONTENT_ARGS ${EMPTY_KEY_INDEX} EMPTY_KEY)
-            # TODO: Use extract_key_value if you have argument with empty value (see GIT_SUBMODULES above)
-            message(FATAL_ERROR "fetch_remote_library: Unexpected empty string value for ${EMPTY_KEY}. "
-                                "Please, validate arguments or update fetch_remote_library to support empty value for ${EMPTY_KEY}!!!")
-        endif()
-
-        # Content fetching
-        FetchContent_Declare(${ARG_LIB_NAME}
-            ${ARG_FETCH_CONTENT_ARGS}
-            "${GIT_SUBMODULES}"      "${GIT_SUBMODULES_VALUE}"
-        )
-
-        FetchContent_GetProperties(${ARG_LIB_NAME})
-        if(NOT ${ARG_LIB_NAME}_POPULATED)
-            FetchContent_Populate(${ARG_LIB_NAME})
-
-            # Get remote properties
-            _get_fetch_remote_properties(REPO_URL_VAR TAG_VAR ${ARG_FETCH_CONTENT_ARGS})
-            set(${ARG_LIB_SOURCE_PATH_VAR} ${${ARG_LIB_NAME}_SOURCE_DIR} CACHE PATH "Library has been downloaded from \"${REPO_URL_VAR}\", tag \"${TAG_VAR}\"" FORCE)
-            if (DEFINED ARG_LIB_BINARY_PATH_VAR)
-                set(${ARG_LIB_BINARY_PATH_VAR} ${${ARG_LIB_NAME}_BINARY_DIR} CACHE PATH "Path to build directory of \"${ARG_LIB_NAME}\"")
-            endif()
-        endif()
-    endif()
-
-    if (ARG_LIB_PATCH_DIR)
-        # look for patch files
-        file(GLOB PATCH_FILES "${ARG_LIB_PATCH_DIR}/*.patch")
-
-        if(PATCH_FILES)
-            # Apply patches for existing sources
-            apply_patches("${${ARG_LIB_SOURCE_PATH_VAR}}" "${PATCH_FILES}")
-        endif()
-    endif()
-endfunction()
diff --git a/lib/ext/mbedcrypto/CMakeLists.txt b/lib/ext/mbedcrypto/CMakeLists.txt
index 9316aca..9a0340a 100644
--- a/lib/ext/mbedcrypto/CMakeLists.txt
+++ b/lib/ext/mbedcrypto/CMakeLists.txt
@@ -1,20 +1,44 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2020, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                mbedcrypto
-    LIB_SOURCE_PATH_VAR     MBEDCRYPTO_PATH
-    LIB_PATCH_DIR           ${CMAKE_CURRENT_LIST_DIR}
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      ${MBEDCRYPTO_GIT_REMOTE}
-        GIT_TAG             ${MBEDCRYPTO_VERSION}
-        GIT_SHALLOW         TRUE
-        GIT_PROGRESS        TRUE
-        GIT_SUBMODULES      ""
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${MBEDCRYPTO_PATH}" STREQUAL "DOWNLOAD")
+    find_package(Git)
+    file(GLOB PATCH_FILES *.patch)
+
+    if (PATCH_FILES)
+        FetchContent_Declare(mbedcrypto
+            GIT_REPOSITORY ${MBEDCRYPTO_GIT_REMOTE}
+            GIT_TAG ${MBEDCRYPTO_VERSION}
+            GIT_SHALLOW TRUE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+            PATCH_COMMAND ${GIT_EXECUTABLE} apply ${PATCH_FILES}
+        )
+    else()
+        FetchContent_Declare(mbedcrypto
+            GIT_REPOSITORY ${MBEDCRYPTO_GIT_REMOTE}
+            GIT_TAG ${MBEDCRYPTO_VERSION}
+            GIT_SHALLOW TRUE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+        )
+    endif()
+
+    FetchContent_GetProperties(mbedcrypto)
+    if(NOT mbedcrypto_POPULATED)
+        FetchContent_Populate(mbedcrypto)
+        set(MBEDCRYPTO_PATH ${mbedcrypto_SOURCE_DIR} CACHE PATH "Path to mbed-crypto (or DOWNLOAD to get automatically" FORCE)
+    endif()
+endif()
diff --git a/lib/ext/mcuboot/CMakeLists.txt b/lib/ext/mcuboot/CMakeLists.txt
index a1a0242..03f888e 100644
--- a/lib/ext/mcuboot/CMakeLists.txt
+++ b/lib/ext/mcuboot/CMakeLists.txt
@@ -1,28 +1,38 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2020, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available.
 # Because of https://gitlab.kitware.com/cmake/cmake/-/issues/20579 CMP0097 is
 # non-functional until cmake 3.18.0.
-if(${CMAKE_VERSION} VERSION_LESS "3.18.0")
-    # Workaround for not having CMP0097. Use existing directory.
-    set(MCUBOOT_SUBMODULES "docs")
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.18.0")
+    cmake_policy(SET CMP0097 NEW)
+    set(MCUBOOT_SUBMODULES "")
+else()
+    # Workaround for not having CMP0097. Fetch the smallest submodule.
+    set(MCUBOOT_SUBMODULES "boot/cypress/libs/cy-mbedtls-acceleration/")
 endif()
 
-fetch_remote_library(
-    LIB_NAME                mcuboot
-    LIB_SOURCE_PATH_VAR     MCUBOOT_PATH
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://github.com/mcu-tools/mcuboot.git
-        GIT_TAG             ${MCUBOOT_VERSION}
-        # ToDo: set GIT_SHALLOW to 'TRUE' when MCUBOOT_VERSION will be set to a tag
-        # (instead of a commit hash) with the new release.
-        GIT_SHALLOW         FALSE
-        GIT_PROGRESS        TRUE
-        GIT_SUBMODULES      "${MCUBOOT_SUBMODULES}"
-)
+if ("${MCUBOOT_PATH}" STREQUAL "DOWNLOAD")
+    FetchContent_Declare(mcuboot
+        GIT_REPOSITORY https://github.com/mcu-tools/mcuboot.git
+        GIT_TAG ${MCUBOOT_VERSION}
+        GIT_SHALLOW FALSE
+        GIT_PROGRESS TRUE
+        GIT_SUBMODULES "${MCUBOOT_SUBMODULES}"
+    )
+    # ToDo: set GIT_SHALLOW to 'TRUE' when MCUBOOT_VERSION will be set to a tag
+    # (instead of a commit hash) with the new release.
+
+    FetchContent_GetProperties(mcuboot)
+    if(NOT mcuboot_POPULATED)
+        FetchContent_Populate(mcuboot)
+        set(MCUBOOT_PATH ${mcuboot_SOURCE_DIR} CACHE PATH "Path to MCUBOOT (or DOWNLOAD to get automatically" FORCE)
+    endif()
+endif()
diff --git a/lib/ext/psa-adac/CMakeLists.txt b/lib/ext/psa-adac/CMakeLists.txt
index 25038c9..c79eeb5 100644
--- a/lib/ext/psa-adac/CMakeLists.txt
+++ b/lib/ext/psa-adac/CMakeLists.txt
@@ -1,20 +1,31 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2021, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                libpsaadac
-    LIB_SOURCE_PATH_VAR     PLATFORM_PSA_ADAC_SOURCE_PATH
-    LIB_BINARY_PATH_VAR     PLATFORM_PSA_ADAC_BUILD_PATH
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://git.trustedfirmware.org/shared/psa-adac.git
-        GIT_TAG             ${PLATFORM_PSA_ADAC_VERSION}
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${PLATFORM_PSA_ADAC_SOURCE_PATH}" STREQUAL "DOWNLOAD")
+    FetchContent_Declare(libpsaadac
+        GIT_REPOSITORY https://git.trustedfirmware.org/shared/psa-adac.git
+        GIT_TAG ${PLATFORM_PSA_ADAC_VERSION}
+    )
+
+    FetchContent_GetProperties(libpsaadac)
+    if (NOT libpsaadac_POPULATED)
+        FetchContent_Populate(libpsaadac)
+        set(PLATFORM_PSA_ADAC_SOURCE_PATH ${libpsaadac_SOURCE_DIR} CACHE PATH "Path to source directory of psa-adac." FORCE)
+        set(PLATFORM_PSA_ADAC_BUILD_PATH ${libpsaadac_BINARY_DIR} CACHE PATH "Path to build directory of psa-adac.")
+    endif ()
+endif ()
 
 
 set(PSA_ADAC_TARGET "trusted-firmware-m")
diff --git a/lib/ext/psa_arch_tests/CMakeLists.txt b/lib/ext/psa_arch_tests/CMakeLists.txt
index f98fdfa..cb51a71 100644
--- a/lib/ext/psa_arch_tests/CMakeLists.txt
+++ b/lib/ext/psa_arch_tests/CMakeLists.txt
@@ -1,20 +1,44 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2020, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                psa_arch_tests
-    LIB_SOURCE_PATH_VAR     PSA_ARCH_TESTS_PATH
-    LIB_PATCH_DIR           ${CMAKE_CURRENT_LIST_DIR}
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://github.com/ARM-software/psa-arch-tests.git
-        GIT_TAG             ${PSA_ARCH_TESTS_VERSION}
-        GIT_SHALLOW         FALSE
-        GIT_PROGRESS        TRUE
-        GIT_SUBMODULES      ""
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+#Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${PSA_ARCH_TESTS_PATH}" STREQUAL "DOWNLOAD")
+    find_package(Git)
+    file(GLOB PATCH_FILES *.patch)
+
+    if (PATCH_FILES)
+        FetchContent_Declare(psa_arch_tests
+            GIT_REPOSITORY https://github.com/ARM-software/psa-arch-tests.git
+            GIT_TAG ${PSA_ARCH_TESTS_VERSION}
+            GIT_SHALLOW FALSE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+            PATCH_COMMAND ${GIT_EXECUTABLE} apply ${PATCH_FILES}
+        )
+    else()
+        FetchContent_Declare(psa_arch_tests
+            GIT_REPOSITORY https://github.com/ARM-software/psa-arch-tests.git
+            GIT_TAG ${PSA_ARCH_TESTS_VERSION}
+            GIT_SHALLOW FALSE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+        )
+    endif()
+
+    FetchContent_GetProperties(psa_arch_tests)
+    if(NOT psa_arch_tests_POPULATED)
+        FetchContent_Populate(psa_arch_tests)
+        set(PSA_ARCH_TESTS_PATH ${psa_arch_tests_SOURCE_DIR} CACHE PATH "Path to PSA_ARCH_TESTS (or DOWNLOAD to get automatically" FORCE)
+    endif()
+endif()
diff --git a/lib/ext/tf-m-tests/fetch_repo.cmake b/lib/ext/tf-m-tests/fetch_repo.cmake
index a2a12bd..593ff1d 100644
--- a/lib/ext/tf-m-tests/fetch_repo.cmake
+++ b/lib/ext/tf-m-tests/fetch_repo.cmake
@@ -1,12 +1,15 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2020-2022, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
 # If NS app, secure regression test or non-secure regression test is enabled,
 # fetch tf-m-tests repo.
 # The conditiions are actually overlapped but it can make the logic more clear.
@@ -16,15 +19,24 @@
     # Set tf-m-tests repo config
     include(${CMAKE_SOURCE_DIR}/lib/ext/tf-m-tests/repo_config_default.cmake)
 
-    fetch_remote_library(
-        LIB_NAME                tfm_test_repo
-        LIB_SOURCE_PATH_VAR     TFM_TEST_REPO_PATH
-        LIB_BASE_DIR            "${CMAKE_BINARY_DIR}/lib/ext"
-        FETCH_CONTENT_ARGS
-            GIT_REPOSITORY      https://git.trustedfirmware.org/TF-M/tf-m-tests.git
-            GIT_TAG             ${TFM_TEST_REPO_VERSION}
+    include(FetchContent)
+    set(FETCHCONTENT_QUIET FALSE)
+
+    set(FETCHCONTENT_BASE_DIR ${CMAKE_BINARY_DIR}/lib/ext CACHE STRING "" FORCE)
+
+    if ("${TFM_TEST_REPO_PATH}" STREQUAL "DOWNLOAD")
+        FetchContent_Declare(tfm_test_repo
+            GIT_REPOSITORY https://git.trustedfirmware.org/TF-M/tf-m-tests.git
+            GIT_TAG ${TFM_TEST_REPO_VERSION}
             GIT_PROGRESS TRUE
-    )
+        )
+
+        FetchContent_GetProperties(tfm_test_repo)
+        if(NOT tfm_test_repo_POPULATED)
+            FetchContent_Populate(tfm_test_repo)
+            set(TFM_TEST_REPO_PATH ${tfm_test_repo_SOURCE_DIR} CACHE PATH "Path to TFM-TEST repo (or DOWNLOAD to fetch automatically" FORCE)
+        endif()
+    endif()
 
     if ("${CMSIS_5_PATH}" STREQUAL DOWNLOAD)
         set(CMSIS_5_PATH ${TFM_TEST_REPO_PATH}/CMSIS CACHE PATH "Path to CMSIS_5 (or DOWNLOAD to fetch automatically" FORCE)
diff --git a/platform/ext/target/arm/corstone1000/openamp/ext/libmetal/CMakeLists.txt b/platform/ext/target/arm/corstone1000/openamp/ext/libmetal/CMakeLists.txt
index 0bb89e9..9fab53f 100644
--- a/platform/ext/target/arm/corstone1000/openamp/ext/libmetal/CMakeLists.txt
+++ b/platform/ext/target/arm/corstone1000/openamp/ext/libmetal/CMakeLists.txt
@@ -1,17 +1,29 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2021, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                libmetal
-    LIB_SOURCE_PATH_VAR     LIBMETAL_SRC_PATH
-    LIB_BINARY_PATH_VAR     LIBMETAL_BIN_PATH
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://github.com/OpenAMP/libmetal.git
-        GIT_TAG             ${LIBMETAL_VERSION}
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${LIBMETAL_SRC_PATH}" STREQUAL "DOWNLOAD")
+    FetchContent_Declare(libmetal
+        GIT_REPOSITORY https://github.com/OpenAMP/libmetal.git
+        GIT_TAG ${LIBMETAL_VERSION}
+    )
+
+    FetchContent_GetProperties(libmetal)
+    if (NOT libmetal_POPULATED)
+        FetchContent_Populate(libmetal)
+        set(LIBMETAL_BIN_PATH ${libmetal_BINARY_DIR} CACHE PATH "Path to Libmetal (or DOWNLOAD to get automatically")
+        set(LIBMETAL_SRC_PATH ${libmetal_SOURCE_DIR} CACHE PATH "Path to Libmetal (or DOWNLOAD to get automatically" FORCE)
+    endif ()
+endif ()
+
diff --git a/platform/ext/target/arm/corstone1000/openamp/ext/libopenamp/CMakeLists.txt b/platform/ext/target/arm/corstone1000/openamp/ext/libopenamp/CMakeLists.txt
index d6590a1..9b1602a 100644
--- a/platform/ext/target/arm/corstone1000/openamp/ext/libopenamp/CMakeLists.txt
+++ b/platform/ext/target/arm/corstone1000/openamp/ext/libopenamp/CMakeLists.txt
@@ -1,17 +1,29 @@
 #-------------------------------------------------------------------------------
 # Copyright (c) 2020-2021, Arm Limited. All rights reserved.
-# Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                libopenamp
-    LIB_SOURCE_PATH_VAR     LIBOPENAMP_SRC_PATH
-    LIB_BINARY_PATH_VAR     LIBOPENAMP_BIN_PATH
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://github.com/OpenAMP/open-amp.git
-        GIT_TAG             ${OPENAMP_VERSION}
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${LIBOPENAMP_SRC_PATH}" STREQUAL "DOWNLOAD")
+    FetchContent_Declare(libopenamp
+        GIT_REPOSITORY https://github.com/OpenAMP/open-amp.git
+        GIT_TAG ${OPENAMP_VERSION}
+    )
+
+    FetchContent_GetProperties(libopenamp)
+    if (NOT libopenamp_POPULATED)
+        FetchContent_Populate(libopenamp)
+        set(LIBOPENAMP_BIN_PATH ${libopenamp_BINARY_DIR} CACHE PATH "Path to Libopenamp (or DOWNLOAD to get automatically")
+        set(LIBOPENAMP_SRC_PATH ${libopenamp_SOURCE_DIR} CACHE PATH "Path to Libopenamp (or DOWNLOAD to get automatically" FORCE)
+    endif ()
+endif ()
+
diff --git a/platform/ext/target/cypress/psoc64/libs/mtb-pdl-cat1/CMakeLists.txt b/platform/ext/target/cypress/psoc64/libs/mtb-pdl-cat1/CMakeLists.txt
index ecae071..7e2e457 100644
--- a/platform/ext/target/cypress/psoc64/libs/mtb-pdl-cat1/CMakeLists.txt
+++ b/platform/ext/target/cypress/psoc64/libs/mtb-pdl-cat1/CMakeLists.txt
@@ -1,22 +1,47 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2020-2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+# Copyright (c) 2020-2022, Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                mtb-pdl-cat1
-    LIB_SOURCE_PATH_VAR     CY_MTB_PDL_CAT1_LIB_PATH
-    LIB_PATCH_DIR           ${CMAKE_CURRENT_LIST_DIR}
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://github.com/Infineon/mtb-pdl-cat1.git
-        GIT_TAG             ${CY_MTB_PDL_CAT1_LIB_VERSION}
-        GIT_SHALLOW         TRUE
-        GIT_PROGRESS        TRUE
-        GIT_SUBMODULES      ""
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${CY_MTB_PDL_CAT1_LIB_PATH}" STREQUAL "DOWNLOAD")
+    find_package(Git)
+    file(GLOB PATCH_FILES *.patch)
+
+    if (PATCH_FILES)
+        FetchContent_Declare(mtb-pdl-cat1
+            GIT_REPOSITORY https://github.com/Infineon/mtb-pdl-cat1.git
+            GIT_TAG ${CY_MTB_PDL_CAT1_LIB_VERSION}
+            GIT_SHALLOW TRUE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+            PATCH_COMMAND ${GIT_EXECUTABLE} apply ${PATCH_FILES}
+        )
+    else()
+        FetchContent_Declare(mtb-pdl-cat1
+            GIT_REPOSITORY https://github.com/Infineon/mtb-pdl-cat1.git
+            GIT_TAG ${CY_MTB_PDL_CAT1_LIB_VERSION}
+            GIT_SHALLOW TRUE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+        )
+    endif()
+
+    FetchContent_GetProperties(mtb-pdl-cat1)
+    if(NOT mtb-pdl-cat1_POPULATED)
+        FetchContent_Populate(mtb-pdl-cat1)
+        set(CY_MTB_PDL_CAT1_LIB_PATH ${mtb-pdl-cat1_SOURCE_DIR} CACHE PATH "Path to mtb-pdl-cat1 (or DOWNLOAD to get automatically" FORCE)
+    endif()
+endif()
 
 #-------------------------------------------------------------------------------
 
diff --git a/platform/ext/target/cypress/psoc64/libs/p64_utils/CMakeLists.txt b/platform/ext/target/cypress/psoc64/libs/p64_utils/CMakeLists.txt
index 81667e4..e63c6b5 100644
--- a/platform/ext/target/cypress/psoc64/libs/p64_utils/CMakeLists.txt
+++ b/platform/ext/target/cypress/psoc64/libs/p64_utils/CMakeLists.txt
@@ -1,22 +1,48 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2021-2022 Cypress Semiconductor Corporation (an Infineon company)
-# or an affiliate of Cypress Semiconductor Corporation. All rights reserved.
+# Copyright (c) 2021-2022, Cypress Semiconductor Corporation. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
 #-------------------------------------------------------------------------------
 
-fetch_remote_library(
-    LIB_NAME                p64_utils
-    LIB_SOURCE_PATH_VAR     CY_P64_UTILS_LIB_PATH
-    LIB_PATCH_DIR           ${CMAKE_CURRENT_LIST_DIR}
-    FETCH_CONTENT_ARGS
-        GIT_REPOSITORY      https://github.com/Infineon/p64_utils.git
-        GIT_TAG             ${CY_P64_UTILS_LIB_VERSION}
-        GIT_SHALLOW         TRUE
-        GIT_PROGRESS        TRUE
-        GIT_SUBMODULES      ""
-)
+include(FetchContent)
+set(FETCHCONTENT_QUIET FALSE)
+
+# Set to not download submodules if that option is available
+if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0")
+    cmake_policy(SET CMP0097 NEW)
+endif()
+
+if ("${CY_P64_UTILS_LIB_PATH}" STREQUAL "DOWNLOAD")
+    find_package(Git)
+    file(GLOB PATCH_FILES *.patch)
+
+    if (PATCH_FILES)
+        FetchContent_Declare(p64_utils
+            GIT_REPOSITORY https://github.com/Infineon/p64_utils.git
+            GIT_TAG ${CY_P64_UTILS_LIB_VERSION}
+            GIT_SHALLOW TRUE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+            PATCH_COMMAND ${GIT_EXECUTABLE} apply ${PATCH_FILES}
+        )
+    else()
+        FetchContent_Declare(p64_utils
+            GIT_REPOSITORY https://github.com/Infineon/p64_utils.git
+            GIT_TAG ${CY_P64_UTILS_LIB_VERSION}
+            GIT_SHALLOW TRUE
+            GIT_PROGRESS TRUE
+            GIT_SUBMODULES ""
+        )
+    endif()
+
+    FetchContent_GetProperties(p64_utils)
+    if(NOT p64_utils_POPULATED)
+        FetchContent_Populate(p64_utils)
+        set(CY_P64_UTILS_LIB_PATH ${p64_utils_SOURCE_DIR} CACHE PATH "Path to p64_utils repo (or DOWNLOAD to fetch automatically" FORCE)
+    endif()
+
+endif()
 
 #-------------------------------------------------------------------------------