11b7dd7d3SSergey Bronnikov#!/usr/bin/env 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 89f159116SPeter Xusource scripts/common.bash 92b30b764SAndrew Jones 10ba4a6fcfSRadim Krčmářtemp_file () 11ba4a6fcfSRadim Krčmář{ 12ba4a6fcfSRadim Krčmář local var="$1" 13b2a2aa5dSAndrew Jones local file="${2:--}" 14ba4a6fcfSRadim Krčmář 15ba4a6fcfSRadim Krčmář echo "$var=\`mktemp\`" 16ba4a6fcfSRadim Krčmář echo "cleanup=\"\$$var \$cleanup\"" 17a3831260SAndrew Jones echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 2" 18ba4a6fcfSRadim Krčmář 19b2a2aa5dSAndrew Jones gzip -c "$file" | base64 20ba4a6fcfSRadim Krčmář 21ba4a6fcfSRadim Krčmář echo "BIN_EOF" 22ba4a6fcfSRadim Krčmář echo "chmod +x \$$var" 23ba4a6fcfSRadim Krčmář} 24ba4a6fcfSRadim Krčmář 25b6ff178dSAndrew Jonesconfig_export () 26b6ff178dSAndrew Jones{ 27b6ff178dSAndrew Jones echo "export $(grep ^${1}= config.mak)" 28b6ff178dSAndrew Jones} 29b6ff178dSAndrew Jones 30eec22c7cSRadim Krčmářgenerate_test () 312b30b764SAndrew Jones{ 32730843c4SRadim Krčmář local args=() 33730843c4SRadim Krčmář for arg in "${@}"; do 34730843c4SRadim Krčmář args+=("$(printf "%q" "$arg")") 35730843c4SRadim Krčmář done 362b30b764SAndrew Jones 371b7dd7d3SSergey Bronnikov echo "#!/usr/bin/env bash" 3857ab5a6dSThomas Huth echo "export KUT_STANDALONE=yes" 39b16df9eeSAndrew Jones echo "export ENVIRON_DEFAULT=$ENVIRON_DEFAULT" 409374d112SLukáš Doktor echo "export HOST=\$(uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/')" 4156c886b0SPeter Feiner echo "export PRETTY_PRINT_STACKS=no" 4256c886b0SPeter Feiner 43b6ff178dSAndrew Jones config_export ARCH 44b6ff178dSAndrew Jones config_export ARCH_NAME 45*5f77b72dSJean-Philippe Brucker config_export TARGET_CPU 46*5f77b72dSJean-Philippe Brucker config_export DEFAULT_QEMU_CPU 47560cd30bSRadim Krčmář 483244d846SAndrew Jones echo "echo BUILD_HEAD=$(cat build-head)" 493244d846SAndrew Jones 502b30b764SAndrew Jones if [ ! -f $kernel ]; then 5107a07ffeSRadim Krčmář echo 'echo "skip '"$testname"' (test kernel not present)"' 52a3831260SAndrew Jones echo 'exit 2' 53a3831260SAndrew Jones return 54eec22c7cSRadim Krčmář fi 55d4c68647SRadim Krčmář 56949e210fSRadim Krčmář echo "trap 'rm -f \$cleanup' EXIT" 57ba4a6fcfSRadim Krčmář 583f8d4194SAndrew Jones if [ "$FIRMWARE" ]; then 593f8d4194SAndrew Jones temp_file FIRMWARE "$FIRMWARE" 603f8d4194SAndrew Jones echo 'export FIRMWARE' 613f8d4194SAndrew Jones fi 623f8d4194SAndrew Jones 63b16df9eeSAndrew Jones if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ]; then 641ea4709cSAndrew Jones temp_file ERRATATXT "$ERRATATXT" 651ea4709cSAndrew Jones echo 'export ERRATATXT' 661ea4709cSAndrew Jones fi 671ea4709cSAndrew Jones 68ba4a6fcfSRadim Krčmář temp_file bin "$kernel" 693df129a6SNicholas Piggin # Don't want to expand $bin but print it as-is. 703df129a6SNicholas Piggin # shellcheck disable=SC2016 7107a07ffeSRadim Krčmář args[3]='$bin' 7207a07ffeSRadim Krčmář 731b7dd7d3SSergey Bronnikov (echo "#!/usr/bin/env bash" 74b2a2aa5dSAndrew Jones cat scripts/arch-run.bash "$TEST_DIR/run") | temp_file RUNTIME_arch_run 75ba4a6fcfSRadim Krčmář 76e9ae9613SRadim Krčmář echo "exec {stdout}>&1" 77e9ae9613SRadim Krčmář echo "RUNTIME_log_stdout () { cat >&\$stdout; }" 781abbc2ceSRadim Krčmář echo "RUNTIME_log_stderr () { cat >&2; }" 79e9ae9613SRadim Krčmář 8007a07ffeSRadim Krčmář cat scripts/runtime.bash 812b30b764SAndrew Jones 827f01fa71SNicholas Piggin echo "run ${args[*]}" 83eec22c7cSRadim Krčmář} 84eec22c7cSRadim Krčmář 85eec22c7cSRadim Krčmářfunction mkstandalone() 86eec22c7cSRadim Krčmář{ 87eec22c7cSRadim Krčmář local testname="$1" 88eec22c7cSRadim Krčmář 89eec22c7cSRadim Krčmář if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then 90a3831260SAndrew Jones return 91eec22c7cSRadim Krčmář fi 92eec22c7cSRadim Krčmář 93eec22c7cSRadim Krčmář standalone=tests/$testname 94eec22c7cSRadim Krčmář 95eec22c7cSRadim Krčmář generate_test "$@" > $standalone 96eec22c7cSRadim Krčmář 972b30b764SAndrew Jones chmod +x $standalone 98c8104a66SPaolo Bonzini echo Written $standalone. 992b30b764SAndrew Jones} 1002b30b764SAndrew Jones 101b16df9eeSAndrew Jonesif [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then 102b16df9eeSAndrew Jones echo "$ERRATATXT not found. (ERRATATXT=$ERRATATXT)" >&2 103b16df9eeSAndrew Jones exit 2 104b16df9eeSAndrew Jonesfi 105b16df9eeSAndrew Jones 1062b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT 1072b30b764SAndrew Jonescfg=$(mktemp) 1082b30b764SAndrew Jones 1092800cc92SRadim Krčmářunittests=$TEST_DIR/unittests.cfg 1102800cc92SRadim Krčmářone_kernel="$1" 1112800cc92SRadim Krčmář 1122800cc92SRadim Krčmářif [ "$one_kernel" ]; then 1132800cc92SRadim Krčmář [ ! -f $one_kernel ] && { 1142800cc92SRadim Krčmář echo "$one_kernel doesn't exist" 1152800cc92SRadim Krčmář exit 1 1162800cc92SRadim Krčmář } 1172800cc92SRadim Krčmář 1182800cc92SRadim Krčmář one_kernel_base=$(basename $one_kernel) 1192800cc92SRadim Krčmář one_testname="${2:-${one_kernel_base%.*}}" 1202800cc92SRadim Krčmář 1212b30b764SAndrew Jones if grep -q "\[$one_testname\]" $unittests; then 1222b30b764SAndrew Jones sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \ 1232b30b764SAndrew Jones | awk '!/^\[/ || NR == 1' > $cfg 1242b30b764SAndrew Jones else 1252b30b764SAndrew Jones echo "[$one_testname]" > $cfg 1262b30b764SAndrew Jones echo "file = $one_kernel_base" >> $cfg 1272b30b764SAndrew Jones fi 1282b30b764SAndrew Joneselse 1292b30b764SAndrew Jones cp -f $unittests $cfg 1302b30b764SAndrew Jonesfi 1312b30b764SAndrew Jones 1322800cc92SRadim Krčmářmkdir -p tests 1332800cc92SRadim Krčmář 1342b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone 135