-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
+# Free Software Foundation, Inc.
# This program 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
+# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
-#
+#
# This program 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 this program; if not, write to the Free Software
-# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
# This file is just 'sed -e 's/77/fortran/g' \
# -e 's/f2c/gfortran' g77.exp > gfortran.exp'
#
load_lib prune.exp
load_lib gcc-defs.exp
+load_lib timeout.exp
load_lib target-libpath.exp
+load_lib target-supports.exp
#
# GFORTRAN_UNDER_TEST is the compiler under test.
# verify that the compiler exists
if { [is_remote host] || [which $compiler] != 0 } then {
set tmp [remote_exec host "$compiler -v"]
- set status [lindex $tmp 0];
- set output [lindex $tmp 1];
+ set status [lindex $tmp 0]
+ set output [lindex $tmp 1]
regexp " version \[^\n\r\]*" $output version
if { $status == 0 && [info exists version] } then {
if [is_remote host] {
#
proc gfortran_link_flags { paths } {
- global rootme
global srcdir
global ld_library_path
global GFORTRAN_UNDER_TEST
+ global shlib_ext
set gccpath ${paths}
set libio_dir ""
set flags ""
set ld_library_path "."
+ set shlib_ext [get_shlib_extension]
+ verbose "shared lib extension: $shlib_ext"
if { $gccpath != "" } {
if [file exists "${gccpath}/libgfortran/.libs/libgfortran.a"] {
+ # Some targets use libgfortran.a%s in their specs, so they need a -B option
+ # for uninstalled testing.
+ append flags "-B${gccpath}/libgfortran/.libs "
append flags "-L${gccpath}/libgfortran/.libs "
append ld_library_path ":${gccpath}/libgfortran/.libs"
}
+ if [file exists "${gccpath}/libgfortran/.libs/libgfortran.${shlib_ext}"] {
+ append flags "-L${gccpath}/libgfortran/.libs "
+ append ld_library_path ":${gccpath}/libgfortran/.libs"
+ }
if [file exists "${gccpath}/libgfortran/libgforbegin.a"] {
append flags "-L${gccpath}/libgfortran "
}
if [file exists "${gccpath}/libiberty/libiberty.a"] {
append flags "-L${gccpath}/libiberty "
}
- append ld_library_path ":${rootme}"
- set compiler [lindex $GFORTRAN_UNDER_TEST 0]
- if { [is_remote host] == 0 && [which $compiler] != 0 } {
- foreach i "[exec $compiler --print-multi-lib]" {
- set mldir ""
- regexp -- "\[a-z0-9=/\.-\]*;" $i mldir
- set mldir [string trimright $mldir "\;@"]
- if { "$mldir" == "." } {
- continue
- }
- if { [llength [glob -nocomplain ${rootme}/${mldir}/libgcc_s*.so.*]] >= 1 } {
- append ld_library_path ":${rootme}/${mldir}"
- }
- }
- }
+ append ld_library_path \
+ [gcc-set-multilib-library-path $GFORTRAN_UNDER_TEST]
}
set_ld_library_path_env_vars
global base_dir
global tmpdir
global libdir
- global gluefile wrap_flags;
+ global gluefile wrap_flags
global objdir srcdir
global ALWAYS_GFORTRANFLAGS
global TOOL_EXECUTABLE TOOL_OPTIONS
if ![info exists GFORTRAN_UNDER_TEST] then {
if [info exists TOOL_EXECUTABLE] {
- set GFORTRAN_UNDER_TEST $TOOL_EXECUTABLE;
+ set GFORTRAN_UNDER_TEST $TOOL_EXECUTABLE
} else {
if { [is_remote host] || ! [info exists TESTING_IN_BUILD_TREE] } {
set GFORTRAN_UNDER_TEST [transform gfortran]
} else {
- set GFORTRAN_UNDER_TEST [findfile $base_dir/../gfortran "$base_dir/../gfortran -B$base_dir/../" [findfile $base_dir/gfortran "$base_dir/gfortran -B$base_dir/" [transform gfortran]]]
+ set GFORTRAN_UNDER_TEST [findfile $base_dir/../../gfortran "$base_dir/../../gfortran -B$base_dir/../../" [findfile $base_dir/gfortran "$base_dir/gfortran -B$base_dir/" [transform gfortran]]]
}
}
}
if ![is_remote host] {
if [info exists TOOL_OPTIONS] {
- lappend ALWAYS_GFORTRANFLAGS "ldflags=[gfortran_link_flags [get_multilibs ${TOOL_OPTIONS}] ]";
+ lappend ALWAYS_GFORTRANFLAGS "ldflags=[gfortran_link_flags [get_multilibs ${TOOL_OPTIONS}] ]"
} else {
- lappend ALWAYS_GFORTRANFLAGS "ldflags=[gfortran_link_flags [get_multilibs] ]";
+ lappend ALWAYS_GFORTRANFLAGS "ldflags=[gfortran_link_flags [get_multilibs] ]"
}
}
if [info exists TOOL_OPTIONS] {
- lappend ALWAYS_GFORTRANFLAGS "additional_flags=$TOOL_OPTIONS";
+ lappend ALWAYS_GFORTRANFLAGS "additional_flags=$TOOL_OPTIONS"
+ }
+
+ # On the SPU, most of the fortran test cases exceed local store size.
+ # Use automatic overlay support to make them fit.
+ if { [check_effective_target_spu_auto_overlay] } {
+ lappend ALWAYS_GFORTRANFLAGS "ldflags=-Wl,--auto-overlay"
+ lappend ALWAYS_GFORTRANFLAGS "ldflags=-Wl,--reserved-space=131072"
}
verbose -log "ALWAYS_GFORTRANFLAGS set to $ALWAYS_GFORTRANFLAGS"
#
proc gfortran_target_compile { source dest type options } {
- global tmpdir;
+ global tmpdir
global gluefile wrap_flags
- global ALWAYS_GFORTRANFLAGS;
- global GFORTRAN_UNDER_TEST;
+ global ALWAYS_GFORTRANFLAGS
+ global GFORTRAN_UNDER_TEST
if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } {
lappend options "libs=${gluefile}"
lappend options "ldflags=${wrap_flags}"
}
- lappend options "compiler=$GFORTRAN_UNDER_TEST";
-
- set options [concat "$ALWAYS_GFORTRANFLAGS" $options];
+ lappend options "compiler=$GFORTRAN_UNDER_TEST"
+ lappend options "timeout=[timeout_value]"
+ set options [concat "$ALWAYS_GFORTRANFLAGS" $options]
+ set options [dg-additional-files-options $options $source]
return [target_compile $source $dest $type $options]
}