# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

LOCAL_DIR := $(GET_LOCAL_DIR)

$(warning *****************************)
$(warning TZ_PROVIDER : $(TZ_PROVIDER))
$(warning TZ_CHIPSET : $(TZ_CHIPSET))
$(warning CHIP_VENDOR : $(CHIP_VENDOR))
$(warning USE_SCRYPTO : $(USE_SCRYPTO))
$(warning SCRYPTO_VER : $(SCRYPTO_VER))
$(warning USE_GRDM : $(USE_GRDM))
$(warning USE_QUICKBUILD_RBS : $(USE_QUICKBUILD_RBS))
$(warning SUPPORT_NEW_TA_BUILD : $(SUPPORT_NEW_TA_BUILD))
$(warning *****************************)

#MODULE_CFLAGS += -DDEBUG_LOW
#MODULE_CFLAGS += -DSCP11_ENABLE
#MODULE_CFLAGS += -DLOW_SPI_TEST
#MODULE_CFLAGS += -DEXTENDED_APDU

MODULE := $(LOCAL_DIR)

MODULE_DEPS += \
    app/trusty \

MODULE_DEPS_STATIC += \
    libc \
    libc-trusty \
    libstdc++-trusty \
    gptee \
    openssl-engine \
    openssl-stubs \
    openssl \
    storage \
    rng

MODULE_INCLUDES += \
    $(LOCAL_DIR) \
    $(LOCAL_DIR)/include

MODULE_CFLAGS += -ggdb -s -w

MODULE_CFLAGS += \
	-DSWD \
    -DUSE_TRUSTY_UNISOC

ifeq ($(ARCH),arm64)
MODULE_CFLAGS += -DARM64
else
MODULE_CFLAGS += -DARM32
endif

ifeq ($(USE_GRDM),True)
MODULE_CFLAGS += -DUSE_GRDM
endif

UPPER_TZ_CHIPSET := $(shell echo $(TZ_CHIPSET) | tr [a-z] [A-Z])
MODULE_CFLAGS += \
    -D$(UPPER_TZ_CHIPSET)

ifeq ($(USE_SCRYPTO),True)
MODULE_CFLAGS += -DUSE_SCRYPTO
LIBS += $(SCRYPTO_LIB_FILE)
endif

ifeq ($(CHIP_VENDOR),gem)
MODULE_CFLAGS += \
    -DGEM
endif

ifeq ($(CHIP_VENDOR),gem51)
MODULE_CFLAGS += \
    -DGEM \
    -DGEM51
endif

ifeq ($(CHIP_VENDOR),gem60)
MODULE_CFLAGS += \
    -DGEM \
    -DGEM60
endif

ifeq ($(CHIP_VENDOR),nxpV4)
MODULE_CFLAGS += \
    -DNXP \
    -DNXPV4
endif

ifeq ($(CHIP_VENDOR),common)
MODULE_CFLAGS += \
    -DNXP \
    -DNXPV4 \
    -DGEM \
    -DCOMMON_VENDOR
endif

MODULE_CFLAGS += -DLCCM_SPI
#-------------------------------------------------------------------------------
# ISO7816
#-------------------------------------------------------------------------------
# Common
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/iso7816

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/iso7816/sec_apdu.c \
    $(LOCAL_DIR)/src/common/iso7816/iso7816_self_test.c

# NXP V4 dependencies
ifeq ($(CHIP_VENDOR),nxpV4)
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/iso7816/nxpV4/common \
    $(LOCAL_DIR)/include/iso7816/nxpV4/inc \
    $(LOCAL_DIR)/include/iso7816/nxpV4/include \
    $(LOCAL_DIR)/include/iso7816/nxpV4/lib \
    $(LOCAL_DIR)/include/iso7816/nxpV4/log \
    $(LOCAL_DIR)/include/iso7816/nxpV4/pal \
    $(LOCAL_DIR)/include/iso7816/nxpV4/pal/spi

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEse_Apdu_Api.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEse_Api.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEseDataMgr.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEseProto7816_3.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/log/phNxpLog.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/pal/phNxpEsePal.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/pal/spi/phNxpEsePal_spi.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/sec_mw.c
endif

