sim: tests: support .S/.c files

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>
This commit is contained in:
Mike Frysinger 2011-05-16 18:48:31 +00:00
parent fd20d931f1
commit 0641104b2e
2 changed files with 47 additions and 9 deletions

View 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> 2011-05-11 Joseph Myers <joseph@codesourcery.com>
Hans-Peter Nilsson <hp@axis.com> Hans-Peter Nilsson <hp@axis.com>

View file

@ -169,6 +169,7 @@ proc sim_run { prog sim_opts prog_opts redir options } {
# mach: [all | machine names] # mach: [all | machine names]
# as[(mach-list)]: <assembler options> # as[(mach-list)]: <assembler options>
# ld[(mach-list)]: <linker options> # ld[(mach-list)]: <linker options>
# cc[(mach-list)]: <compiler options>
# sim[(mach-list)]: <simulator options> # sim[(mach-list)]: <simulator options>
# progopts: <arguments to the program being simulated> # progopts: <arguments to the program being simulated>
# output: program output pattern to match with string-match # output: program output pattern to match with string-match
@ -190,6 +191,7 @@ proc run_sim_test { name requested_machs } {
global cpu_option global cpu_option
global global_as_options global global_as_options
global global_ld_options global global_ld_options
global global_cc_options
global global_sim_options global global_sim_options
if [string match "*/*" $name] { if [string match "*/*" $name] {
@ -207,6 +209,7 @@ proc run_sim_test { name requested_machs } {
# Clear default options # Clear default options
set opts(as) "" set opts(as) ""
set opts(ld) "" set opts(ld) ""
set opts(cc) ""
set opts(progopts) "" set opts(progopts) ""
set opts(sim) "" set opts(sim) ""
set opts(output) "" set opts(output) ""
@ -222,6 +225,9 @@ proc run_sim_test { name requested_machs } {
if ![info exists global_ld_options] { if ![info exists global_ld_options] {
set global_ld_options "" set global_ld_options ""
} }
if ![info exists global_cc_options] {
set global_cc_options ""
}
if ![info exists global_sim_options] { if ![info exists global_sim_options] {
set global_sim_options "" set global_sim_options ""
} }
@ -234,6 +240,9 @@ proc run_sim_test { name requested_machs } {
if [info exists opts(ld,$m)] { if [info exists opts(ld,$m)] {
unset opts(ld,$m) unset opts(ld,$m)
} }
if [info exists opts(cc,$m)] {
unset opts(cc,$m)
}
if [info exists opts(sim,$m)] { if [info exists opts(sim,$m)] {
unset opts(sim,$m) unset opts(sim,$m)
} }
@ -310,23 +319,44 @@ proc run_sim_test { name requested_machs } {
if [info exists cpu_option] { if [info exists cpu_option] {
set as_options "$as_options $cpu_option=$mach" set as_options "$as_options $cpu_option=$mach"
} }
set comp_output [target_assemble $sourcefile ${name}.o "$as_options $global_as_options"] regsub {(^ *| +)([^ ]+)} "$as_options $global_as_options" { -Wa,\2} c_as_options
if ![string match "" $comp_output] {
verbose -log "$comp_output" 3
fail "$mach $testname (assembling)"
continue
}
if ![info exists opts(ld,$mach)] { if ![info exists opts(ld,$mach)] {
set opts(ld,$mach) $opts(ld) set opts(ld,$mach) $opts(ld)
} }
regsub {(^ *| +)([^ ]+)} "$opts(ld,$mach) $global_ld_options" { -Wl,\2} c_ld_options
set comp_output [target_link ${name}.o ${name}.x "$opts(ld,$mach) $global_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 method "linking"
}
if ![string match "" $comp_output] { if ![string match "" $comp_output] {
verbose -log "$comp_output" 3 verbose -log "$comp_output" 3
fail "$mach $testname (linking)" fail "$mach $testname (${method})"
continue continue
} }