# Build t-base trustlet/driver.

# Common parameters:
# - LOCAL_SDK_PATH
# - LOCAL_NAME
# - LOCAL_ARMCC_PATH
# - LOCAL_ARMCC_LICENSE
# Optional:
# - LOCAL_INCLUDE_DIRS
# - LOCAL_SRC_LIB_C
# - LOCAL_SRC_CPP
# - LOCAL_SRC_C
# - LOCAL_SRC_S
# - LOCAL_CFLAGS
# - LOCAL_CPPFLAGS
# - LOCAL_CUSTOM_LIBS
# - LOCAL_STATIC_LIBRARIES
# - LOCAL_API_LEVEL (3 is by default)

_sdk_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))

include $(_sdk_dir)/tbase-utils.mk
include $(_sdk_dir)/tbase-trustlet-params.mk

#######################
# Include common part #
#######################

include $(_sdk_dir)/build-tbase-common.mk

_platform_libs := $(_entry_lib)

_local_fips_crypto := $(LOCAL_FIPS_CRYPTO)
ifeq ($(LOCAL_LINK_GP_TEE),y)

ifeq ($(LOCAL_FIPS_CRYPTO),y)
  _crypto_lib :=
else
  _crypto_lib := $(dir $(_sdk_dir))prebuilt/arm/cryptocore/lib/libcryptocore_tbase$(_drv)_$(LOCAL_CHIP).a
endif

  _rpmb_lib := $(dir $(_sdk_dir))prebuilt/arm/rpmb/lib/secdrv.lib

  # Don't use "../" here. Also the line must be absolutely the same as target to build platform library.
  _platform_libs += $(LOCAL_OUT)/$(LOCAL_TARGET_NAME:=/)tbase/$(LOCAL_UUID)_$(LOCAL_CHIP)_tbase$(_drv)_gp_tee/$(LOCAL_UUID)_$(LOCAL_CHIP)_tbase$(_drv)_gp_tee.a \
                    $(LOCAL_OUT)/$(LOCAL_TARGET_NAME:=/)tbase/$(LOCAL_UUID)_$(LOCAL_CHIP)_tbase$(_drv)_gp_entry/$(LOCAL_UUID)_$(LOCAL_CHIP)_tbase$(_drv)_gp_entry.a \
                    $(_crypto_lib) $(_rpmb_lib)


  LOCAL_INCLUDE_DIRS += $(_sdk_dir)/../include/gp-api $(_sdk_dir)/../include/gp-ext $(_sdk_dir)/../include/gp-mb
endif

_platform_libs +=  $(_api_lib)


ifeq ($(LOCAL_BUILD_TOOL),llvm)
    LOCAL_SRC_C += $(_sdk_dir)/../source/gp-api/tee/tbase$(-driver)/newlib_patch$(-driver).c
endif


#############
# Build all #
#############

include $(_sdk_dir)/build-binary.mk

###############################################
# Include final goal to get binary (trustlet) #
###############################################

include $(_sdk_dir)/build-binary-goal-bin.mk

_local_uuid := $(LOCAL_UUID)
_local_link_gp_tee := $(LOCAL_LINK_GP_TEE)
_local_sdk_path := $(LOCAL_SDK_PATH)
_local_build_tool := $(LOCAL_BUILD_TOOL)
_local_cross_gcc_path_lib := $(LOCAL_CROSS_GCC_PATH_LIB)
_local_cross_gcc_path_lgcc := $(LOCAL_CROSS_GCC_PATH_LGCC)
_local_armcc_path := $(LOCAL_ARMCC_PATH)
_local_armcc_license := $(LOCAL_ARMCC_LICENSE)
_local_chip := $(LOCAL_CHIP)
_local_group_id := $(LOCAL_GROUP_ID)
_local_tbase_app_name := $(LOCAL_NAME)
_local_target_name := $(LOCAL_TARGET_NAME)
_local_out := $(LOCAL_OUT)
_local_api_level := $(LOCAL_API_LEVEL)
_local_cflags := $(LOCAL_CFLAGS)
_local_include_dirs := $(LOCAL_INCLUDE_DIRS)

##############
# Clear vars #
##############

include $(_sdk_dir)/clear-vars.mk

####################
# Include TEE base #
####################

ifeq ($(_local_link_gp_tee),y)
  ifneq ($(_tbase_gp_api_$(_local_uuid)_$(_local_chip)_$(_local_target_name)$(_drv)),included)
    LOCAL_SDK_PATH := $(_local_sdk_path)
    LOCAL_BUILD_TOOL := $(_local_build_tool)
    LOCAL_CROSS_GCC_PATH_LIB := $(_local_cross_gcc_path_lib)
    LOCAL_CROSS_GCC_PATH_LGCC := $(_local_cross_gcc_path_lgcc)
    LOCAL_ARMCC_PATH := $(_local_armcc_path)
    LOCAL_ARMCC_LICENSE := $(_local_armcc_license)
    LOCAL_CHIP := $(_local_chip)
    LOCAL_UUID := $(_local_uuid)
    LOCAL_GROUP_ID := $(_local_group_id)
    LOCAL_TBASE_APP_NAME := $(_local_tbase_app_name)
    LOCAL_FIPS_CRYPTO := $(_local_fips_crypto)
    LOCAL_TARGET_NAME := $(_local_target_name)
    LOCAL_OUT := $(_local_out)
    LOCAL_API_LEVEL := $(_local_api_level)
    LOCAL_CFLAGS := $(_local_cflags)
    LOCAL_INCLUDE_DIRS := $(_local_include_dirs)

    include $(_sdk_dir)/../source/gp-api/tee-tbase$(-driver).mk

    LOCAL_SDK_PATH := $(_local_sdk_path)
    LOCAL_BUILD_TOOL := $(_local_build_tool)
    LOCAL_ARMCC_PATH := $(_local_armcc_path)
    LOCAL_ARMCC_LICENSE := $(_local_armcc_license)
    LOCAL_CHIP := $(_local_chip)
    LOCAL_UUID := $(_local_uuid)
    LOCAL_GROUP_ID := $(_local_group_id)
    LOCAL_TBASE_APP_NAME := $(_local_tbase_app_name)
    LOCAL_FIPS_CRYPTO := $(_local_fips_crypto)
    LOCAL_TARGET_NAME := $(_local_target_name)
    LOCAL_OUT := $(_local_out)
    LOCAL_API_LEVEL := $(_local_api_level)
    LOCAL_CFLAGS := $(_local_cflags)
    LOCAL_CROSS_GCC_PATH := $(_local_cross_gcc_path)
    LOCAL_CROSS_GCC_PATH_LGCC := $(_local_cross_gcc_path_lgcc)

    include $(_sdk_dir)/../source/gp-api/tee-tbase$(-driver)-entry.mk

    _tbase_gp_api_$(_local_uuid)_$(_local_chip)_$(_local_target_name)$(_drv) := included
  endif
endif
