1*a58d3d2aSXin Li#!/bin/bash 2*a58d3d2aSXin Li 3*a58d3d2aSXin Lidir="$1" 4*a58d3d2aSXin Limkdir "$dir" 5*a58d3d2aSXin Liif [ $? -ne 0 ] 6*a58d3d2aSXin Lithen 7*a58d3d2aSXin Li exit 1 8*a58d3d2aSXin Lifi 9*a58d3d2aSXin Li 10*a58d3d2aSXin Licd "$dir" 11*a58d3d2aSXin Liif [ $? -ne 0 ] 12*a58d3d2aSXin Lithen 13*a58d3d2aSXin Li exit 1 14*a58d3d2aSXin Lifi 15*a58d3d2aSXin Li 16*a58d3d2aSXin Li 17*a58d3d2aSXin Liconfigure_path="$2" 18*a58d3d2aSXin Liconfig="random_config.txt" 19*a58d3d2aSXin Li 20*a58d3d2aSXin Licase `seq 3 | shuf -n1` in 21*a58d3d2aSXin Li1) 22*a58d3d2aSXin Liapprox=--enable-float-approx 23*a58d3d2aSXin Limath=-ffast-math 24*a58d3d2aSXin Li;; 25*a58d3d2aSXin Li2) 26*a58d3d2aSXin Liapprox=--enable-float-approx 27*a58d3d2aSXin Li;; 28*a58d3d2aSXin Li*) 29*a58d3d2aSXin Liapprox= 30*a58d3d2aSXin Limath= 31*a58d3d2aSXin Li;; 32*a58d3d2aSXin Liesac 33*a58d3d2aSXin Li 34*a58d3d2aSXin LiCFLAGS='-g' 35*a58d3d2aSXin Li 36*a58d3d2aSXin Liopt=`echo -e "-O1\n-O2\n-O3" | shuf -n1` 37*a58d3d2aSXin Li 38*a58d3d2aSXin Liarch=`echo -e "\n-march=core2\n-march=sandybridge\n-march=broadwell\n-march=skylake" | shuf -n1` 39*a58d3d2aSXin Li 40*a58d3d2aSXin Lifootprint=`echo -e "\n-DSMALL_FOOTPRINT" | shuf -n1` 41*a58d3d2aSXin Listd=`echo -e "\n-std=c90\n-std=c99\n-std=c11\n-std=c17" | shuf -n1` 42*a58d3d2aSXin Lisanitize=`echo -e "\n-fsanitize=address -fno-sanitize-recover=all\n-fsanitize=undefined -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -DDISABLE_PTR_CHECK" | shuf -n1` 43*a58d3d2aSXin Li 44*a58d3d2aSXin Li 45*a58d3d2aSXin LiCFLAGS="$CFLAGS $std $opt $arch $footprint $math $sanitize" 46*a58d3d2aSXin Li 47*a58d3d2aSXin Liecho "CFLAGS=$CFLAGS" > "$config" 48*a58d3d2aSXin Li 49*a58d3d2aSXin Lilib=`echo -e "\n--disable-static\n--disable-shared" | shuf -n1` 50*a58d3d2aSXin Li 51*a58d3d2aSXin Liarithmetic=`echo -e "\n--enable-deep-plc\n--enable-dred\n--enable-osce\n--enable-dred --enable-osce\n--enable-fixed-point\n--enable-fixed-point --enable-fixed-point-debug\n--enable-fixed-point --disable-float-api\n--enable-fixed-point --enable-fixed-point-debug --disable-float-api" | shuf -n1` 52*a58d3d2aSXin Li 53*a58d3d2aSXin Licustom=`echo -e "\n--enable-custom-modes" | shuf -n1` 54*a58d3d2aSXin Li 55*a58d3d2aSXin Liasm=`echo -e "\n--disable-asm\n--disable-rtcd\n--disable-intrinsics" | shuf -n1` 56*a58d3d2aSXin Li#asm=`echo -e "\n--disable-asm\n--disable-intrinsics" | shuf -n1` 57*a58d3d2aSXin Li 58*a58d3d2aSXin Liassert=`echo -e "\n--enable-assertions" | shuf -n1` 59*a58d3d2aSXin Liharden=`echo -e "\n--enable-hardening" | shuf -n1` 60*a58d3d2aSXin Lifuzz=`echo -e "\n--enable-fuzzing" | shuf -n1` 61*a58d3d2aSXin Licheckasm=`echo -e "\n--enable-check-asm" | shuf -n1` 62*a58d3d2aSXin Lirfc8251=`echo -e "\n--disable-rfc8251" | shuf -n1` 63*a58d3d2aSXin Lilossgen=`echo -e "\n--enable-lossgen" | shuf -n1` 64*a58d3d2aSXin Li 65*a58d3d2aSXin Liif [ "$rfc8251" = --disable-rfc8251 ] 66*a58d3d2aSXin Lithen 67*a58d3d2aSXin Li vectors="$3" 68*a58d3d2aSXin Lielse 69*a58d3d2aSXin Li vectors="$4" 70*a58d3d2aSXin Lifi 71*a58d3d2aSXin Liecho using testvectors at "$vectors" >> "$config" 72*a58d3d2aSXin Li 73*a58d3d2aSXin Li 74*a58d3d2aSXin Liconfig_opt="$lib $arithmetic $custom $asm $assert $harden $fuzz $checkasm $rfc8251 $approx $lossgen" 75*a58d3d2aSXin Li 76*a58d3d2aSXin Liecho configure $config_opt >> "$config" 77*a58d3d2aSXin Li 78*a58d3d2aSXin Liexport CFLAGS 79*a58d3d2aSXin Li"$configure_path/configure" $config_opt > configure_output.txt 2>&1 80*a58d3d2aSXin Li 81*a58d3d2aSXin Liif [ $? -ne 0 ] 82*a58d3d2aSXin Lithen 83*a58d3d2aSXin Li echo configure FAIL >> "$config" 84*a58d3d2aSXin Li exit 1 85*a58d3d2aSXin Lifi 86*a58d3d2aSXin Li 87*a58d3d2aSXin Limake > make_output.txt 2>&1 88*a58d3d2aSXin Li 89*a58d3d2aSXin Liif [ $? -ne 0 ] 90*a58d3d2aSXin Lithen 91*a58d3d2aSXin Li echo make FAIL >> "$config" 92*a58d3d2aSXin Li exit 1 93*a58d3d2aSXin Lifi 94*a58d3d2aSXin Li 95*a58d3d2aSXin Li#Run valgrind 5% of the time (minus the asan cases) 96*a58d3d2aSXin Liif [ "`seq 20 | shuf -n1`" -ne 1 -o "$sanitize" = "-fsanitize=address -fno-sanitize-recover=all" ] 97*a58d3d2aSXin Lithen 98*a58d3d2aSXin Li make check > makecheck_output.txt 2>&1 99*a58d3d2aSXin Lielse 100*a58d3d2aSXin Li echo valgrind enabled >> "$config" 101*a58d3d2aSXin Li valgrind --trace-children=yes --error-exitcode=128 make check > makecheck_output.txt 2>&1 102*a58d3d2aSXin Lifi 103*a58d3d2aSXin Li 104*a58d3d2aSXin Liif [ $? -ne 0 ] 105*a58d3d2aSXin Lithen 106*a58d3d2aSXin Li echo check FAIL >> "$config" 107*a58d3d2aSXin Li exit 1 108*a58d3d2aSXin Lifi 109*a58d3d2aSXin Li 110*a58d3d2aSXin Li 111*a58d3d2aSXin Lirate=`echo -e "8000\n12000\n16000\n24000\n48000" | shuf -n1` 112*a58d3d2aSXin Liecho testvectors for "$rate" Hz > testvectors_output.txt 113*a58d3d2aSXin Li../../../run_vectors.sh . "$vectors" "$rate" >> testvectors_output.txt 2>&1 114*a58d3d2aSXin Li 115*a58d3d2aSXin Liif [ $? -ne 0 ] 116*a58d3d2aSXin Lithen 117*a58d3d2aSXin Li echo testvectors FAIL >> "$config" 118*a58d3d2aSXin Li exit 1 119*a58d3d2aSXin Lifi 120*a58d3d2aSXin Li 121*a58d3d2aSXin Liecho all tests PASS >> "$config" 122*a58d3d2aSXin Li 123*a58d3d2aSXin Li#When everything's good, do some cleaning up to save space 124*a58d3d2aSXin Limake distclean > /dev/null 2>&1 125*a58d3d2aSXin Lirm -f tmp.out 126*a58d3d2aSXin Ligzip make_output.txt 127