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