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:
parent
fd20d931f1
commit
0641104b2e
2 changed files with 47 additions and 9 deletions
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue