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

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
# We must use 32-bit addresses to support memory bank switching.
# The WORD_BITSIZE is normally 16 but must be switched (temporarily)
# to 32 to avoid a bug in the sim-common which uses 'unsigned_word'
# instead of 'address_word' in some places (the result is a truncation
# of the 32-bit address to 16-bit; and this breaks the simulator).
SIM_EXTRA_CFLAGS = -DWITH_TARGET_WORD_BITSIZE=32 \
		   -DWITH_TARGET_CELL_BITSIZE=32 \
		   -DWITH_TARGET_ADDRESS_BITSIZE=32 \
		   -DWITH_TARGET_WORD_MSB=31
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
