1*2b30b764SAndrew Jones#!/bin/bash 2*2b30b764SAndrew Jones 3*2b30b764SAndrew Jonesif [ ! -f config.mak ]; then 4*2b30b764SAndrew Jones echo "run ./configure && make first. See ./configure -h" 5*2b30b764SAndrew Jones exit 6*2b30b764SAndrew Jonesfi 7*2b30b764SAndrew Jonessource config.mak 8*2b30b764SAndrew Jonessource scripts/functions.bash 9*2b30b764SAndrew Jones 10*2b30b764SAndrew Jonesone_kernel="$1" 11*2b30b764SAndrew Jones[ "$one_kernel" ] && one_kernel_base=$(basename $one_kernel) 12*2b30b764SAndrew Jonesone_testname="$2" 13*2b30b764SAndrew Jonesif [ -n "$one_kernel" ] && [ ! -f $one_kernel ]; then 14*2b30b764SAndrew Jones echo "$one_kernel doesn't exist" 15*2b30b764SAndrew Jones exit 1 16*2b30b764SAndrew Joneselif [ -n "$one_kernel" ] && [ -z "$one_testname" ]; then 17*2b30b764SAndrew Jones one_testname="${one_kernel_base%.*}" 18*2b30b764SAndrew Jonesfi 19*2b30b764SAndrew Jones 20*2b30b764SAndrew Jonesunittests=$TEST_DIR/unittests.cfg 21*2b30b764SAndrew Jonesmkdir -p tests 22*2b30b764SAndrew Jones 23*2b30b764SAndrew Jonesfunction mkstandalone() 24*2b30b764SAndrew Jones{ 25*2b30b764SAndrew Jones local testname="$1" 26*2b30b764SAndrew Jones local groups="$2" 27*2b30b764SAndrew Jones local smp="$3" 28*2b30b764SAndrew Jones local kernel="$4" 29*2b30b764SAndrew Jones local opts="$5" 30*2b30b764SAndrew Jones local arch="$6" 31*2b30b764SAndrew Jones local check="$7" 32*2b30b764SAndrew Jones 33*2b30b764SAndrew Jones if [ -z "$testname" ]; then 34*2b30b764SAndrew Jones return 1 35*2b30b764SAndrew Jones fi 36*2b30b764SAndrew Jones 37*2b30b764SAndrew Jones if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then 38*2b30b764SAndrew Jones return 1 39*2b30b764SAndrew Jones fi 40*2b30b764SAndrew Jones 41*2b30b764SAndrew Jones standalone=tests/$testname 42*2b30b764SAndrew Jones cmdline=$(DRYRUN=yes ./$TEST_DIR-run $kernel) 43*2b30b764SAndrew Jones if [ $? -ne 0 ]; then 44*2b30b764SAndrew Jones echo $cmdline 45*2b30b764SAndrew Jones exit 1 46*2b30b764SAndrew Jones fi 47*2b30b764SAndrew Jones qemu=$(cut -d' ' -f1 <<< "$cmdline") 48*2b30b764SAndrew Jones cmdline=$(cut -d' ' -f2- <<< "$cmdline") 49*2b30b764SAndrew Jones 50*2b30b764SAndrew Jones cat <<EOF > $standalone 51*2b30b764SAndrew Jones#!/bin/sh 52*2b30b764SAndrew Jones 53*2b30b764SAndrew JonesEOF 54*2b30b764SAndrew Jonesif [ "$arch" ]; then 55*2b30b764SAndrew Jones cat <<EOF >> $standalone 56*2b30b764SAndrew JonesARCH=\`uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/'\` 57*2b30b764SAndrew Jones[ "\$ARCH" = "aarch64" ] && ARCH="arm64" 58*2b30b764SAndrew Jonesif [ "\$ARCH" != "$arch" ]; then 59*2b30b764SAndrew Jones echo "skip $testname ($arch only)" 1>&2 60*2b30b764SAndrew Jones exit 1 61*2b30b764SAndrew Jonesfi 62*2b30b764SAndrew Jones 63*2b30b764SAndrew JonesEOF 64*2b30b764SAndrew Jonesfi 65*2b30b764SAndrew Jonesif [ "$check" ]; then 66*2b30b764SAndrew Jones cat <<EOF >> $standalone 67*2b30b764SAndrew Jonesfor param in $check; do 68*2b30b764SAndrew Jones path=\`echo \$param | cut -d= -f1\` 69*2b30b764SAndrew Jones value=\`echo \$param | cut -d= -f2\` 70*2b30b764SAndrew Jones if [ -f "\$path" ] && [ "\`cat \$path\`" != "\$value" ]; then 71*2b30b764SAndrew Jones echo "skip $testname (\$path not equal to \$value)" 1>&2 72*2b30b764SAndrew Jones exit 1 73*2b30b764SAndrew Jones fi 74*2b30b764SAndrew Jonesdone 75*2b30b764SAndrew Jones 76*2b30b764SAndrew JonesEOF 77*2b30b764SAndrew Jonesfi 78*2b30b764SAndrew Jonesif [ ! -f $kernel ]; then 79*2b30b764SAndrew Jones cat <<EOF >> $standalone 80*2b30b764SAndrew Jonesecho "skip $testname (test kernel not present)" 1>&2 81*2b30b764SAndrew Jonesexit 1 82*2b30b764SAndrew JonesEOF 83*2b30b764SAndrew Joneselse 84*2b30b764SAndrew Jones cat <<EOF >> $standalone 85*2b30b764SAndrew Jonestrap 'rm -f \$bin; exit 1' HUP INT TERM 86*2b30b764SAndrew Jonesbin=\`mktemp\` 87*2b30b764SAndrew Jonesbase64 -d << 'BIN_EOF' | zcat > \$bin && 88*2b30b764SAndrew JonesEOF 89*2b30b764SAndrew Jonesgzip - < $kernel | base64 >> $standalone 90*2b30b764SAndrew Jones cat <<EOF >> $standalone 91*2b30b764SAndrew JonesBIN_EOF 92*2b30b764SAndrew Jones 93*2b30b764SAndrew Jonesqemu="$qemu" 94*2b30b764SAndrew Jonesif [ "\$QEMU" ]; then 95*2b30b764SAndrew Jones qemu="\$QEMU" 96*2b30b764SAndrew Jonesfi 97*2b30b764SAndrew Jonescmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`" 98*2b30b764SAndrew Jonesecho \$qemu $cmdline -smp $smp $opts 99*2b30b764SAndrew Jones\$qemu \$cmdline -smp $smp $opts 100*2b30b764SAndrew Jonesret=\$? 101*2b30b764SAndrew Jonesecho Return value from qemu: \$ret 102*2b30b764SAndrew Jonesif [ \$ret -le 1 ]; then 103*2b30b764SAndrew Jones echo PASS $testname 1>&2 104*2b30b764SAndrew Joneselse 105*2b30b764SAndrew Jones echo FAIL $testname 1>&2 106*2b30b764SAndrew Jonesfi 107*2b30b764SAndrew Jonesrm -f \$bin 108*2b30b764SAndrew Jonesexit 0 109*2b30b764SAndrew JonesEOF 110*2b30b764SAndrew Jonesfi 111*2b30b764SAndrew Joneschmod +x $standalone 112*2b30b764SAndrew Jonesreturn 0 113*2b30b764SAndrew Jones} 114*2b30b764SAndrew Jones 115*2b30b764SAndrew Jonestrap 'rm -f $cfg; exit 1' HUP INT TERM 116*2b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT 117*2b30b764SAndrew Jonescfg=$(mktemp) 118*2b30b764SAndrew Jones 119*2b30b764SAndrew Jonesif [ -n "$one_testname" ]; then 120*2b30b764SAndrew Jones if grep -q "\[$one_testname\]" $unittests; then 121*2b30b764SAndrew Jones sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \ 122*2b30b764SAndrew Jones | awk '!/^\[/ || NR == 1' > $cfg 123*2b30b764SAndrew Jones else 124*2b30b764SAndrew Jones echo "[$one_testname]" > $cfg 125*2b30b764SAndrew Jones echo "file = $one_kernel_base" >> $cfg 126*2b30b764SAndrew Jones fi 127*2b30b764SAndrew Joneselse 128*2b30b764SAndrew Jones cp -f $unittests $cfg 129*2b30b764SAndrew Jonesfi 130*2b30b764SAndrew Jones 131*2b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone 132