Using the -t|--threads <n> option, it is now possible to specify the amount of threads to use when running autoreconf, for example:
$ bootstrap -t 5 Since each file is autoreconf'd individually, this should not cause any sequencing issues. This reduces bootstrap runtime to about a half when using 5 threads on a dual-core machine. --- bootstrap | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/bootstrap b/bootstrap index 3434e51..00457ff 100755 --- a/bootstrap +++ b/bootstrap @@ -18,6 +18,7 @@ quiet="false" mode="autoreconf" force=0 bsp_to_build= +threads=1 usage() { @@ -29,6 +30,7 @@ usage() echo " -h .. display this message and exit" echo " -p .. regenerate preinstall.am files" echo " -o <arch> .. only generate for given <arch>" + echo " -t <n> .. use <n> threads to run autoreconf in parallel" echo " -q .. quiet, don't display directories" echo " -v .. verbose, pass -v to autotools" echo @@ -101,6 +103,11 @@ case $1 in bsp_to_build=$2 shift shift;; +-t|--th|--thr|--thre|--thread|--threads) + test $# -gt 1 || usage + threads=$2 + shift + shift;; -*) echo "unknown option $1" usage ;; *) echo "invalid parameter $1" @@ -220,6 +227,11 @@ autoreconf) fi confs=`find . -name 'configure.ac' -print` + if test "$threads" -gt 1; then + # Since jobs can't be called from a subshell, use a tempfile to store output + trap 'rm -f "$jobs_tempfile"' EXIT + jobs_tempfile=$(mktemp) + fi for i in $confs; do if test -n "$bsp_to_build"; then case $i in @@ -246,8 +258,21 @@ autoreconf) ${AUTORECONF} -i --no-recursive $verbose test -f Makefile.am && test -n "`grep 'stamp-h\.in' Makefile.in`" \ && echo timestamp > stamp-h.in - ) + ) & + if test "$threads" -gt 1; then + # Wait for amount of threads to drop below max + jobs >"$jobs_tempfile" + while test "$(wc -l "$jobs_tempfile")" -ge "$threads"; do + sleep 1 + jobs >"$jobs_tempfile" + done + rm -f "$jobs_tempfile" + trap - EXIT + else + wait + fi done + wait ;; clean) -- 1.9.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel