include ../config.mk

ifeq ("$(origin rel)", "command line")
	BUILD_REL = $(rel)
endif

ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

## softsim-TA sign approach
CONFIG_SERVER=ON
#CONFIG_SERVER=OFF

ANDROID_SYSROOT = $(CONFIG_NW_SYSROOT)
ANDROID_TOOLCHAIN_PREFIX = ${CONFIG_NW_TOOLCHAIN_PREFIX}gcc
LIB =$(CONFIG_NW_LIB)
CFLAGS=$(CONFIG_CFLAGS)

ifeq ($(CONFIG_NW_TARGET),AARCH64)
  ANDROID_SYSROOT = $(CONFIG_NW_SYSROOT_AARCH64)
  ANDROID_TOOLCHAIN_PREFIX = $(CONFIG_NW_TOOLCHAIN_PREFIX_AARCH64)gcc
  LIB =$(CONFIG_NW_LIB_AARCH64)
  CFLAGS = $(CONFIG_CFLAGS_AARCH64)
endif

TARGET_GCC = $(ANDROID_TOOLCHAIN_PREFIX) --sysroot=$(ANDROID_SYSROOT) $(CFLAGS)
DIST=00000000-0000-0000-0000-53465453494d
PREBUILD=00000000-4d54-4b5f-4246-53465453494d

ifeq ($(CONFIG_SERVER),ON)
  softsim_TA_string = softsim_TA
  hacc_drv_TA_string =00000000-4d54-4b5f-4246-53465453494d.unsigned
  CONFIG_CFLAGS_TA += -DREMOTE_SIGN
  signing_command = $(CONFIG_TA_SIGN_SERVER) $< -output $@
  signing_command_drv = $(CONFIG_DRV_SIGN_SERVER) $< -output $@
else
  softsim_TA_string = softsim_TA \
  $(CONFIG_TA_SIGN_CERT) \
  $(CONFIG_TA_SIGN_KEY)

  hacc_drv_TA_string = 00000000-4d54-4b5f-4246-53465453494d.unsigned \
  $(CONFIG_DRV_TA_SIGN_CERT) \
  $(CONFIG_DRV_TA_SIGN_KEY)

  signing_command = $(CONFIG_TA_SIGN) $< $@
  signing_command_drv = $(CONFIG_DRV_SIGN) $< $@
endif

CONFIG_SW_INCLUDES += -I. \
					 -Ix509/ \
					 -I../include/softsim-logic/ \
					 -I../include/crypto-core/   \
					 -Iusr

CONFIG_CFLAGS_TA += -DUSE_BLOWFISH  -DLOGIC_PROVIDER_samsung

ifeq ($(APDU_ENCRYPTION),yes)
CONFIG_CFLAGS_TA += -D__APDU_ENCRYPT__
endif

ifndef BUILD_REL
CONFIG_CFLAGS_TA += -D_UNIT_TEST_
endif

all: softsim_TA $(DIST) $(PREBUILD)

clean:
	find . -name "*.o" -exec rm -rf {} \;
	rm $(DIST) softsim_TA

ifeq ("$(USER)", "jianhua.qu")
$(DIST): \
	$(softsim_TA_string)
	$(signing_command)
	mcp $@

$(PREBUILD): \
	$(hacc_drv_TA_string)
	$(signing_command_drv)
	mcp $@

else
$(DIST): \
	$(softsim_TA_string)
	$(signing_command)

$(PREBUILD): \
	$(hacc_drv_TA_string)
	$(signing_command_drv)
endif

CONFIG_SW_SOURCE := \
	target/bf/app_entry.c \
	target/bf/target.c    \
	x509/asn1.c    \
	x509/asn1rsa.c \
	x509/x509v3.c  \
	json/cJSON.c   \
	softsim_main.c \
	tl_aes_crypto.c  \
	tl_certificate.c \
	tl_fs.c   \
	tl_heap.c \
	tl_inter_app_msg.c \
	tl_json.c \
	tl_log.c  \
	tl_process_cmd.c \
	tl_rsa_crypto.c  \
	tl_softsim_logic.c    \
	tl_softsim_logic_op.c \
	tl_usim_op.c \
	tl_utils.c

ifndef BUILD_REL
CONFIG_SW_SOURCE += \
	target/bf/sample/tee_aes_TA.c                        \
	target/bf/sample/tee_dh_key_derive_TA.c              \
	target/bf/sample/tee_ecdsa_sign_verif_TA.c           \
	target/bf/sample/tee_hmac_sha256_digest_TA.c         \
	target/bf/sample/tee_rsa_enc_dec_TA.c                \
	target/bf/sample/tee_rsa_enc_dec_ext_TA.c            \
	target/bf/sample/tee_rsa_sign_verif_TA.c             \
	target/bf/sample/tee_sha256_digest_TA.c              \
	target/bf/sample/tee_hacc_TA.c                       \
	target/bf/sample/test_TA_crypto_samples.c
else
CONFIG_CFLAGS_TA += -D_NDEBUG_
endif


CONFIG_SW_OBJECT=$(patsubst %.c, %.o, $(CONFIG_SW_SOURCE))

.PHONY: softsim_TA
softsim_TA: \
	$(CONFIG_SW_OBJECT)
	$(CONFIG_SW_TOOLCHAIN_PREFIX)gcc --sysroot=$(CONFIG_SW_SYSROOT) -lmath -lteesl -Wall -Wextra -Werror $^ ../lib/libsoftsim-samsung.a ../lib/libmath.a -o $@

%.o:%.c
	echo $^
	${CONFIG_SW_TOOLCHAIN_PREFIX}gcc --sysroot=$(CONFIG_SW_SYSROOT) ${CONFIG_SW_INCLUDES} ${CONFIG_CFLAGS_TA} -o $@  -c $<

