# 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 {m68k-coff m68k-elf}

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

# Need soft-float by default.
process_multilib_options "-msoft-float"

# The compiler used to build for this board. Note that this has nothing to do
# with what compiler is tested when testing gcc.
set_board_info compiler "[find_gcc]"

set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"

# Nasty hack.
if { [board_info $board obj_format] == "a.out" } {
    # Need to pass the start address to objcopy.
    set_board_info use_vma_offset 1
    # Wrapping has to be specially done for m68k-aout, for whatever reason.
    set_board_info wrap_m68k_aout 1

    set extra_m68k_ld_flags "-N -nostdlib "

    # We need to tell GDB to load at the correct offset.
    set_board_info gdb_load_offset [board_info $board hex_startaddr]
} else {
    set extra_m68k_ld_flags ""
}

set_board_info ldflags "$extra_m68k_ld_flags [libgloss_link_flags] [newlib_link_flags]"
unset extra_m68k_ld_flags


# If no output format is specified, use objcopy.
if ![board_info $board exists output_format] {
    set tempfil [lookfor_file $tool_root_dir binutils/objcopy]
    if { $tempfil != "" } {
	set_board_info objcopy $tempfil
    } else {
	set_board_info objcopy [transform objcopy]
    }
    unset tempfil
}

# IDP linker script.
set_board_info ldscript "-Wl,-Tidp.ld"
# The idt interface can't return exit statuses, so gcc (ctorture et
# al) needs to do what it can to get them.
set_board_info needs_status_wrapper 1

# GDB needs to use "target rom68k" to talk to the board.
set_board_info gdb_protocol  "rom68k"

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

# Nor can it do I/O in GDB.
set_board_info gdb,noinferiorio 1

# It has no signals.
set_board_info gdb,nosignals 1

# It can't return results when debugging with GDB.
set_board_info gdb,noresults 1

# Pseudo-random guess.
set_board_info sys_speed_value 200
