#    Makefile template for Configure for the moxie sim library.
#    Copyright (C) 2008-2021 Free Software Foundation, Inc.
#    Written by Anthony Green
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

## COMMON_PRE_CONFIG_FRAG

dtbdir = @datadir@/gdb/dtb

SIM_OBJS = \
	$(SIM_NEW_COMMON_OBJS) \
	interp.o \
	sim-resume.o

SIM_EXTRA_LIBS = -lm -lz
SIM_EXTRA_INSTALL = install-dtb
SIM_EXTRA_CFLAGS = -DDTB="\"$(dtbdir)/moxie-gdb.dtb\""

## COMMON_POST_CONFIG_FRAG

all: moxie-gdb.dtb

moxie-gdb.dtb: $(MAINT) moxie-gdb.dts
	@echo Regenerating moxie-gdb.dtb
	if test "x$(DTC)" != x; then \
	  $(DTC) -O dtb -o moxie-gdb.dtb ${srcdir}/moxie-gdb.dts || exit 1; \
	  $(SHELL) $(srcroot)/move-if-change moxie-gdb.dtb ${srcdir}/moxie-gdb.dtb || exit 1; \
	else \
	  echo "Could not update the moxie-gdb.dtb file because the device "; \
	  echo "tree compiler tool (dtc) is missing.  Install the tool to "; \
	  echo "update the device tree blob."; \
	fi

install-dtb: moxie-gdb.dtb
	$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(dtbdir)
	$(INSTALL_DATA) $(srcdir)/moxie-gdb.dtb $(DESTDIR)$(dtbdir)/moxie-gdb.dtb
