aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/testsuite/bfin/allinsn.exp34
-rw-r--r--sim/testsuite/cris/c/c.exp16
-rw-r--r--sim/testsuite/lib/compilercheck.c5
-rw-r--r--sim/testsuite/lib/sim-defs.exp38
4 files changed, 53 insertions, 40 deletions
diff --git a/sim/testsuite/bfin/allinsn.exp b/sim/testsuite/bfin/allinsn.exp
index d5269da..a9dc084 100644
--- a/sim/testsuite/bfin/allinsn.exp
+++ b/sim/testsuite/bfin/allinsn.exp
@@ -1,42 +1,16 @@
# Analog Devices Blackfin simulator testsuite
+# Set a default CPU to satisfy bfin-elf-gcc requirements. BF537 should work
+# with all standard Blackfin toolchains.
+set CC_FOR_TARGET "[find_gcc] -mcpu=bf537"
sim_init
+unset CC_FOR_TARGET
if [istarget bfin-*-elf] {
# all machines
set all_machs "bfin"
- global objdir
-
- # See if we have a preprocessor available.
- if { [target_compile $srcdir/$subdir/usp.S $objdir/compilercheck.x "preprocess" \
- [list "incdir=$srcdir/$subdir"]] == "" } {
- set has_cpp 1
- } {
- verbose -log "Can't execute preprocessor"
- set has_cpp 0
- }
-
- # See if we have a compiler available.
- if { [target_compile $srcdir/$subdir/argc.c $objdir/compilercheck.x "executable" \
- [list "incdir=$srcdir/$subdir" "additional_flags=-msim"]] == "" } {
- set has_cc 1
- } {
- verbose -log "Can't execute C compiler"
- set has_cc 0
- }
-
foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.\[csS\]]] {
- # If we don't have a compiler available, skip tests :(.
- if { $has_cpp == 0 && [string match "*.S" $src] } {
- untested $src
- continue
- }
- if { $has_cc == 0 && [string match "*.c" $src] } {
- untested $src
- continue
- }
-
# If we're only testing specific files and this isn't one of them,
# skip it.
if ![runtest_file_p $runtests $src] {
diff --git a/sim/testsuite/cris/c/c.exp b/sim/testsuite/cris/c/c.exp
index 08a085d..dfafa00 100644
--- a/sim/testsuite/cris/c/c.exp
+++ b/sim/testsuite/cris/c/c.exp
@@ -33,11 +33,8 @@ if [istarget cris*-*-elf] {
}
# Using target_compile, since it is less noisy,
-global objdir
-if { [target_compile $srcdir/$subdir/hello.c $objdir/compilercheck.x \
- "executable" "" ] == "" } {
- set has_cc 1
-
+global global_cc_works
+if { $global_cc_works == 1 } {
# Now check if we can link a program dynamically, and where
# libc.so is located. If it is, we provide a sym link to the
# directory (which must end in /lib) in [pwd], so /lib/ld.so.1 is
@@ -45,8 +42,9 @@ if { [target_compile $srcdir/$subdir/hello.c $objdir/compilercheck.x \
# replacing the board ldflags like below as we don't care about
# detrimental effects on the executable from the specs and
# -static in the board ldflags, we just add -Bdynamic.
+ global objdir
if [regexp "(.*/lib)/libc.so" \
- [target_compile $srcdir/$subdir/hello.c $objdir/compilercheck.x \
+ [target_compile $srcdir/lib/compilercheck.c $objdir/compilercheck.x \
"executable" \
"ldflags=-print-file-name=libc.so -Wl,-Bdynamic"] \
xxx libcsodir] {
@@ -54,9 +52,7 @@ if { [target_compile $srcdir/$subdir/hello.c $objdir/compilercheck.x \
verbose -log "Creating link to $libcsodir in [pwd]"
file link lib $libcsodir
}
-} {
- verbose -log "Can't execute C compiler"
- set has_cc 0
+ file delete $objdir/compilercheck.x
}
# Like istarget, except take a list of targets as a string.
@@ -92,7 +88,7 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
}
# Note absence of CC in results, but don't make a big fuss over it.
- if { $has_cc == 0 } {
+ if { $global_cc_works == 0 } {
untested $testname
continue
}
diff --git a/sim/testsuite/lib/compilercheck.c b/sim/testsuite/lib/compilercheck.c
new file mode 100644
index 0000000..63a9577
--- /dev/null
+++ b/sim/testsuite/lib/compilercheck.c
@@ -0,0 +1,5 @@
+/* Used by the test harness to verify working compiler & preprocessor. */
+int main()
+{
+ return 0;
+}
diff --git a/sim/testsuite/lib/sim-defs.exp b/sim/testsuite/lib/sim-defs.exp
index 46a8b3f..f399d2f 100644
--- a/sim/testsuite/lib/sim-defs.exp
+++ b/sim/testsuite/lib/sim-defs.exp
@@ -33,11 +33,35 @@ proc sim_init { args } {
# all simulators.
unset_currtarget_info ldscript
+ sim_init_toolchain
+
# Need to return an empty string. This tells dejagnu to *not* re-run us
# with the exact test that we're about to run.
return ""
}
+# Initialize the toolchain settings for this port.
+# Needs to be called once per-port.
+
+proc sim_init_toolchain {} {
+ global objdir
+ global srcdir
+ global global_cpp_works
+ global global_cc_works
+
+ # See if we have a preprocessor available.
+ set result [target_compile $srcdir/lib/compilercheck.c \
+ $objdir/compilercheck.x "preprocess" ""]
+ set global_cpp_works [string equal "" "$result"]
+
+ # See if we have a compiler available.
+ set result [target_compile $srcdir/lib/compilercheck.c \
+ $objdir/compilercheck.x "executable" ""]
+ set global_cc_works [string equal "" "$result"]
+
+ file delete $objdir/compilercheck.x
+}
+
# Print the version of the simulator being tested.
# Required by dejagnu.
@@ -185,6 +209,8 @@ proc run_sim_test { name requested_machs } {
global cpu_option
global cpu_option_sep
global SIMFLAGS_FOR_TARGET
+ global global_cpp_works
+ global global_cc_works
if ![file exists $sim_path] {
unsupported "$name: missing simulator $sim_path"
@@ -327,11 +353,23 @@ proc run_sim_test { name requested_machs } {
}
if [string match "*.c" $sourcefile] {
+ # If we don't have a compiler available, skip tests :(.
+ if { $global_cc_works == 0 } {
+ untested $subdir/$name
+ return
+ }
+
set comp_output [target_compile $sourcefile $objdir/${name}.x "executable" \
[list "incdir=$srcdir/$subdir" "additional_flags=$c_as_options $c_ld_options $opts(cc,$mach)"]]
set method "compiling/linking"
} else {
if [string match "*.S" $sourcefile] {
+ # If we don't have a preprocessor available, skip tests :(.
+ if { $global_cpp_works == 0 } {
+ untested $subdir/$name
+ return
+ }
+
set comp_output [target_compile $sourcefile $objdir/${name}.o "object" \
[list "incdir=$srcdir/$subdir" "additional_flags=$c_as_options"]]
set method "compiling"