############################################################################
# openamp/open-amp.defs
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.  The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################

ifeq ($(CONFIG_OPENAMP),y)

ifeq ($(CONFIG_OPENAMP_CACHE),y)
  CFLAGS += -DVIRTIO_USE_DCACHE
endif

ifeq ($(CONFIG_OPENAMP_DEBUG),y)
  CFLAGS += -DRPMSG_DEBUG -DVQUEUE_DEBUG
endif

CFLAGS += -Delf_load=remoteproc_elf_load

ifeq ($(CONFIG_OPENAMP_VIRTIO_DEVICE_SUPPORT),y)
  CFLAGS += -DVIRTIO_DEVICE_SUPPORT=1
else
  CFLAGS += -DVIRTIO_DEVICE_SUPPORT=0
endif

ifeq ($(CONFIG_OPENAMP_VIRTIO_DRIVER_SUPPORT),y)
  CFLAGS += -DVIRTIO_DRIVER_SUPPORT=1
else
  CFLAGS += -DVIRTIO_DRIVER_SUPPORT=0
endif

CFLAGS += -DVQ_RX_EMPTY_NOTIFY=1
CFLAGS += -Iopen-amp/lib/include

# avoid multiple definitions in other file
CFLAGS += -Dsafe_strcpy=openamp_safe_strcpy

CSRCS += open-amp/lib/remoteproc/elf_loader.c
CSRCS += open-amp/lib/remoteproc/remoteproc.c
CSRCS += open-amp/lib/remoteproc/remoteproc_virtio.c
CSRCS += open-amp/lib/remoteproc/rsc_table_parser.c
CSRCS += open-amp/lib/rpmsg/rpmsg.c
CSRCS += open-amp/lib/rpmsg/rpmsg_virtio.c
CSRCS += open-amp/lib/utils/utilities.c
CSRCS += open-amp/lib/virtio/virtio.c
CSRCS += open-amp/lib/virtio/virtqueue.c

# Download and unpack tarball if no git repo found
ifeq ($(wildcard open-amp/.git),)
open-amp.zip:
	$(call DOWNLOAD,https://github.com/OpenAMP/open-amp/archive,$(OPENAMP_COMMIT).zip,open-amp.zip)
	$(Q) unzip -o open-amp.zip
	mv open-amp-$(OPENAMP_COMMIT) open-amp
	$(Q) patch -p0 < 0001-ns-acknowledge-the-received-creation-message.patch
	$(Q) patch -p0 < 0002-Negotiate-individual-buffer-size-dynamically.patch
	$(Q) patch -p0 < 0003-rpmsg-notify-the-user-when-the-remote-address-is-rec.patch
	$(Q) patch -p0 < 0004-openamp-virtio.h-negotiate_features-also-can-be-call.patch
	$(Q) patch -p0 < 0005-remoteproc-rpmsg_virtio-change-sched_yeild-to-usleep.patch
	$(Q) patch -p0 < 0006-rpmsg-wait-ept-ready-in-rpmsg_send.patch
	$(Q) patch -p0 < 0007-openamp-add-VIRTIO_RING_F_MUST_NOTIFY-event.patch
	$(Q) patch -p0 < 0008-rpmsg_virtio-don-t-need-check-status-when-get_tx_pay.patch
	$(Q) patch -p0 < 0009-openamp-swap-get_rx_buffer-return_rx_buffer-to-resol.patch
	$(Q) patch -p0 < 0010-rpmsg_virtio.c-virtqueue_kick-after-all-rx-buffer-re.patch
	$(Q) patch -p0 < 0011-virtio-change-feature-to-64-bit-in-all-virtio_dispat.patch
	$(Q) patch -p0 < 0012-rpmsg_virtio.c-fix-get_tx_payload_buffer-error.patch
	$(Q) patch -p0 < 0013-openamp-add-assert-when-get-tx-buffer-failed.patch
	$(Q) patch -p0 < 0014-virtio.h-add-memory-operation-for-virtio-device.patch

.openamp_headers: open-amp.zip
else
.openamp_headers:
endif
	$(eval headers := $(wildcard open-amp/lib/include/openamp/*.h))
	$(eval headers += open-amp/lib/remoteproc/rsc_table_parser.h)
	$(eval headers += open-amp/lib/rpmsg/rpmsg_internal.h)
	$(shell mkdir -p $(TOPDIR)$(DELIM)include$(DELIM)openamp$(DELIM))
	$(foreach header,$(headers),$(shell cp -rf $(header) $(TOPDIR)$(DELIM)include$(DELIM)openamp$(DELIM)))
	touch $@

context:: .openamp_headers

distclean::
	$(call DELDIR, $(TOPDIR)$(DELIM)include$(DELIM)openamp$(DELIM))
ifeq ($(wildcard open-amp/.git),)
	$(call DELDIR, open-amp)
	$(call DELFILE, open-amp.zip)
endif
	$(call DELFILE, .openamp_headers)

endif