# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
# Foundation, Inc.
#
# This file is part of DejaGnu.
#
# DejaGnu 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.
#
# DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# This is a list of toolchains that are supported on this board.
set_board_info target_install  {h8300-hms}

# Load the tool-specific configuration for this board, as well as the
# generic configuration. This will define any routines needed by the
# tool to communicate with the board.
load_generic_config "sim"

# basic-sim.exp is a basic description for the standard Cygnus simulator.
load_base_board_description "basic-sim"

# The name of the simulator is "h8300" (as in h8300-hms-run).
setup_sim h8300

# No multilib options are used by default.
process_multilib_options ""

# The compiler used to build for this board. This has *nothing* to do
# with what compiler is tested if we're testing gcc.
set_board_info compiler  "[find_gcc]"

# We only support newlib on this target.
set_board_info cflags  "[newlib_include_flags]"
set_board_info ldflags  "[newlib_link_flags]"
set_board_info uses_underscores 1

# There's no support for argument-passing.
set_board_info noargs 1
# Nor does it have real signals.
set_board_info gdb,nosignals 1
# And it can't do I/O.
set_board_info gdb,noinferiorio 1
# Nor can it return results.
set_board_info gdb,noresults 1

# Limit the stack size to something real tiny.
set_board_info gcc,stack_size 4096
set_board_info gcc,text_size 60000

# There's no long long support on this target
set_board_info no_long_long  1

# sizeof int != sizeof long.
set_board_info gdb,short_int 1
