sim: bfin: tweak run-tests for parallel usage
authorMike Frysinger <vapier@gentoo.org>
Mon, 17 Jun 2013 04:58:56 +0000 (04:58 +0000)
committerMike Frysinger <vapier@gentoo.org>
Mon, 17 Jun 2013 04:58:56 +0000 (04:58 +0000)
sim/testsuite/sim/bfin/ChangeLog
sim/testsuite/sim/bfin/run-tests.sh

index a6344949b137d65ac66f4fbac4b6d1ef7b959276..b3cf8febacbb2228ba9b1faa4182d3bf684aecea 100644 (file)
@@ -1,3 +1,7 @@
+2013-06-17  Mike Frysinger  <vapier@gentoo.org>
+
+       * run-tests.sh: Add support for running in parallel.
+
 2013-06-17  Mike Frysinger  <vapier@gentoo.org>
 
        * se_allopcodes.h: Add debugging related comments.
index 2b6181b5fb3437b5a6653e6c34313962f086cd3a..34a490c52d6c3405531a64b917e194b57872a84d 100644 (file)
@@ -10,6 +10,7 @@ usage() {
          -rs          Run on simulator
          -rj <board>  Run on board via JTAG
          -rh <ip>     Run on board ip
+         -j <num>     Num jobs to run
        EOF
        exit ${0:-1}
 }
@@ -20,11 +21,14 @@ boardjtag=
 run_sim=false
 run_jtag=false
 run_host=false
+jobs=`getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1`
+: $(( jobs += 1 ))
 while [ -n "$1" ] ; do
        case $1 in
                -rs) run_sim=true;;
                -rj) boardjtag=$2; shift; run_jtag=true;;
                -rh) boardip=$2; shift; run_host=true;;
+               -j)  jobs=$2; shift;;
                -*)  usage;;
                *)   break;;
        esac
@@ -36,6 +40,8 @@ if ${run_host} && [ -z "${boardip}" ] ; then
        usage
 fi
 
+cd "${0%/*}" || exit 1
+
 dorsh() {
        # rsh sucks and does not pass up its exit status, so we have to:
        #  on board:
@@ -85,7 +91,6 @@ dojtag() {
 }
 
 testit() {
-
        local name=$1 x=$2 y=`echo $2 | sed 's:\.[xX]$::'` out rsh_out addr
        shift; shift
        local fail=`grep xfail ${y}`
@@ -145,8 +150,7 @@ pf() {
 [ $# -eq 0 ] && set -- *.[Ss]
 bins_hw=$( (${run_sim} || ${run_jtag}) && printf '%s.x ' "$@")
 if ${run_host} ; then
-       for files in $@
-       do
+       for files in "$@" ; do
                tmp=`grep -e CYCLES -e TESTSET -e CLI -e STI -e RTX -e RTI -e SEQSTAT $files -l`
                if [ -z "${tmp}" ] ; then
                        bins_host=`echo "${bins_host} ${files}.X"`
@@ -194,20 +198,41 @@ if ${run_host} ; then
        rsh -l root $boardip '/bin/dmesg -c' > /dev/null
 fi
 
+SIM="../../../bfin/run"
+if [ ! -x ${SIM} ] ; then
+       SIM="bfin-elf-run"
+fi
+echo "Using sim: ${SIM}"
+
 ret=0
 unexpected_fail=0
 unexpected_pass=0
 expected_pass=0
+pids=()
 for s in "$@" ; do
-       ${run_sim}  && testit SIM  ${s}.x bfin-elf-run `sed -n '/^# sim:/s|^[^:]*:||p' ${s}`
+       (
+       out=$(
+       ${run_sim}  && testit SIM  ${s}.x ${SIM} `sed -n '/^# sim:/s|^[^:]*:||p' ${s}`
        ${run_jtag} && testit JTAG ${s}.x dojtag
        ${run_host} && testit HOST ${s}.X dorsh
+       )
+       case $out in
+       *PASS*) ;;
+       *) echo "$out" ;;
+       esac
+       ) &
+       pids+=( $! )
+       if [[ ${#pids[@]} -gt ${jobs} ]] ; then
+               wait ${pids[0]}
+               pids=( ${pids[@]:1} )
+       fi
 done
+wait
 
 killall -q bfin-gdbproxy
 if [ ${ret} -eq 0 ] ; then
        rm -f gdbproxy.log
-       ${MAKE} -s clean &
+#      ${MAKE} -s clean &
        exit 0
 else
        echo number of failures ${ret}
@@ -222,4 +247,3 @@ else
        fi
        exit 1
 fi
-