dejagnu
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

New baseboard for multilib simulator testing


From: Steve Ellcey
Subject: New baseboard for multilib simulator testing
Date: Wed, 24 Jul 2013 15:26:02 -0700
User-agent: Heirloom mailx 12.4 7/29/08

A while back I added a generic-sim.exp baseboard that I use for qemu testing
of MIPS targets.  It works well but one of the things I don't like about it
is that you need set the rpath and dynamic linker options with the
DEJAGNU_SIM_LINK_FLAG option if you want to use shared libararies.   Then if
you want to test a different version (soft-float vs. hard-float or big-endian
vs. little-endian) you need to change the rpath that you put into
DEJAGNU_SIM_LINK_FLAG before rerunning.  I wanted to avoid this and also to
be able to kick off the GCC testsuite once and tell it to run multiple options
in one test run.

This baseboard is my way of doing that, it sets rpath and dynamic-linker
options using the GCC --print-sysroot and --print-file-name options. This
works for testing installed compilers, but for testing a built, but not
installed, compiler I had to hardcode some paths into the search.  I don't
like that but I couldn't find any other way to do it.

So with the generic-sim.exp baseboard I would test GCC with something
like:

        export 
DEJAGNU_SIM_LINK_FLAGS="-Wl,--dynamic-linker=/local/home/sellcey/nightly/install-mips-mti-linux-gnu/sysroot-mips-mti-linux-gnu/usr/lib/ld-2.17.90.so
 
-Wl,-rpath=/local/home/sellcey/nightly/install-mips-mti-linux-gnu/sysroot-mips-mti-linux-gnu/usr/lib:/local/home/sellcey/nightly/install-mips-mti-linux-gnu/mips-mti-linux-gnu/lib"
        make check RUNTESTFLAGS="--target_board=generic-sim"

With multi-sim.exp I can skip the export and just do:

        make check RUNTESTFLAGS="--target_board=multi-sim"

And I can also do this now:

        make check 
RUNTESTFLAGS="--target_board=multi-sim\{-EB,-EL\}\{-mhard-float,-msoft-float\}"

What do people think?  Can we add this baseboard to dejagnu?

Steve Ellcey
address@hidden



2013-07-24  Steve Ellcey  <address@hidden>

        * Makefile.am (baseboard_SCRIPTS): Add multi-sim.exp baseboard.
        * Makefile.in: Regenerate.
        * baseboards/multi-sim.exp: New.


diff --git a/Makefile.am b/Makefile.am
index aeaccc6..495c75d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -170,6 +170,7 @@ baseboard_SCRIPTS = \
        baseboards/mn10300-sim.exp \
        baseboards/msparc-cygmon.exp \
        baseboards/mt-sid.exp \
+       baseboards/multi-sim.exp \
        baseboards/op50n.exp \
        baseboards/powerpc-bug.exp \
        baseboards/powerpc-bug1.exp \
diff --git a/baseboards/multi-sim.exp b/baseboards/multi-sim.exp
new file mode 100644
index 0000000..c61da21
--- /dev/null
+++ b/baseboards/multi-sim.exp
@@ -0,0 +1,121 @@
+# Copyright (C) 2013 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 3 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Contributed by Steve Ellcey <address@hidden>.
+
+# Use env to check env. variables and modify the simulator.
+global env
+global SIM
+
+# 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 "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+proc dynamic_linker_flag { args } {
+  global board
+  set compiler "[board_info $board compiler]"
+  set mflags "[board_info $board multilib_flags]"
+  set result [remote_exec host "$compiler $mflags --print-sysroot"]
+  set output [lindex $result 1]
+  set toutput [string trimright $output]
+  set dynlinkerdir "$toutput/usr/lib"
+  set dynlinker [glob -directory $dynlinkerdir ld-*.so] 
+  verbose "dynamic_linker_flag: -Wl,--dynamic-linker=$dynlinker"
+  return "-Wl,--dynamic-linker=$dynlinker"
+}
+proc rpath_flags { args } {
+  global board
+  set compiler "[board_info $board compiler]"
+  set mflags "[board_info $board multilib_flags] [libgloss_include_flags] 
[newlib_include_flags] [libgloss_link_flags] [libgloss_link_flags]"
+  set rpathflags ""
+  set gccpath [get_multilibs]
+  foreach i {libgcc_s.so  libstdc++.so libgfortran.so libc.so} {
+    set result [remote_exec host "$compiler $mflags --print-file-name=$i"]
+    set output [lindex $result 1]
+    set rpathdir [file dirname $output]
+    # If testing an installed compiler, --print-file-name  will find the
+    # libraries, if testing a built but not installed compiler it will not
+    # find libraries like libstdc++.so or libgfortran.so so we add the
+    # extra hack/search so it can work.
+    if [string match "." $rpathdir] {
+      if [string match $i "libstdc++.so"] {
+       if [file exists "$gccpath/libstdc++-v3/src/.libs/libstdc++.so"] {
+         set rpathflags "$rpathflags 
-Wl,-rpath=$gccpath/libstdc++-v3/src/.libs"
+       }
+      }
+      if [string match $i "libgfortran.so"] {
+       if [file exists "$gccpath/libgfortran/.libs/libgfortran.so"] {
+         set rpathflags "$rpathflags -Wl,-rpath=$gccpath/libgfortran/.libs"
+       }
+      }
+    } else {
+      set rpathflags "$rpathflags -Wl,-rpath=$rpathdir"
+    }
+  }
+  verbose "rpath_flags: $rpathflags"
+  return $rpathflags
+}
+
+# The TCL SIM variable takes precedence over the DEJAGNU_SIM env. variable
+if {[info exists env(DEJAGNU_SIM)] && ![info exists SIM]} {
+    set SIM $env(DEJAGNU_SIM)
+}
+
+# This tells it which directory to look in for the simulator.
+setup_sim sim
+
+# No multilib flags are set by default.
+if {[info exists env(DEJAGNU_SIM_MULTILIB_OPTIONS)]} {
+    process_multilib_options "$env(DEJAGNU_SIM_MULTILIB_OPTIONS)"
+} else {
+    process_multilib_options ""
+}
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+if {[info exists env(DEJAGNU_SIM_GCC)]} {
+    set_board_info compiler "$env(DEJAGNU_SIM_GCC)"
+} else {
+    set_board_info compiler "[find_gcc]"
+}
+
+if {[info exists env(DEJAGNU_SIM_INCLUDE_FLAGS)]} {
+    set_board_info cflags "[libgloss_include_flags] [newlib_include_flags] 
$env(DEJAGNU_SIM_INCLUDE_FLAGS)"
+} else {
+    set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+}
+if {[info exists env(DEJAGNU_SIM_LINK_FLAGS)]} {
+    set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] 
[dynamic_linker_flag] [rpath_flags] $env(DEJAGNU_SIM_LINK_FLAGS)"
+} else {
+    set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] 
[dynamic_linker_flag] [rpath_flags]"
+}
+if {[info exists env(DEJAGNU_SIM_LDSCRIPT)]} {
+    set_board_info ldscript "$env(DEJAGNU_SIM_LDSCRIPT)"
+}
+if {[info exists env(DEJAGNU_SIM_OPTIONS)]} {
+    set_board_info sim,options "$env(DEJAGNU_SIM_OPTIONS)"
+}
+
+if {[info exists env(DEJAGNU_SIM_BOARD_INFO)]} {
+    foreach e $env(DEJAGNU_SIM_BOARD_INFO) {
+       set_board_info [lindex $e 0] [lindex $e 1]
+  }
+}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]