# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008, 2009, 2010 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

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

# Load the generic configuration for this board. This will define a
# set of generic routines used 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"

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

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

# It needs no multilib flags by default.
process_multilib_options ""

set_board_info compiler  "[find_gcc]"
set_board_info cflags  "[newlib_include_flags] [libgloss_include_flags]"
set_board_info ldflags  "-nostdlib -nostartfiles [libgloss_link_flags] [newlib_link_flags]"

# ELF simulator linker script.
set_board_info ldscript "-Telfsim.ld"

# The simulator doesn't return exit statuses and we need to indicate this.
set_board_info needs_status_wrapper 1

# We use a GDB stub to talk to the board.
# set_board_info use_gdb_stub 1
# For GDB, we need to use a real stub (not the separate loader scheme
# we use for Sparclet).
# set_board_info gdb_stub  ""
# No mathlib.
# set_board_info mathlib  ""
# We can't do I/O in GDB.
# set_board_info gdb,noinferiorio 1
# Or pass arguments.
set_board_info noargs 1
# Or do signals.
set_board_info gdb,nosignals 1

#We want to specify the sparclite emulator in GDB.
set_board_info gdb,target_sim_options "-sparclite"
