#### Makefile.in --- Makefile template for the RX simulator

### Copyright (C) 2008-2012 Free Software Foundation, Inc.
### Contributed by Red Hat, Inc.
### 
### This file is part of the GNU simulators.
### 
### The GNU simulators are free software; you can redistribute them and/or
### modify them 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.
### 
### The GNU simulators are distributed in the hope that they 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 the GNU simulators; if not, write to the Free Software
### Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
### 02110-1301, USA

## COMMON_PRE_CONFIG_FRAG

SIM_EXTRA_CFLAGS = -Wall

SIM_RUN_OBJS = \
	main.o \
	$(ENDLIST)

SIM_OBJS = \
	fpu.o \
	load.o \
	mem.o \
	misc.o \
	reg.o \
	rx.o \
	syscalls.o \
	trace.o \
	gdb-if.o \
	err.o \
	$(ENDLIST)

LIBS = $B/bfd/libbfd.a $B/libiberty/libiberty.a

## COMMON_POST_CONFIG_FRAG

arch = rx

err.o : err.h
fpu.o : cpu.h fpu.h
gdb-if.o : cpu.h mem.h load.h syscalls.h err.h \
           $(srcdir)/../../include/gdb/callback.h \
	   $(srcdir)/../../include/gdb/remote-sim.h \
	   $(srcdir)/../../include/gdb/signals.h \
	   $(srcdir)/../../include/gdb/sim-rx.h
load.o : ../../bfd/bfd.h cpu.h mem.h
main.o : ../../bfd/bfd.h cpu.h mem.h misc.h load.h trace.h err.h
mem.o : mem.h cpu.h syscalls.h misc.h err.h
misc.o : cpu.h misc.h
reg.o : cpu.h trace.h
rx.o : $(srcdir)/../../include/opcode/rx.h cpu.h mem.h syscalls.h fpu.h
syscalls.o : $(srcdir)/../../include/gdb/callback.h cpu.h mem.h syscalls.h syscall.h
trace.o : ../../bfd/bfd.h $(srcdir)/../../include/dis-asm.h cpu.h mem.h load.h
