/* CRIS target configuration file.  -*- C -*-
   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
   Contributed by Axis Communications.

This file is part of the GNU simulators.

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/>.  */

#ifndef CRIS_TCONFIG_H
#define CRIS_TCONFIG_H

#include "ansidecl.h"
#include "gdb/callback.h"
#include "gdb/remote-sim.h"
#include "sim-module.h"

/* There's basically a a big ??? FIXME: CHECK THIS on everything in this
   file.  I just copied it from m32r, pruned some stuff and added
   HAVE_MODEL because it seemed useful.  */

/* See sim-hload.c.  We properly handle LMA.  */
#define SIM_HANDLES_LMA 1

/* For MSPR support.  FIXME: revisit.  */
#define WITH_DEVICES 1

extern MODULE_INSTALL_FN cris_option_install;

/* FIXME: Revisit.  */
#ifdef HAVE_DV_SOCKSER
extern MODULE_INSTALL_FN dv_sockser_install;
#define MODULE_LIST dv_sockser_install, cris_option_install,
#else
#define MODULE_LIST cris_option_install,
#endif

#define SIM_HAVE_MODEL

/* This is a global setting.  Different cpu families can't mix-n-match -scache
   and -pbb.  However some cpu families may use -simple while others use
   one of -scache/-pbb.  */
#define WITH_SCACHE_PBB 1

#endif /* CRIS_TCONFIG_H */
