# 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 {strongarm-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 "cygmon"

# 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  "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]"

# CygMON linker script.

if {[string compare [board_info $board boardtype] "sa1100dp"] == 0} {
    set_board_info ldscript "-specs=sa1100dp.specs"
} elseif {[string compare [board_info $board boardtype] "sa1100mm"] == 0} {
    set_board_info ldscript "-specs=sa1100mm.specs"
} elseif {[string compare [board_info $board boardtype] "sa-iop"] == 0} {
    set_board_info ldscript "-specs=sa-iop.specs"
} elseif {[string compare [board_info $board boardtype] "ebsa-285"] == 0} {
    set_board_info ldscript "-specs=ebsa-285.specs"
}

# Standard remote protocol.
set_board_info gdb_protocol "remote"
# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
set_board_info gdb,noinferiorio 1
# Or pass arguments.
set_board_info gdb,noargs  1
set_board_info noargs 1
# Or do signals.
set_board_info gdb,nosignals 1

set_board_info shell_prompt "cygmon>"

set_board_info use_gdb_stub 1
set_board_info use_cygmon 1
