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

# Load the tool-specific configuration for this board, as well as the
# generic configuration. This will define any routines needed by the
# tool to communicate with the board.
load_generic_config "h8300"

# Don't use anything by default.
process_multilib_options ""

# The default compiler for this target.
set_board_info compiler "[find_gcc]"

# We only support newlib on this target. We assume that all multilib
# options have been specified before we get here.
set_board_info cflags "[newlib_include_flags]"
set_board_info ldflags "[newlib_link_flags]"

# The GDB protocol used with this board.
set_board_info gdb_protocol "remote"
# It's running a GDB stub in ROM.
set_board_info use_gdb_stub 1

# There's no support for argument-passing.
set_board_info noargs 1
# Nor does it have real signals.
set_board_info gdb,nosignals 1
# And it can't do I/O.
set_board_info gdb,noinferiorio 1
# Nor can it return results.
set_board_info gdb,noresults 1

# Limit the stack size to something real tiny.
set_board_info gcc,stack_size 4096

# The board can get wedged in amusing and interesting ways.
set_board_info unreliable 1

# There's no long long support on this target
set_board_info no_long_long  1

# sizeof int != sizeof long.
set_board_info gdb,short_int 1

# Pick the right linker script if -mh/-ms is specified.

set linker_script "h8300.ld"

foreach x $board_variant_list {
    regsub -all "^\[ \t\]*" "$x" "" x
    regsub -all "\[ \t\]*$" "$x" "" x

    case $x in {
	{ h -mh } {
	    set linker_script "h8300h.ld"
	}
	{ s -ms } {
	    set linker_script "h8300s.ld"
	}
    }
}

# Whee, magic linker scripts hidden away.
#
# This one's dependent on the multilib options in use, sadly. And we
# *need* a linker script. Really. Otherwise the code gets linked at
# the wrong address and it won't run on the board.
set_board_info ldscript "-Wl,-T${prefix_dir}/h8300-hms/${linker_script}"

unset linker_script
