#-------------------------------------------------------------------------------
# Copyright (c) 2022, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#-------------------------------------------------------------------------------


########{{utilities.donotedit_warning}}########

if(TFM_PSA_API)
{% if partition_statistics['ipc_partition_num'] > 0
    and partition_statistics['sfn_partition_num'] == 0 %}
    set(CONFIG_TFM_SPM_BACKEND_IPC ON PARENT_SCOPE)

    if(TFM_ISOLATION_LEVEL GREATER 1)
        set(CONFIG_TFM_PSA_API_SUPERVISOR_CALL ON PARENT_SCOPE)
    else()
        set(CONFIG_TFM_PSA_API_CROSS_CALL ON PARENT_SCOPE)
    endif()
{% elif partition_statistics['sfn_partition_num'] > 0
    and partition_statistics['ipc_partition_num'] == 0 %}
    set(CONFIG_TFM_SPM_BACKEND_SFN ON PARENT_SCOPE)
    set(CONFIG_TFM_PSA_API_SFN_CALL ON PARENT_SCOPE)

    if(TFM_ISOLATION_LEVEL GREATER 1)
        message(FATAL_ERROR "High isolation level SFN model is not supported.")
    endif()
{% elif partition_statistics['sfn_partition_num'] > 0
    and partition_statistics['ipc_partition_num'] > 0 %}
    message(FATAL_ERROR "IPC and SFN co-work not supported yet.")
{% else %}
    message(FATAL_ERROR "Invalid partition number input, check configurations.")
{% endif %}

    if((CONFIG_TFM_FP GREATER 0) AND CONFIG_TFM_SPM_BACKEND_SFN)
        message(FATAL_ERROR "FP is not supported for SFN model.")
    endif()
endif()