# GEMALTO dependencies
ifeq ($(CHIP_VENDOR),$(filter $(CHIP_VENDOR),gem gem51 gem60))
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/iso7816/gem \
    $(LOCAL_DIR)/src/common/iso7816/gem

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/iso7816/gem/checksum.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/gto-secese.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/iso7816_t1.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/transport.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/sec_mw.c
endif

# COMMON ISO7816
ifeq ($(CHIP_VENDOR),common)
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/iso7816/nxpV4/common \
    $(LOCAL_DIR)/include/iso7816/nxpV4/inc \
    $(LOCAL_DIR)/include/iso7816/nxpV4/include \
    $(LOCAL_DIR)/include/iso7816/nxpV4/lib \
    $(LOCAL_DIR)/include/iso7816/nxpV4/log \
    $(LOCAL_DIR)/include/iso7816/nxpV4/pal \
    $(LOCAL_DIR)/include/iso7816/nxpV4/pal/spi \
    $(LOCAL_DIR)/include/iso7816/gem \
    $(LOCAL_DIR)/src/common/iso7816/gem

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEse_Apdu_Api.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEse_Api.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEseDataMgr.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/lib/phNxpEseProto7816_3.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/log/phNxpLog.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/pal/phNxpEsePal.c \
    $(LOCAL_DIR)/src/common/iso7816/nxpV4/pal/spi/phNxpEsePal_spi.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/checksum.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/gto-secese.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/iso7816_t1.c \
    $(LOCAL_DIR)/src/common/iso7816/gem/transport.c \
    $(LOCAL_DIR)/src/common/iso7816/common/sec_mw.c
endif

#-------------------------------------------------------------------------------
# CRYPTO
#-------------------------------------------------------------------------------
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/crypto \
    $(LOCAL_DIR)/src/common

MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/crypto/scrypto/$(SCRYPTO_VER)

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/crypto/platform/trusty_unisoc.c \
    $(LOCAL_DIR)/src/common/crypto/crypto_module.c \
    $(LOCAL_DIR)/src/common/crypto/openssl/ec/ec_print.c

#-------------------------------------------------------------------------------
# SSPM
#-------------------------------------------------------------------------------
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/sspm

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/sspm/ssp_apdu.c \
    $(LOCAL_DIR)/src/common/sspm/ssp_service.c \
    $(LOCAL_DIR)/src/common/sspm/ssp_session.c \
    $(LOCAL_DIR)/src/common/sspm/ssp_util.c \
    $(LOCAL_DIR)/src/common/sspm/ssp.c \
    $(LOCAL_DIR)/src/common/sspm/ssp_self_test.c

#-------------------------------------------------------------------------------
# SSEM
#-------------------------------------------------------------------------------
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/ssem

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/ssem/sse_entry_manage.c \
    $(LOCAL_DIR)/src/common/ssem/sse_entry_manage_util.c \
    $(LOCAL_DIR)/src/common/ssem/sse.c

#-------------------------------------------------------------------------------
# SCP03
#-------------------------------------------------------------------------------
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/scp03 \

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/scp03/GPCmd.c \
    $(LOCAL_DIR)/src/common/scp03/SCP03_cmdGenerator.c \
    $(LOCAL_DIR)/src/common/scp03/SCP03_crypto.c \
    $(LOCAL_DIR)/src/common/scp03/SCP03_kdf.c \
    $(LOCAL_DIR)/src/common/scp03/SCP03_rspParser.c \
    $(LOCAL_DIR)/src/common/scp03/SCP03_tools.c \
    $(LOCAL_DIR)/src/common/scp03/SCP03_transceive.c

