# 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  {mmix-knuth-mmixware}

# Load the generic configuration for this board. This will define any
# routines needed to communicate with the board.
load_generic_config "sim"

# Unset the slow_simulator flag; this simulator isn't slow.  (I haven't
# found documentation as to what constitutes a "slow" simulator and
# there's no reference to that variable in the GCC test-suite, but all
# tests I've found work.)
unset_board_info slow_simulator

# We don't use basic-sim.exp and setup_sim because the simulator, called
# "mmix", is external to the build tree.  If nobody set the simulator
# name, we set it to "mmix", so the rest of the framework works.  Let $SIM
# override.
if ![board_info $board exists sim] {
    if [info exists SIM] {
	set_board_info sim $SIM
    } else {
	# Has to exist in the users path.
	set_board_info sim mmix
    }
}

# No default multilib options are needed for this board.
process_multilib_options ""

set_board_info is_simulator 1

# It isn't visible in the target triple, so we set it explicitly.  The
# *linked* format is currently mmo, but those cases where this matters we
# can deal with separately.
set_board_info obj_format "elf"

# The compiler used to build for this board. This has *nothing* to do
# with what compiler is tested if we're testing gcc.
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]"

# We put the stack in the code segment, so trampolines work; the mmix
# simulator does not allow code to be executed in the "normal" documented
# data and stack segments.  Use a somewhat magic number, so stack addresses
# are easily recognized when debugging.
set_board_info ldflags "[newlib_link_flags] -Wl,--defsym,__Stack_start=0x1680a00000000000"

# No linker script needed - the simulator is the main environment for this
# target.
set_board_info ldscript ""

# Return codes aren't supported by the simulator.
set_board_info needs_status_wrapper 1

# FIXME: Some gdb board variables are usually here.  I currently have
# no clue what to set them to, so I won't.
