sim: tests: support .S/.c files
authorMike Frysinger <vapier@gentoo.org>
Mon, 16 May 2011 18:48:31 +0000 (18:48 +0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 16 May 2011 18:48:31 +0000 (18:48 +0000)
Rather than requiring all sim tests to be preprocessed .s files, add
support for .S and .c files so we can easily write code using a higher
level language like C.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
sim/testsuite/ChangeLog
sim/testsuite/lib/sim-defs.exp

index ac72a3c..9755b78 100644 (file)
@@ -1,3 +1,11 @@
+2011-05-16  Mike Frysinger  <vapier@gentoo.org>
+
+       * lib/sim-defs.exp: Support cc tag in test files.
+       (run_sim_test): Support global_cc_options in boards files.  Convert
+       assembler options into compiler options (c_as_options) with -Wa.
+       Convert linker options into compiler options (c_ld_options) with -Wl.
+       Compile .c and .S files into .x programs.
+
 2011-05-11  Joseph Myers  <joseph@codesourcery.com>
            Hans-Peter Nilsson  <hp@axis.com>
 
index 1e65817..c8093a2 100644 (file)
@@ -169,6 +169,7 @@ proc sim_run { prog sim_opts prog_opts redir options } {
 # mach: [all | machine names]
 # as[(mach-list)]: <assembler options>
 # ld[(mach-list)]: <linker options>
+# cc[(mach-list)]: <compiler options>
 # sim[(mach-list)]: <simulator options>
 # progopts: <arguments to the program being simulated>
 # output: program output pattern to match with string-match
@@ -190,6 +191,7 @@ proc run_sim_test { name requested_machs } {
     global cpu_option
     global global_as_options
     global global_ld_options
+    global global_cc_options
     global global_sim_options
 
     if [string match "*/*" $name] {
@@ -207,6 +209,7 @@ proc run_sim_test { name requested_machs } {
     # Clear default options
     set opts(as) ""
     set opts(ld) ""
+    set opts(cc) ""
     set opts(progopts) ""
     set opts(sim) ""
     set opts(output) ""
@@ -222,6 +225,9 @@ proc run_sim_test { name requested_machs } {
     if ![info exists global_ld_options] {
         set global_ld_options ""
     }
+    if ![info exists global_cc_options] {
+        set global_cc_options ""
+    }
     if ![info exists global_sim_options] {
         set global_sim_options ""
     }
@@ -234,6 +240,9 @@ proc run_sim_test { name requested_machs } {
        if [info exists opts(ld,$m)] {
            unset opts(ld,$m)
        }
+       if [info exists opts(cc,$m)] {
+           unset opts(cc,$m)
+       }
        if [info exists opts(sim,$m)] {
            unset opts(sim,$m)
        }
@@ -310,23 +319,44 @@ proc run_sim_test { name requested_machs } {
        if [info exists cpu_option] {
            set as_options "$as_options $cpu_option=$mach"
        }
-       set comp_output [target_assemble $sourcefile ${name}.o "$as_options $global_as_options"]
-
-       if ![string match "" $comp_output] {
-           verbose -log "$comp_output" 3
-           fail "$mach $testname (assembling)"
-           continue
-       }
+       regsub {(^ *| +)([^ ]+)} "$as_options $global_as_options" { -Wa,\2} c_as_options
 
        if ![info exists opts(ld,$mach)] {
            set opts(ld,$mach) $opts(ld)
        }
+       regsub {(^ *| +)([^ ]+)} "$opts(ld,$mach) $global_ld_options" { -Wl,\2} c_ld_options
+
+       if ![info exists opts(cc,$mach)] {
+           set opts(cc,$mach) $opts(cc)
+       }
+
+       if [string match "*.c" $sourcefile] {
+           set comp_output [target_compile $sourcefile ${name}.x "executable" \
+               [list "incdir=$srcdir/$subdir" "additional_flags=$c_as_options $c_ld_options $opts(cc,$mach) $global_cc_options"]]
+           set method "compiling/linking"
+       } else {
+           if [string match "*.S" $sourcefile] {
+               set comp_output [target_compile $sourcefile ${name}.o "object" \
+                   [list "incdir=$srcdir/$subdir" "additional_flags=$c_as_options"]]
+               set method "compiling"
+           } else {
+               set comp_output [target_assemble $sourcefile ${name}.o "$as_options $global_as_options"]
+               set method "assembling"
+           }
+
+           if ![string match "" $comp_output] {
+               verbose -log "$comp_output" 3
+               fail "$mach $testname (${method})"
+               continue
+           }
 
-       set comp_output [target_link ${name}.o ${name}.x "$opts(ld,$mach) $global_ld_options"]
+           set comp_output [target_link ${name}.o ${name}.x "$opts(ld,$mach) $global_ld_options"]
+           set method "linking"
+       }
 
        if ![string match "" $comp_output] {
            verbose -log "$comp_output" 3
-           fail "$mach $testname (linking)"
+           fail "$mach $testname (${method})"
            continue
        }