#    Makefile template for Configure for the moxie sim library.
#    Copyright (C) 2008, 2010, 2011 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-`sed q ${srcdir}/../../gdb/version.in`/dtb

SIM_OBJS = interp.o sim-load.o sim-io.o sim-config.o sim-utils.o	\
sim-options.o sim-module.o sim-core.o sim-endian.o sim-trace.o 	\
sim-engine.o sim-fpu.o sim-bits.o sim-profile.o sim-events.o \
sim-memopt.o

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

## COMMON_POST_CONFIG_FRAG

all: interp.o moxie-gdb.dtb

interp.o: interp.c

moxie-gdb.dtb: moxie-gdb.dts
	dtc -O dtb -o moxie-gdb.dtb ${srcdir}/moxie-gdb.dts

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

moxie-clean:
