#
# Copyright (c) 2018, Google, Inc. All rights reserved
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#

LOCAL_DIR := $(GET_LOCAL_DIR)

MODULE := $(LOCAL_DIR)

# test-runner does not run in trusty, to enable CFI it depends on
# trusty modules so anything that needs runtime support is probably
# not worth the effort
MODULE_DISABLE_CFI := true

# SCS requires us to allocate a guard region from the heap so it is
# probably not worth the effort for the same reasons that CFI isn't
MODULE_DISABLE_SCS := true

QL_TIPC = $(LOCAL_DIR)/../ql-tipc

MODULE_DEFINES += \
	NS_ARCH_ARM64=1 \

MODULE_INCLUDES += \
	$(LOCAL_DIR)/include \
	$(LOCAL_DIR)/$(ARCH)/include \
	$(QL_TIPC)/include \
	$(LOCAL_DIR)/../interface/include \
	external/lk/include \
	external/lk/include/shared/lk \
	external/lk/lib/libc/include \

MODULE_SRCS += \
	$(LOCAL_DIR)/test-runner.c \
	$(LOCAL_DIR)/test-runner-storage.c \
	$(LOCAL_DIR)/test-runner-sysdeps.c \
	$(LOCAL_DIR)/test-runner-comm-port.c \
	$(LOCAL_DIR)/virtio.c \
	$(LOCAL_DIR)/virtio-console.c \
	$(QL_TIPC)/ipc.c \
	$(QL_TIPC)/ipc_dev.c \
	$(QL_TIPC)/keymaster.c \
	$(QL_TIPC)/keymaster_serializable.c \
	$(QL_TIPC)/rpmb_proxy.c \
	$(QL_TIPC)/trusty_dev_common.c \
	$(QL_TIPC)/util.c \

ifeq (true,$(call TOBOOL,$(VIRTIO_MMIO_DEVICE)))
MODULE_SRCS += $(LOCAL_DIR)/virtio-mmio.c
else
MODULE_SRCS += $(LOCAL_DIR)/virtio-pci.c
endif

include $(LOCAL_DIR)/$(ARCH)/rules.mk
include make/module.mk
