#    Makefile template for Configure for the 68HC11 sim library.
#    Copyright (C) 1999, 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

M68HC11_OBJS = interp.o m68hc11int.o m68hc12int.o \
		emulos.o interrupts.o m68hc11_sim.o

# List of main object files for `run'.
SIM_RUN_OBJS = nrun.o

SIM_OBJS = $(M68HC11_OBJS) \
	$(SIM_NEW_COMMON_OBJS) \
	sim-load.o \
	sim-hload.o \
	sim-engine.o \
	sim-stop.o \
	sim-hrw.o \
	sim-reason.o \
        $(SIM_EXTRA_OBJS)

SIM_PROFILE= -DPROFILE=1 -DWITH_PROFILE=-1
SIM_EXTRA_CFLAGS = -DWITH_TARGET_WORD_BITSIZE=16 \
		   -DWITH_TARGET_CELL_BITSIZE=32 \
		   -DWITH_TARGET_WORD_MSB=15
SIM_EXTRA_CLEAN = clean-extra

SIM_EXTRA_OBJS = @m68hc11_extra_objs@

INCLUDE = $(srcdir)/../../include/gdb/callback.h \
	  interrupts.h sim-main.h


## COMMON_POST_CONFIG_FRAG

m68hc11int.c: gencode
	./gencode -m6811 > $@

m68hc12int.c: gencode
	./gencode -m6812 > $@

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

interp.o: interp.c $(INCLUDE)

clean-extra:
	rm -f gencode m68hc11int.c
