# 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 the name of the installed tools for this target.
set target_install "mips64vr4100-elf"

# 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 "sim"

load_lib "libgloss.exp"

# We need this for find_gcc and *_include_flags/*_link_flags.
load_board_description "basic-sim"

if ![info exists board_info($board,multilib_flags)] {
    set board_info($board,multilib_flags) "-mips16"
}

# This tells it which directory to look in for the simulator.
setup_sim mips

# We only support newlib on this target. We assume that all multilib
# options have been specified before we get here.
set board_info($board,compiler) "[find_gcc]"
set board_info($board,cflags) "[libgloss_include_flags] [newlib_include_flags] [libio_include_flags]"
set board_info($board,ldflags) "[libgloss_link_flags] [newlib_link_flags] [libio_link_flags]"
# IDT linker script.
set board_info($board,ldscript) "-Wl,-Tidt.ld"

# The simulator doesn't return exit statuses and we need to indicate this;
# the standard GCC wrapper will work with this target.
set board_info($board,needs_status_wrapper) 1
set board_info($board,gdb,noargs) 1
set_board_info gdb,nosignals 1
set_board_info noargs 1
