# 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.

# Danger, Will Robinson!  Settings in this file do not override
# previous settings for the board being defined.

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

# No multilib options needed by default.
process_multilib_options ""

# We want to strip executables before downloading them via xmodem.
if ![board_info $board exists strip] {
    set tempfil [lookfor_file $tool_root_dir binutils/strip]
    if { $tempfil != "" } {
	set_board_info strip $tempfil
    } else {
	set_board_info strip [transform strip]
    }
    unset tempfil
}

# We only support newlib on this target. We assume that all multilib
# options have been specified before we get here.
set_board_info compiler "[find_gcc]"
set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
set_board_info start_addr 0xa0008000
set_board_info ldflags "-Wl,-Ttext,[board_info $board start_addr] [libgloss_link_flags] [newlib_link_flags] -B${prefix_dir}/i960-coff/"
# IDT linker script.
set_board_info ldscript "-Wl,-T${prefix_dir}/i960-coff/i960.ld"

# GDB doesn't return exit statuses and we need to indicate this;
# the standard GCC wrapper will work with this target.
set_board_info needs_status_wrapper 1

# The GDB protocol used with this board.
set_board_info gdb_protocol "mon960"

# Can't pass arguments to the program.
set_board_info noargs 1

# No support for signals.
set_board_info gdb,nosignals 1

set_board_info gdb_prompt "\\(gdb960\\)"

# The board tends to be unreliable.
set_board_info unreliable 1
