12b30b764SAndrew Jones#!/bin/bash 22b30b764SAndrew Jones 32b30b764SAndrew Jonesif [ ! -f config.mak ]; then 42b30b764SAndrew Jones echo "run ./configure && make first. See ./configure -h" 5a3831260SAndrew Jones exit 1 62b30b764SAndrew Jonesfi 72b30b764SAndrew Jonessource config.mak 82b30b764SAndrew Jonessource scripts/functions.bash 92b30b764SAndrew Jones 1007a07ffeSRadim Krčmářescape () 1107a07ffeSRadim Krčmář{ 1207a07ffeSRadim Krčmář for arg in "${@}"; do 1307a07ffeSRadim Krčmář printf "%q " "$arg"; # XXX: trailing whitespace 1407a07ffeSRadim Krčmář done 1507a07ffeSRadim Krčmář} 1607a07ffeSRadim Krčmář 17ba4a6fcfSRadim Krčmářtemp_file () 18ba4a6fcfSRadim Krčmář{ 19ba4a6fcfSRadim Krčmář local var="$1" 20b2a2aa5dSAndrew Jones local file="${2:--}" 21ba4a6fcfSRadim Krčmář 22ba4a6fcfSRadim Krčmář echo "$var=\`mktemp\`" 23ba4a6fcfSRadim Krčmář echo "cleanup=\"\$$var \$cleanup\"" 24a3831260SAndrew Jones echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 2" 25ba4a6fcfSRadim Krčmář 26b2a2aa5dSAndrew Jones gzip -c "$file" | base64 27ba4a6fcfSRadim Krčmář 28ba4a6fcfSRadim Krčmář echo "BIN_EOF" 29ba4a6fcfSRadim Krčmář echo "chmod +x \$$var" 30ba4a6fcfSRadim Krčmář} 31ba4a6fcfSRadim Krčmář 32b6ff178dSAndrew Jonesconfig_export () 33b6ff178dSAndrew Jones{ 34b6ff178dSAndrew Jones echo "export $(grep ^${1}= config.mak)" 35b6ff178dSAndrew Jones} 36b6ff178dSAndrew Jones 37eec22c7cSRadim Krčmářgenerate_test () 382b30b764SAndrew Jones{ 3907a07ffeSRadim Krčmář local args=( $(escape "${@}") ) 402b30b764SAndrew Jones 41949e210fSRadim Krčmář echo "#!/bin/bash" 42b6ff178dSAndrew Jones echo "export STANDALONE=yes" 43b6ff178dSAndrew Jones echo "export HOST=\$(uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/')" 44*56c886b0SPeter Feiner echo "export PRETTY_PRINT_STACKS=no" 45*56c886b0SPeter Feiner 46b6ff178dSAndrew Jones config_export ARCH 47b6ff178dSAndrew Jones config_export ARCH_NAME 48b6ff178dSAndrew Jones config_export PROCESSOR 49560cd30bSRadim Krčmář 503244d846SAndrew Jones echo "echo BUILD_HEAD=$(cat build-head)" 513244d846SAndrew Jones 522b30b764SAndrew Jones if [ ! -f $kernel ]; then 5307a07ffeSRadim Krčmář echo 'echo "skip '"$testname"' (test kernel not present)"' 54a3831260SAndrew Jones echo 'exit 2' 55a3831260SAndrew Jones return 56eec22c7cSRadim Krčmář fi 57d4c68647SRadim Krčmář 58949e210fSRadim Krčmář echo "trap 'rm -f \$cleanup' EXIT" 59ba4a6fcfSRadim Krčmář 603f8d4194SAndrew Jones if [ "$FIRMWARE" ]; then 613f8d4194SAndrew Jones temp_file FIRMWARE "$FIRMWARE" 623f8d4194SAndrew Jones echo 'export FIRMWARE' 633f8d4194SAndrew Jones fi 643f8d4194SAndrew Jones 65ba4a6fcfSRadim Krčmář temp_file bin "$kernel" 6607a07ffeSRadim Krčmář args[3]='$bin' 6707a07ffeSRadim Krčmář 68b2a2aa5dSAndrew Jones (echo "#!/bin/bash" 69b2a2aa5dSAndrew Jones cat scripts/arch-run.bash "$TEST_DIR/run") | temp_file RUNTIME_arch_run 70ba4a6fcfSRadim Krčmář 7107a07ffeSRadim Krčmář cat scripts/runtime.bash 722b30b764SAndrew Jones 7307a07ffeSRadim Krčmář echo "run ${args[@]}" 74eec22c7cSRadim Krčmář} 75eec22c7cSRadim Krčmář 76eec22c7cSRadim Krčmářfunction mkstandalone() 77eec22c7cSRadim Krčmář{ 78eec22c7cSRadim Krčmář local testname="$1" 79eec22c7cSRadim Krčmář 80eec22c7cSRadim Krčmář if [ -z "$testname" ]; then 81a3831260SAndrew Jones return 822b30b764SAndrew Jones fi 83d4c68647SRadim Krčmář 84eec22c7cSRadim Krčmář if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then 85a3831260SAndrew Jones return 86eec22c7cSRadim Krčmář fi 87eec22c7cSRadim Krčmář 88eec22c7cSRadim Krčmář standalone=tests/$testname 89eec22c7cSRadim Krčmář 90eec22c7cSRadim Krčmář generate_test "$@" > $standalone 91eec22c7cSRadim Krčmář 922b30b764SAndrew Jones chmod +x $standalone 93c8104a66SPaolo Bonzini echo Written $standalone. 942b30b764SAndrew Jones} 952b30b764SAndrew Jones 962b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT 972b30b764SAndrew Jonescfg=$(mktemp) 982b30b764SAndrew Jones 992800cc92SRadim Krčmářunittests=$TEST_DIR/unittests.cfg 1002800cc92SRadim Krčmářone_kernel="$1" 1012800cc92SRadim Krčmář 1022800cc92SRadim Krčmářif [ "$one_kernel" ]; then 1032800cc92SRadim Krčmář [ ! -f $one_kernel ] && { 1042800cc92SRadim Krčmář echo "$one_kernel doesn't exist" 1052800cc92SRadim Krčmář exit 1 1062800cc92SRadim Krčmář } 1072800cc92SRadim Krčmář 1082800cc92SRadim Krčmář one_kernel_base=$(basename $one_kernel) 1092800cc92SRadim Krčmář one_testname="${2:-${one_kernel_base%.*}}" 1102800cc92SRadim Krčmář 1112b30b764SAndrew Jones if grep -q "\[$one_testname\]" $unittests; then 1122b30b764SAndrew Jones sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \ 1132b30b764SAndrew Jones | awk '!/^\[/ || NR == 1' > $cfg 1142b30b764SAndrew Jones else 1152b30b764SAndrew Jones echo "[$one_testname]" > $cfg 1162b30b764SAndrew Jones echo "file = $one_kernel_base" >> $cfg 1172b30b764SAndrew Jones fi 1182b30b764SAndrew Joneselse 1192b30b764SAndrew Jones cp -f $unittests $cfg 1202b30b764SAndrew Jonesfi 1212b30b764SAndrew Jones 1222800cc92SRadim Krčmářmkdir -p tests 1232800cc92SRadim Krčmář 1242b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone 125