improve testme.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
diff --git a/testme.sh b/testme.sh
index 9a9fdbd..320016e 100755
--- a/testme.sh
+++ b/testme.sh
@@ -7,13 +7,45 @@
set -e
+if [ -f /proc/cpuinfo ]
+then
+ MAKE_JOBS=$(( ($(cat /proc/cpuinfo | grep processor | tail -n -1 | cut -d':' -f2) + 1) * 2 + 1 ))
+else
+ MAKE_JOBS=8
+fi
+
ret=0
TEST_CFLAGS=""
-if [ "$#" == "1" ]
-then
- MAKE_OPTIONS=$1
-fi
+_help()
+{
+ echo "Usage options for $(basename $0) [--with-cc=arg [other options]]"
+ echo
+ echo "Executing this script without any parameter will only run the default configuration"
+ echo "that has automatically been determined for the architecture you're running."
+ echo
+ echo " --with-cc=* The compiler(s) to use for the tests"
+ echo " This is an option that will be iterated."
+ echo
+ echo "To be able to specify options a compiler has to be given."
+ echo "All options will be tested with all MP_xBIT configurations."
+ echo
+ echo " --with-{m64,m32,mx32} The architecture(s) to build and test for,"
+ echo " e.g. --with-mx32."
+ echo " This is an option that will be iterated, multiple selections are possible."
+ echo " The mx32 architecture is not supported by clang and will not be executed."
+ echo
+ echo " --cflags=* Give an option to the compiler,"
+ echo " e.g. --cflags=-g"
+ echo " This is an option that will always be passed as parameter to CC."
+ echo
+ echo " --make-option=* Give an option to make,"
+ echo " e.g. --make-option=\"-f makefile.shared\""
+ echo " This is an option that will always be passed as parameter to make."
+ echo
+ echo " --help This message"
+ exit 0
+}
_die()
{
@@ -31,19 +63,79 @@ _runtest()
{
echo -ne " Compile $1 $2"
make clean > /dev/null
- CC="$1" CFLAGS="$2 $TEST_CFLAGS" make -j8 test_standalone $MAKE_OPTIONS > /dev/null 2>test_errors.txt
+ CC="$1" CFLAGS="$2 $TEST_CFLAGS" make -j$MAKE_JOBS test_standalone $MAKE_OPTIONS > /dev/null 2>test_errors.txt
echo -e "\rRun test $1 $2"
timeout --foreground 90 ./test > test_$(echo ${1}${2} | tr ' ' '_').txt || _die "running tests" $?
}
-compilers=( $COMPILERS gcc )
+_banner()
+{
+ echo "uname="$(uname -a)
+ [[ "$#" != "0" ]] && (echo $1=$($1 -dumpversion)) || true
+}
+
+_exit()
+{
+ if [ "$ret" == "0" ]
+ then
+ echo "Tests successful"
+ else
+ echo "$ret tests timed out"
+ fi
+
+ exit $ret
+}
+
+ARCHFLAGS=""
+COMPILERS=""
+CFLAGS=""
-echo "uname="$(uname -a)
+while [ $# -gt 0 ];
+do
+ case $1 in
+ "--with-m64" | "--with-m32" | "--with-mx32")
+ ARCHFLAGS="$ARCHFLAGS ${1:6}"
+ ;;
+ --with-cc=*)
+ COMPILERS="$COMPILERS ${1#*=}"
+ ;;
+ --cflags=*)
+ CFLAGS="$CFLAGS ${1#*=}"
+ ;;
+ --make-option=*)
+ MAKE_OPTIONS="$MAKE_OPTIONS ${1#*=}"
+ ;;
+ --help)
+ _help
+ ;;
+ esac
+ shift
+done
+
+# default to gcc if nothing is given
+if [[ "$COMPILERS" == "" ]]
+then
+ _banner gcc
+ _runtest "gcc" ""
+ _exit
+fi
+
+archflags=( $ARCHFLAGS )
+compilers=( $COMPILERS )
+
+# choosing a compiler without specifying an architecture will use the default architecture
+if [ "${#archflags[@]}" == "0" ]
+then
+ archflags[0]=" "
+fi
+
+_banner
for i in "${compilers[@]}"
do
if [ -z "$(which $i)" ]
then
+ echo "Skipped compiler $i, file not found"
continue
fi
compiler_version=$(echo "$i="$($i -dumpversion))
@@ -55,28 +147,20 @@ do
TEST_CFLAGS=""
fi
echo $compiler_version
- _runtest "$i" ""
- _runtest "$i" "-DMP_8BIT"
- _runtest "$i" "-DMP_16BIT"
- _runtest "$i" "-DMP_32BIT"
- _runtest "$i -m32" ""
- _runtest "$i -m32" "-DMP_8BIT"
- _runtest "$i -m32" "-DMP_16BIT"
- _runtest "$i -m32" "-DMP_32BIT"
- if [ "$i" != "clang" ]
- then
- _runtest "$i -mx32" ""
- _runtest "$i -mx32" "-DMP_8BIT"
- _runtest "$i -mx32" "-DMP_16BIT"
- _runtest "$i -mx32" "-DMP_32BIT"
- fi
-done
-if [ "$ret" == "0" ]
-then
- echo "Tests successful"
-else
- echo "$ret tests timed out"
-fi
+ for a in "${archflags[@]}"
+ do
+ if [[ $(expr "$i" : "clang") && "$a" == "-mx32" ]]
+ then
+ echo "clang -mx32 tests skipped"
+ continue
+ fi
+
+ _runtest "$i $a" ""
+ _runtest "$i $a" "-DMP_8BIT"
+ _runtest "$i $a" "-DMP_16BIT"
+ _runtest "$i $a" "-DMP_32BIT"
+ done
+done
-exit $ret
+_exit