PWD := $(shell pwd)

ifeq ($(SEC_SDK), sdk30)
	TOOLCHAIN_PATH=$(PWD)/../teegris_sdk_3.0.x/tools
	TA_SIGN_CERT = $(TOOLCHAIN_PATH)/teegris_authority_scripts/ta_auth_dev_drv/cert.pem
	TA_SIGN_KEY = $(TOOLCHAIN_PATH)/teegris_authority_scripts/ta_auth_dev_drv/private/key.pem
	TA_AUTH_SCRIPTS_PATH := $(TOOLCHAIN_PATH)/teegris_authority_scripts/ta_auth_scripts
else ifeq ($(SEC_SDK), sdk40)
	TOOLCHAIN_PATH=$(PWD)/../teegris_sdk_4.1.x/tools
	TA_SIGN_CERT = $(TOOLCHAIN_PATH)/teegris_authority_scripts/ta_auth_dev_drv/cert.pem
	TA_SIGN_KEY = $(TOOLCHAIN_PATH)/teegris_authority_scripts/ta_auth_dev_drv/private/key.pem
	TA_AUTH_SCRIPTS_PATH := $(TOOLCHAIN_PATH)/teegris_authority_scripts/ta_auth_scripts
endif

SIGN := $(TA_AUTH_SCRIPTS_PATH)/sign_file.sh -c $(TA_SIGN_CERT) -k $(TA_SIGN_KEY)

PEBBLE_SRC = $(PWD)/src
PEBBLE_INC = $(PWD)/inc
PEBBLE_INC_PUBLIC = $(PWD)/inc/public
PEBBLE_INC_SHARED = $(PWD)/inc/shared
PEBBLE_SRC_SHARED = $(PWD)/src/shared
PEBBLE_OUT = $(PWD)/Out


CMN_INC = $(PWD)/../tima_common/inc
CMN_SRC = $(PWD)/../tima_common/src
TZ_INC = $(PWD)/../tz_common/public
#ERROR_INC = $(PWD)/inc/TlApi


ifeq ($(SEC_SDK), sdk30)
	CC  := $(TOOLCHAIN_PATH)/../toolchains/aarch64-secureos-gnueabi-gcc_6_3-linux-x86/bin/aarch64-secureos-gnueabi-gcc
	STRIP := $(TOOLCHAIN_PATH)/../toolchains/aarch64-secureos-gnueabi-gcc_6_3-linux-x86/bin/aarch64-secureos-gnueabi-strip
	STRIPFLAGS := -R .note -R .comment -s
	CFLAGS += -DSEC_SDK30
else ifeq ($(SEC_SDK), sdk40)
	CC  := $(TOOLCHAIN_PATH)/../toolchains/aarch64-secureos-gnueabi-gcc_6_3-linux-x86/bin/aarch64-secureos-gnueabi-gcc
	STRIP := $(TOOLCHAIN_PATH)/../toolchains/aarch64-secureos-gnueabi-gcc_6_3-linux-x86/bin/aarch64-secureos-gnueabi-strip
	STRIPFLAGS := -R .note -R .comment -s
	CFLAGS += -DSEC_SDK40
endif

ifeq ($(SEC_PRODUCT), exynos9830)
	CFLAGS += -DEXYNOS9830
else ifeq ($(SEC_PRODUCT), exynos9820)
	CFLAGS += -DEXYNOS9820
endif

#Jenkins build info
ifneq ($(BUILD_NUMBER), )
	CFLAGS += -DCONFIG_BUILD_INFO=\"$(BUILD_NUMBER)\"
else
	CFLAGS += -DCONFIG_BUILD_INFO=\"Local\"
endif
CFLAGS += -DCONFIG_SEC_SDK=\"$(SEC_SDK)\"
CFLAGS += -DCONFIG_TARGET_CHIPSET=\"$(SEC_PRODUCT)\"


# ICCC TZ API
ifeq ($(SEC_PRODUCT), exynos9830)
CFLAGS += -DICCC_v4
CFLAGS += -I$(PWD)/../tz_iccc_common/public
SRCS := $(wildcard $(PWD)/../tz_iccc_common/tl/icccOperations.c)
else
CFLAGS += -I$(PWD)/../ta_iccc/inc
SRCS := $(wildcard $(PWD)/../tz_common/tl/icccOperations.c)
SRCS += $(wildcard $(PWD)/../ta_iccc/src/tl_tz_iccc_init.c)
endif

CFLAGS += -I. \
	  -I$(PEBBLE_INC) \
	  -I$(CMN_INC) \
	  -I$(PEBBLE_INC_PUBLIC) \
	  -I$(TZ_INC) \
	  -I$(PEBBLE_INC_SHARED)
CFLAGS += -fstack-protector -fstack-protector-all -fpie -lscrypto

SRCS += $(wildcard $(PEBBLE_SRC)/*.c $(PEBBLE_SRC)/*.cxx)
SRCS += $(wildcard $(CMN_SRC)/*.c $(CMN_SRC)/*.cxx)
SRCS += $(wildcard $(PEBBLE_SRC_SHARED)/*.c $(PEBBLE_SRC_SHARED)/*.cxx)
SRCS += $(PWD)/../tz_common/tl/buffer_utils.c
OBJS := $(patsubst %.cxx,%.o,$(patsubst %.c,%.o,$(SRCS)))

DIST = $(PEBBLE_OUT)/00000000-0000-0000-0000-506542626c45

all: $(OBJ_LIBS) $(DIST)

$(DIST): $(PEBBLE_OUT)/pebble \
	$(TA_SIGN_CERT) \
	$(TA_SIGN_KEY)
	$(SIGN) -a $< $@ $(DIST)

$(PEBBLE_OUT)/pebble:
	mkdir -p $(PEBBLE_OUT)
	$(CC) $(CFLAGS) $(SRCS) -o $@
	$(STRIP) $(STRIPFLAGS) $(PEBBLE_OUT)/pebble -o $@

%.ol : %.c
	mkdir -p $(OUTPUT_OBJ_PATH)
	$(CC) $(CFLAGS) -c $< -o $(addprefix $(OUTPUT_OBJ_PATH)/,$(notdir $@))

clean: 
	rm -f $(OBJ_LIBS_BIN) $(OBJS) $(DIST) $(PEBBLE_OUT)/pebble
