# 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 {sh-elf}

# Load a baseboard description for SID simulators.
load_base_board_description "basic-sid"

process_multilib_options ""

verbose "Using simulator [board_info $board sim]\n"
set_board_info sim [find_rawsid]
if { ${tool} == "gdb" } {
    set_board_info sim,options "-f [find_sid_conf sh-gdb]"
} else {
    set_board_info sim,options "-f [find_sid_conf sh-gloss]"
}

# Load the generic configuration for this board. This will define a basic set
# of routines needed by the tool to communicate with the board.
load_generic_config "sid"

# default endian: big
# set_board_info sim,defaultendian "-EB"

# Tells the test harness to use pre-generated sid configurations.
set_board_info sim,protocol "sid"
