xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision e521b10727bd6233dfc94b1ef4058a0d19b791e3) !
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