#SCP03_TEST_FEATURE = true
SCP03_TEST_FEATURE = false
ifeq ($(SCP03_TEST_FEATURE),true)
$(warning ########### SCP03_TEST_FEATURE enabled ########### )
MODULE_CFLAGS += -DSCP03_TEST
MODULE_SRCS += $(LOCAL_DIR)/src/common/scp03/SCP03_test.c
else
$(warning SCP03_TEST_FEATURE disabled)
endif
#-------------------------------------------------------------------------------
# SCP11
#-------------------------------------------------------------------------------
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/scp11 \

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/scp11/SCP11_main.c \
    $(LOCAL_DIR)/src/common/scp11/SCP11_crypto.c \
    $(LOCAL_DIR)/src/common/scp11/SCP11_transceive.c \
    $(LOCAL_DIR)/src/common/scp11/SCP11_tool.c \
    $(LOCAL_DIR)/src/common/scp11/SCP11_test.c

#-------------------------------------------------------------------------------
# GRDM
#-------------------------------------------------------------------------------
ifeq ($(USE_GRDM),True)
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include/grdm \
    $(LOCAL_DIR)/include/grdm/common/hal \
    $(LOCAL_DIR)/include/grdm/common/inc \
    $(LOCAL_DIR)/include/grdm/common/src \
    $(LOCAL_DIR)/include/grdm/vendor/common/star/inc \
    $(LOCAL_DIR)/include/grdm/vendor/common/star/src \
    $(LOCAL_DIR)/include/grdm/vendor/guardianM/inc \
    $(LOCAL_DIR)/include/grdm/vendor/guardianM/src

MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/grdm/grdm.c \
    $(LOCAL_DIR)/src/common/grdm/common/hal/ese_hal.c \
    $(LOCAL_DIR)/src/common/grdm/common/src/ese_api.c \
    $(LOCAL_DIR)/src/common/grdm/common/src/ese_data.c \
    $(LOCAL_DIR)/src/common/grdm/common/src/ese_protocol.c \
    $(LOCAL_DIR)/src/common/grdm/common/src/ese_util.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/common/star/src/star_apdu.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/common/star/src/star_authentication.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/common/star/src/star_credential.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/common/star/src/star_certificate.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/common/star/src/star_firmware.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/common/star/src/star_signature.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_app.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_internal.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_transport.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_fw.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_common.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_crypto.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_boringssl.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_log.c

ifeq ($(findstring -DDEBUG_LOW,$(MODULE_CFLAGS)),-DDEBUG_LOW)
$(warning GRDM_TEST ON)
MODULE_SRCS += \
    $(LOCAL_DIR)/src/common/grdm/grdm_test.c \
    $(LOCAL_DIR)/src/common/grdm/vendor/guardianM/src/grdm_bl.c

MODULE_CFLAGS += -DGRDM_TEST
endif
endif
#-------------------------------------------------------------------------------
# SEM
#-------------------------------------------------------------------------------
MODULE_INCLUDES += \
    $(LOCAL_DIR)/include \
    $(LOCAL_DIR)/include/sem \
    $(LOCAL_DIR)/include/sem/trusty_unisoc

MODULE_SRCS += \
    $(LOCAL_DIR)/src/tlSem.c \
    $(LOCAL_DIR)/src/common/sem/cmd_handler.c \
    $(LOCAL_DIR)/src/common/sem/sem.c \
    $(LOCAL_DIR)/src/common/sem/scpkm.c \
    $(LOCAL_DIR)/src/common/sem/service_key.c \
    $(LOCAL_DIR)/src/common/sem/scrs.c \
    $(LOCAL_DIR)/src/common/sem/factory.c \
    $(LOCAL_DIR)/src/common/sem/ccm.c \
    $(LOCAL_DIR)/src/common/sem/fra.c \
    $(LOCAL_DIR)/src/common/sem/debug.c \
    $(LOCAL_DIR)/src/common/sem/tz_utils.c

MODULE_TA_UUID := 00000000-0000-0000-0000-53454d655345

include make/module-user_task.mk
include make/module-gptee.mk
