Passing options and running multiple testsuites#
You can pass multiple options to the testsuite using the
--target_board
option of DejaGNU, either passed as part of
RUNTESTFLAGS
, or directly to runtest if you prefer to
work outside the makefiles. For example,
make check-g++ RUNTESTFLAGS="--target_board=unix/-O3/-fmerge-constants"
will run the standard g++ testsuites (‘unix’ is the target name
for a standard native testsuite situation), passing
-O3 -fmerge-constants
to the compiler on every test, i.e.,
slashes separate options.
You can run the testsuites multiple times using combinations of options with a syntax similar to the brace expansion of popular shells:
..."--target_board=arm-sim\{-mhard-float,-msoft-float\}\{-O1,-O2,-O3,\}"
(Note the empty option caused by the trailing comma in the final group.)
The following will run each testsuite eight times using the arm-sim
target, as if you had specified all possible combinations yourself:
--target_board='arm-sim/-mhard-float/-O1 \
arm -sim/-mhard-float/-O2 \
arm -sim/-mhard-float/-O3 \
arm -sim/-mhard-float \
arm -sim/-msoft-float/-O1 \
arm -sim/-msoft-float/-O2 \
arm -sim/-msoft-float/-O3 \
arm -sim/-msoft-float'
They can be combined as many times as you wish, in arbitrary ways. This list:
..."--target_board=unix/-Wextra\{-O3,-fno-strength\}\{-fomit-frame,\}"
will generate four combinations, all involving -Wextra
.
The disadvantage to this method is that the testsuites are run in serial,
which is a waste on multiprocessor systems. For users with GNU Make and
a shell which performs brace expansion, you can run the testsuites in
parallel by having the shell perform the combinations and make
do the parallel runs. Instead of using --target_board
, use a
special makefile target:
make -jN check-testsuite//test-target/option1/option2/...
For example,
make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
will run three concurrent ‘make-gcc’ testsuites, eventually testing all
ten combinations as described above. Note that this is currently only
supported in the gcc
subdirectory. (To see how this works, try
typing echo before the example given here.)