# Makefile template for Configure for the CR16 sim library.
# Copyright (C) 2008-2021 Free Software Foundation, Inc.
# Contributed by M Ranga Swami Reddy <MR.Swami.Reddy@nsc.com>
#
# 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 = \
	$(SIM_NEW_COMMON_OBJS) \
	sim-resume.o \
	interp.o \
	table.o \
	simops.o
SIM_EXTRA_CLEAN = clean-extra

SIM_EXTRA_DEPS = simops.h

INCLUDE = cr16_sim.h $(srcroot)/include/sim/callback.h targ-vals.h \
	$(srcroot)/include/gdb/sim-cr16.h

# This selects the cr16 newlib/libgloss syscall definitions.
NL_TARGET = -DNL_TARGET_cr16

## COMMON_POST_CONFIG_FRAG

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

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

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

cr16-opc.o: $(srcdir)/../../opcodes/cr16-opc.c
	$(COMPILE_FOR_BUILD) $(WARN_CFLAGS) -c $(srcdir)/../../opcodes/cr16-opc.c

gencode: gencode.o cr16-opc.o
	$(LINK_FOR_BUILD) gencode.o cr16-opc.o

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