#    Makefile template for Configure for the D10v sim library.
#    Copyright (C) 1996-2016 Free Software Foundation, Inc.
#    Written by Cygnus Support.
#
# 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

SIM_OBJS = \
	interp.o \
	$(SIM_NEW_COMMON_OBJS) \
	sim-resume.o \
	table.o \
	simops.o \
	endian.o
SIM_EXTRA_CLEAN = clean-extra

INCLUDE = d10v_sim.h $(srcroot)/include/gdb/callback.h targ-vals.h endian.c \
	$(srcroot)/include/gdb/sim-d10v.h

# This selects the d10v newlib/libgloss syscall definitions.
NL_TARGET = -DNL_TARGET_d10v

## COMMON_POST_CONFIG_FRAG

simops.o: simops.h

simops.h: gencode
	./gencode -h >$@

table.c: gencode simops.h
	./gencode >$@

gencode.o: gencode.c $(INCLUDE)
	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(WARN_CFLAGS) -c $(srcdir)/gencode.c

d10v-opc.o: $(srcdir)/../../opcodes/d10v-opc.c
	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(WARN_CFLAGS) -c $(srcdir)/../../opcodes/d10v-opc.c

gencode: gencode.o d10v-opc.o
	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o gencode gencode.o d10v-opc.o $(BUILD_LIB)

clean-extra:
	rm -f table.c simops.h gencode
