1#!/usr/bin/env bash 2 3if [ ! -f config.mak ]; then 4 echo "run ./configure && make first. See ./configure -h" 5 exit 1 6fi 7source config.mak 8source scripts/common.bash 9source scripts/vmm.bash 10 11vmm_check_supported 12 13temp_file () 14{ 15 local var="$1" 16 local file="${2:--}" 17 18 echo "$var=\`mktemp\`" 19 echo "cleanup=\"\$$var \$cleanup\"" 20 echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 2" 21 22 gzip -c "$file" | base64 23 24 echo "BIN_EOF" 25 echo "chmod +x \$$var" 26} 27 28config_export () 29{ 30 echo "export $(grep ^${1}= config.mak)" 31} 32 33generate_test () 34{ 35 local args=() 36 for arg in "${@}"; do 37 args+=("$(printf "%q" "$arg")") 38 done 39 40 echo "#!/usr/bin/env bash" 41 echo "export KUT_STANDALONE=yes" 42 echo "export ENVIRON_DEFAULT=$ENVIRON_DEFAULT" 43 echo "export HOST=\$(uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/')" 44 echo "export PRETTY_PRINT_STACKS=no" 45 46 config_export ARCH 47 config_export ARCH_NAME 48 config_export TARGET_CPU 49 config_export DEFAULT_QEMU_CPU 50 config_export TARGET 51 52 echo "echo BUILD_HEAD=$(cat build-head)" 53 54 if [ ! -f $kernel ]; then 55 echo 'echo "skip '"$testname"' (test kernel not present)"' 56 echo 'exit 2' 57 return 58 fi 59 60 echo "trap 'rm -f \$cleanup' EXIT" 61 62 if [ "$FIRMWARE" ]; then 63 temp_file FIRMWARE "$FIRMWARE" 64 echo 'export FIRMWARE' 65 fi 66 67 if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ]; then 68 temp_file ERRATATXT "$ERRATATXT" 69 echo 'export ERRATATXT' 70 fi 71 72 temp_file bin "$kernel" 73 # Don't want to expand $bin but print it as-is. 74 # shellcheck disable=SC2016 75 args[3]='$bin' 76 77 (echo "#!/usr/bin/env bash" 78 cat scripts/vmm.bash scripts/arch-run.bash "$TEST_DIR/run") \ 79 | temp_file RUNTIME_arch_run 80 81 echo "exec {stdout}>&1" 82 echo "RUNTIME_log_stdout () { cat >&\$stdout; }" 83 echo "RUNTIME_log_stderr () { cat >&2; }" 84 85 cat scripts/vmm.bash 86 cat scripts/runtime.bash 87 88 echo "run ${args[*]}" 89} 90 91function mkstandalone() 92{ 93 local testname="$1" 94 95 if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then 96 return 97 fi 98 99 standalone=tests/$testname 100 101 generate_test "$@" > $standalone 102 103 chmod +x $standalone 104 echo Written $standalone. 105} 106 107if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then 108 echo "$ERRATATXT not found. (ERRATATXT=$ERRATATXT)" >&2 109 exit 2 110fi 111 112trap 'rm -f $cfg' EXIT 113cfg=$(mktemp) 114 115unittests=$TEST_DIR/unittests.cfg 116one_kernel="$1" 117 118if [ "$one_kernel" ]; then 119 [ ! -f $one_kernel ] && { 120 echo "$one_kernel doesn't exist" 121 exit 1 122 } 123 124 one_kernel_base=$(basename $one_kernel) 125 one_testname="${2:-${one_kernel_base%.*}}" 126 127 if grep -q "\[$one_testname\]" $unittests; then 128 sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \ 129 | awk '!/^\[/ || NR == 1' > $cfg 130 else 131 echo "[$one_testname]" > $cfg 132 echo "file = $one_kernel_base" >> $cfg 133 fi 134else 135 cp -f $unittests $cfg 136fi 137 138mkdir -p tests 139 140for_each_unittest $cfg mkstandalone 141