#    Makefile template for Configure for the mn10300 sim library.
#    Copyright (C) 1996, 1997, 2000, 2001 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

## COMMON_PRE_CONFIG_FRAG

WITHOUT_COMMON_OBJS = table.o simops.o sim-load.o
WITHOUT_COMMON_INTERP_DEP = table.c
WITH_COMMON_OBJS = \
	itable.o semantics.o idecode.o icache.o engine.o irun.o support.o \
	$(SIM_NEW_COMMON_OBJS) \
	op_utils.o \
	sim-engine.o \
	sim-hload.o \
	sim-hrw.o \
	sim-resume.o \
	sim-reason.o \
	sim-stop.o \
	dv-sockser.o
WITH_COMMON_INTERP_DEP = 

MN10300_OBJS = $(@mn10300_common@_COMMON_OBJS)
MN10300_INTERP_DEP = $(@mn10300_common@_COMMON_INTERP_DEP)

SIM_OBJS = $(MN10300_OBJS) interp.o

# List of main object files for `run'.
WITHOUT_COMMON_RUN_OBJS = run.o
WITH_COMMON_RUN_OBJS = nrun.o
SIM_RUN_OBJS = $(@mn10300_common@_COMMON_RUN_OBJS)

SIM_EXTRA_CLEAN = clean-extra

# Select mn10300 support in nltvals.def.
NL_TARGET = -DNL_TARGET_mn10300

INCLUDE = mn10300_sim.h $(srcdir)/../../include/callback.h

# List of extra flags to always pass to $(CC).
SIM_EXTRA_CFLAGS = @sim_gen@ -DPOLL_QUIT_INTERVAL=0x20

## COMMON_POST_CONFIG_FRAG


#
# Old generator (default)
#

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

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

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

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

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

idecode.o op_utils.o semantics.o simops.o: targ-vals.h


BUILT_SRC_FROM_IGEN = \
	icache.h \
	icache.c \
	idecode.h \
	idecode.c \
	semantics.h \
	semantics.c \
	model.h \
	model.c \
	support.h \
	support.c \
	itable.h \
	itable.c \
	engine.h \
	engine.c \
	irun.c
$(BUILT_SRC_FROM_IGEN): tmp-igen


.PHONY: clean-igen
clean-igen:
	rm -f $(BUILT_SRC_FROM_IGEN)
	rm -f tmp-igen tmp-insns

../igen/igen:
	cd ../igen && $(MAKE)

IGEN_TRACE= # -G omit-line-numbers # -G trace-rule-selection -G trace-rule-rejection -G trace-entries
IGEN_INSN=$(srcdir)/mn10300.igen $(srcdir)/am33.igen
IGEN_DC=$(srcdir)/mn10300.dc
tmp-igen: $(IGEN_INSN) $(IGEN_DC) ../igen/igen
	cd ../igen && $(MAKE)
	../igen/igen \
		$(IGEN_TRACE) \
		-G gen-direct-access \
                -M mn10300,am33 -G gen-multi-sim=am33 \
		-I $(srcdir) \
		-i $(IGEN_INSN) \
		-o $(IGEN_DC) \
		-x \
		-n icache.h    -hc tmp-icache.h \
		-n icache.c    -c  tmp-icache.c \
		-n semantics.h -hs tmp-semantics.h \
		-n semantics.c -s  tmp-semantics.c \
		-n idecode.h   -hd tmp-idecode.h \
		-n idecode.c   -d  tmp-idecode.c \
		-n model.h     -hm tmp-model.h \
		-n model.c     -m  tmp-model.c \
		-n support.h   -hf tmp-support.h \
		-n support.c   -f  tmp-support.c \
		-n itable.h    -ht tmp-itable.h \
		-n itable.c    -t  tmp-itable.c \
		-n engine.h    -he tmp-engine.h \
		-n engine.c    -e  tmp-engine.c \
		-n irun.c      -r  tmp-irun.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-icache.h icache.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-icache.c icache.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-idecode.h idecode.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-idecode.c idecode.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-semantics.h semantics.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-semantics.c semantics.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-model.h model.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-model.c model.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-support.h support.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-support.c support.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-itable.h itable.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-itable.c itable.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-engine.h engine.h
	$(SHELL) $(srcdir)/../../move-if-change tmp-engine.c engine.c
	$(SHELL) $(srcdir)/../../move-if-change tmp-irun.c irun.c
	touch tmp-igen


interp.o: interp.c $(MN10300_INTERP_DEP) $(INCLUDE)
simops.o: simops.c simops.h $(INCLUDE)
table.o: table.c

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