mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
sim: testsuite: support parallel execution
Break up the dejagnu logic so that we can parallelize the testsuite. This takes a page from gcc & gdb where each .exp is run in isolation instead of in serial. For most targets, this doesn't make much of a difference as they only have a single .exp. A few (like cris & frv) have multiple .exp though and will see a bit of a speed up. The real gain is when testing a multitarget build. This way we can run all the targets in parallel and cut the execution time a bit. On my system, it goes from ~155sec to ~100sec. We can gain further speedups by splitting up some of the larger .exp files into smaller groups. We'll do that in a followup though.
This commit is contained in:
parent
7a259895bb
commit
804de1faf4
@ -1442,8 +1442,14 @@ EXTRA_DEJAGNU_SITE_CONFIG = site-sim-config.exp
|
||||
# Custom verbose test variables that automake doesn't provide (yet?).
|
||||
AM_V_RUNTEST = $(AM_V_RUNTEST_@AM_V@)
|
||||
AM_V_RUNTEST_ = $(AM_V_RUNTEST_@AM_DEFAULT_V@)
|
||||
AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS)";
|
||||
AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS) $*";
|
||||
AM_V_RUNTEST_1 =
|
||||
DO_RUNTEST = \
|
||||
LC_ALL=C; export LC_ALL; \
|
||||
EXPECT=${EXPECT} ; export EXPECT ; \
|
||||
runtest=$(RUNTEST); \
|
||||
$$runtest $(RUNTESTFLAGS)
|
||||
|
||||
testsuite_common_CPPFLAGS = \
|
||||
-I$(srcdir)/common \
|
||||
-I$(srcroot)/include \
|
||||
@ -2802,14 +2808,43 @@ site-sim-config.exp: Makefile
|
||||
$(foreach V,$(SIM_TOOLCHAIN_VARS),echo "set $(V) \"$($(V))\"";) \
|
||||
) > $@
|
||||
|
||||
# Ignore dirs that only contain configuration settings.
|
||||
check/./config/%.exp: ; @true
|
||||
check/./lib/%.exp: ; @true
|
||||
|
||||
check/%.exp:
|
||||
$(AM_V_at)mkdir -p testsuite/$*
|
||||
$(AM_V_RUNTEST)$(DO_RUNTEST) --objdir testsuite/$* --outdir testsuite/$* $*.exp
|
||||
|
||||
check-DEJAGNU-parallel:
|
||||
$(AM_V_at)( \
|
||||
$(MAKE) -k \
|
||||
`cd $(srcdir)/testsuite && find . -name '*.exp' -printf 'check/%p '`; \
|
||||
ret=$$?; \
|
||||
$(SHELL) $(srcroot)/contrib/dg-extract-results.sh \
|
||||
`find testsuite/ -maxdepth 4 -name testrun.sum | sort` > testrun.sum; \
|
||||
$(SHELL) $(srcroot)/contrib/dg-extract-results.sh -L \
|
||||
`find testsuite/ -maxdepth 4 -name testrun.log | sort` > testrun.log; \
|
||||
echo; \
|
||||
$(SED) -n '/^.*===.*Summary.*===/,$$p' testrun.sum; \
|
||||
exit $$ret)
|
||||
|
||||
check-DEJAGNU-single:
|
||||
$(AM_V_RUNTEST)$(DO_RUNTEST)
|
||||
|
||||
# If running a single job, invoking runtest once is faster & has nicer output.
|
||||
check-DEJAGNU: site.exp
|
||||
$(AM_V_RUNTEST)LC_ALL=C; export LC_ALL; \
|
||||
$(AM_V_at)(set -e; \
|
||||
EXPECT=${EXPECT} ; export EXPECT ; \
|
||||
runtest=$(RUNTEST); \
|
||||
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
|
||||
$$runtest $(RUNTESTFLAGS); \
|
||||
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
|
||||
fi
|
||||
case "$(MAKEFLAGS)" in \
|
||||
*-j*) $(MAKE) check-DEJAGNU-parallel;; \
|
||||
*) $(MAKE) check-DEJAGNU-single;; \
|
||||
esac; \
|
||||
else \
|
||||
echo "WARNING: could not find \`runtest'" 1>&2; :;\
|
||||
fi)
|
||||
|
||||
# These tests are build-time only tools. Override the default rules for them.
|
||||
testsuite/common/%.o: testsuite/common/%.c
|
||||
|
@ -21,7 +21,7 @@ EXTRA_DEJAGNU_SITE_CONFIG = site-sim-config.exp
|
||||
# Custom verbose test variables that automake doesn't provide (yet?).
|
||||
AM_V_RUNTEST = $(AM_V_RUNTEST_@AM_V@)
|
||||
AM_V_RUNTEST_ = $(AM_V_RUNTEST_@AM_DEFAULT_V@)
|
||||
AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS)";
|
||||
AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS) $*";
|
||||
AM_V_RUNTEST_1 =
|
||||
|
||||
site-sim-config.exp: Makefile
|
||||
@ -32,14 +32,49 @@ site-sim-config.exp: Makefile
|
||||
$(foreach V,$(SIM_TOOLCHAIN_VARS),echo "set $(V) \"$($(V))\"";) \
|
||||
) > $@
|
||||
|
||||
DO_RUNTEST = \
|
||||
LC_ALL=C; export LC_ALL; \
|
||||
EXPECT=${EXPECT} ; export EXPECT ; \
|
||||
runtest=$(RUNTEST); \
|
||||
$$runtest $(RUNTESTFLAGS)
|
||||
|
||||
# Ignore dirs that only contain configuration settings.
|
||||
check/./config/%.exp: ; @true
|
||||
check/./lib/%.exp: ; @true
|
||||
|
||||
check/%.exp:
|
||||
$(AM_V_at)mkdir -p testsuite/$*
|
||||
$(AM_V_RUNTEST)$(DO_RUNTEST) --objdir testsuite/$* --outdir testsuite/$* $*.exp
|
||||
|
||||
check-DEJAGNU-parallel:
|
||||
$(AM_V_at)( \
|
||||
$(MAKE) -k \
|
||||
`cd $(srcdir)/testsuite && find . -name '*.exp' -printf 'check/%p '`; \
|
||||
ret=$$?; \
|
||||
$(SHELL) $(srcroot)/contrib/dg-extract-results.sh \
|
||||
`find testsuite/ -maxdepth 4 -name testrun.sum | sort` > testrun.sum; \
|
||||
$(SHELL) $(srcroot)/contrib/dg-extract-results.sh -L \
|
||||
`find testsuite/ -maxdepth 4 -name testrun.log | sort` > testrun.log; \
|
||||
echo; \
|
||||
$(SED) -n '/^.*===.*Summary.*===/,$$p' testrun.sum; \
|
||||
exit $$ret)
|
||||
|
||||
check-DEJAGNU-single:
|
||||
$(AM_V_RUNTEST)$(DO_RUNTEST)
|
||||
|
||||
# If running a single job, invoking runtest once is faster & has nicer output.
|
||||
check-DEJAGNU: site.exp
|
||||
$(AM_V_RUNTEST)LC_ALL=C; export LC_ALL; \
|
||||
$(AM_V_at)(set -e; \
|
||||
EXPECT=${EXPECT} ; export EXPECT ; \
|
||||
runtest=$(RUNTEST); \
|
||||
if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \
|
||||
$$runtest $(RUNTESTFLAGS); \
|
||||
else echo "WARNING: could not find \`runtest'" 1>&2; :;\
|
||||
fi
|
||||
case "$(MAKEFLAGS)" in \
|
||||
*-j*) $(MAKE) check-DEJAGNU-parallel;; \
|
||||
*) $(MAKE) check-DEJAGNU-single;; \
|
||||
esac; \
|
||||
else \
|
||||
echo "WARNING: could not find \`runtest'" 1>&2; :;\
|
||||
fi)
|
||||
|
||||
MOSTLYCLEANFILES += \
|
||||
site-sim-config.exp testrun.log testrun.sum
|
||||
|
Loading…
Reference in New Issue
Block a user