ifeq ($(LOCAL_UUID),)
  $(error LOCAL_UUID is not specified)
endif

ifeq ($(LOCAL_GROUP_ID),)
  LOCAL_GROUP_ID := dev_ta
endif

_local_path := $(call my-dir)

include $(_local_path)/uuid-utils.mk

TA_UUID_STRUCT := $(strip $(call get-local-uuid-as-struct,$(LOCAL_UUID)))
TA_GROUP_ID := $(LOCAL_GROUP_ID)
TA_UUID := $(LOCAL_UUID)

#########################
# Prebuilt for whitebox #
#########################
include $(CLEAR_VARS)
LOCAL_MODULE := $(TA_UUID)_android_whitebox

ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
  LOCAL_SRC_FILES := $(_local_path)/../prebuilt/arm64/whitebox/lib/libwb64.a
else
  LOCAL_SRC_FILES := $(_local_path)/../prebuilt/arm/whitebox/lib/libwb.a
endif

include $(PREBUILT_STATIC_LIBRARY)

###########################
# Prebuilt for cryptocore #
###########################
include $(CLEAR_VARS)
LOCAL_MODULE := $(TA_UUID)_android_libcryptocore

ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
  LOCAL_SRC_FILES := $(_local_path)/../prebuilt/arm64/cryptocore/lib/libcryptocore_android.a
else
  LOCAL_SRC_FILES := $(_local_path)/../prebuilt/arm/cryptocore/lib/libcryptocore_android.a
endif

include $(PREBUILT_STATIC_LIBRARY)

##############################
# Prebuilt for gp_api_crypto #
##############################
include $(CLEAR_VARS)
LOCAL_MODULE := $(TA_UUID)_android_libgpapi_crypto

ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
  LOCAL_SRC_FILES := $(_local_path)/../prebuilt/arm64/gpapi_crypto/lib/libgpapi_crypto_android.a
else
  LOCAL_SRC_FILES := $(_local_path)/../prebuilt/arm/gpapi_crypto/lib/libgpapi_crypto_android.a
endif

include $(PREBUILT_STATIC_LIBRARY)

################################
# GP TEE implementation itself #
################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(TA_UUID)_android_nwd_tee
#TODO: change log from console to logcat
#                   $(_local_path)/../source/gp-api/tee/emulator/tees_log.c
LOCAL_SRC_FILES += $(_local_path)/../source/gp-api/tee/emulator/lib_main.c \
                   $(_local_path)/../source/gp-api/tee/emulator/tee_sys.c \
                   $(_local_path)/../source/gp-api/tee/emulator/tees_mem.c \
                   $(_local_path)/../source/gp-api/client/tees_client_log_android.c \
                   $(_local_path)/../source/gp-api/tee/emulator/tees_secure_object.c \
                   $(_local_path)/../source/gp-api/tee/emulator/persistent_object.c \
                   $(_local_path)/../source/gp-api/tee/emulator/init_subsystems.c \
                   $(_local_path)/../source/gp-api/client/teec_callback_handler.c \
                   $(_local_path)/../source/gp-api/filesystem/fs_utils.c \
                   $(_local_path)/../source/gp-api/filesystem/fs_po.c \
                   $(_local_path)/../source/gp-api/protocol/tee_param_utils.c \
                   $(_local_path)/../source/gp-api/protocol/socket_utils.c \
                   $(_local_path)/../source/gp-api/persistent_object/persistent_object_api.c \
                   $(_local_path)/../source/gp-api/persistent_object/serialise_attr.c \
                   $(_local_path)/../source/gp-api/log_utils/log_utils.c \
                   $(_local_path)/../source/gp-api/prop/src/property.c \
                   $(_local_path)/../source/gp-api/prop/src/tee_string.c \
                   $(_local_path)/../source/gp-api/prop/src/uuid.c

LOCAL_C_INCLUDES += \
  $(_local_path)/../include/gp-api \
  $(_local_path)/../include/gp-mb \
  $(_local_path)/../include/gp-ext \
  $(_local_path)/../source/gp-api/protocol \
  $(_local_path)/../source/gp-api/filesystem \
  $(_local_path)/../source/gp-api/persistent_object \
  $(_local_path)/../source/gp-api/log_utils \
  $(_local_path)/../source/gp-api/prop/tee \
  $(_local_path)/../source/gp-api/prop/inc \
  $(_local_path)/../source/gp-api/prop/src \
  $(_local_path)/../source/gp-api/prop/tee/non-blowfish-include

LOCAL_CFLAGS += -DMB_PO_ROOT_DIR=\"./mb_po\" -Wall -Werror -fPIC
LOCAL_CFLAGS += -std=c99 -D_POSIX_C_SOURCE=199309
LOCAL_CFLAGS += -Wall -Werror
LOCAL_CFLAGS += -DYOUR_TA_UUID='$(TA_UUID_STRUCT)' -DYOUR_GROUP_ID=\"$(TA_GROUP_ID)\" -DTA_UUID=\"$(TA_UUID)\"

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)

ifeq ($(LOCAL_SHRINK_PROTOCOL_BUFFER),y)
  LOCAL_CFLAGS += -DSHRINK_PROTOCOL_BUFFER
endif

include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_WHOLE_STATIC_LIBRARIES += $(TA_UUID)_android_nwd_tee
LOCAL_STATIC_LIBRARIES += $(TA_UUID)_android_libgpapi_crypto
LOCAL_STATIC_LIBRARIES += $(TA_UUID)_android_libcryptocore
LOCAL_STATIC_LIBRARIES += $(TA_UUID)_android_whitebox

LOCAL_LDLIBS := -llog
# WARNING: Below client's Android module will start. Don't clear variables after this line.
