xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision 6ed97c50871a0d85e9ef5e1f4da96bc4263b4b97)
1#!/bin/bash
2
3if [ ! -f config.mak ]; then
4	echo "run ./configure && make first. See ./configure -h"
5	exit
6fi
7source config.mak
8source scripts/functions.bash
9
10escape ()
11{
12	for arg in "${@}"; do
13		printf "%q " "$arg"; # XXX: trailing whitespace
14	done
15}
16
17temp_file ()
18{
19	local var="$1"
20	local file="$2"
21
22	echo "$var=\`mktemp\`"
23	echo "cleanup=\"\$$var \$cleanup\""
24	echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 1"
25
26	gzip - < $file | base64
27
28	echo "BIN_EOF"
29	echo "chmod +x \$$var"
30}
31
32config_export ()
33{
34	echo "export $(grep ^${1}= config.mak)"
35}
36
37generate_test ()
38{
39	local args=( $(escape "${@}") )
40
41	echo "#!/bin/bash"
42	echo "export STANDALONE=yes"
43	echo "export HOST=\$(uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/')"
44	config_export ARCH
45	config_export ARCH_NAME
46	config_export PROCESSOR
47
48	if [ ! -f $kernel ]; then
49		echo 'echo "skip '"$testname"' (test kernel not present)"'
50		echo 'exit 1'
51		return 1
52	fi
53
54	echo "trap 'rm -f \$cleanup' EXIT"
55
56	if [ "$FIRMWARE" ]; then
57		temp_file FIRMWARE "$FIRMWARE"
58		echo 'export FIRMWARE'
59	fi
60
61	temp_file bin "$kernel"
62	args[3]='$bin'
63
64	temp_file RUNTIME_arch_run "$TEST_DIR/run"
65
66	cat scripts/runtime.bash
67
68	echo "run ${args[@]}"
69}
70
71function mkstandalone()
72{
73	local testname="$1"
74
75	if [ -z "$testname" ]; then
76		return 1
77	fi
78
79	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
80		return 1
81	fi
82
83	standalone=tests/$testname
84
85	generate_test "$@" > $standalone
86
87	chmod +x $standalone
88	echo Written $standalone.
89
90	return 0
91}
92
93trap 'rm -f $cfg' EXIT
94cfg=$(mktemp)
95
96unittests=$TEST_DIR/unittests.cfg
97one_kernel="$1"
98
99if [ "$one_kernel" ]; then
100	[ ! -f $one_kernel ] && {
101		echo "$one_kernel doesn't exist"
102		exit 1
103	}
104
105	one_kernel_base=$(basename $one_kernel)
106	one_testname="${2:-${one_kernel_base%.*}}"
107
108	if grep -q "\[$one_testname\]" $unittests; then
109		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
110			| awk '!/^\[/ || NR == 1' > $cfg
111	else
112		echo "[$one_testname]" > $cfg
113		echo "file = $one_kernel_base" >> $cfg
114	fi
115else
116	cp -f $unittests $cfg
117fi
118
119mkdir -p tests
120
121for_each_unittest $cfg mkstandalone
122