xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision 56c886b0af47c0e46a06b5706c2148c0c476a78d)
12b30b764SAndrew Jones#!/bin/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
82b30b764SAndrew Jonessource scripts/functions.bash
92b30b764SAndrew Jones
1007a07ffeSRadim Krčmářescape ()
1107a07ffeSRadim Krčmář{
1207a07ffeSRadim Krčmář	for arg in "${@}"; do
1307a07ffeSRadim Krčmář		printf "%q " "$arg"; # XXX: trailing whitespace
1407a07ffeSRadim Krčmář	done
1507a07ffeSRadim Krčmář}
1607a07ffeSRadim Krčmář
17ba4a6fcfSRadim Krčmářtemp_file ()
18ba4a6fcfSRadim Krčmář{
19ba4a6fcfSRadim Krčmář	local var="$1"
20b2a2aa5dSAndrew Jones	local file="${2:--}"
21ba4a6fcfSRadim Krčmář
22ba4a6fcfSRadim Krčmář	echo "$var=\`mktemp\`"
23ba4a6fcfSRadim Krčmář	echo "cleanup=\"\$$var \$cleanup\""
24a3831260SAndrew Jones	echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 2"
25ba4a6fcfSRadim Krčmář
26b2a2aa5dSAndrew Jones	gzip -c "$file" | base64
27ba4a6fcfSRadim Krčmář
28ba4a6fcfSRadim Krčmář	echo "BIN_EOF"
29ba4a6fcfSRadim Krčmář	echo "chmod +x \$$var"
30ba4a6fcfSRadim Krčmář}
31ba4a6fcfSRadim Krčmář
32b6ff178dSAndrew Jonesconfig_export ()
33b6ff178dSAndrew Jones{
34b6ff178dSAndrew Jones	echo "export $(grep ^${1}= config.mak)"
35b6ff178dSAndrew Jones}
36b6ff178dSAndrew Jones
37eec22c7cSRadim Krčmářgenerate_test ()
382b30b764SAndrew Jones{
3907a07ffeSRadim Krčmář	local args=( $(escape "${@}") )
402b30b764SAndrew Jones
41949e210fSRadim Krčmář	echo "#!/bin/bash"
42b6ff178dSAndrew Jones	echo "export STANDALONE=yes"
43b6ff178dSAndrew Jones	echo "export HOST=\$(uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/')"
44*56c886b0SPeter Feiner	echo "export PRETTY_PRINT_STACKS=no"
45*56c886b0SPeter Feiner
46b6ff178dSAndrew Jones	config_export ARCH
47b6ff178dSAndrew Jones	config_export ARCH_NAME
48b6ff178dSAndrew Jones	config_export PROCESSOR
49560cd30bSRadim Krčmář
503244d846SAndrew Jones	echo "echo BUILD_HEAD=$(cat build-head)"
513244d846SAndrew Jones
522b30b764SAndrew Jones	if [ ! -f $kernel ]; then
5307a07ffeSRadim Krčmář		echo 'echo "skip '"$testname"' (test kernel not present)"'
54a3831260SAndrew Jones		echo 'exit 2'
55a3831260SAndrew Jones		return
56eec22c7cSRadim Krčmář	fi
57d4c68647SRadim Krčmář
58949e210fSRadim Krčmář	echo "trap 'rm -f \$cleanup' EXIT"
59ba4a6fcfSRadim Krčmář
603f8d4194SAndrew Jones	if [ "$FIRMWARE" ]; then
613f8d4194SAndrew Jones		temp_file FIRMWARE "$FIRMWARE"
623f8d4194SAndrew Jones		echo 'export FIRMWARE'
633f8d4194SAndrew Jones	fi
643f8d4194SAndrew Jones
65ba4a6fcfSRadim Krčmář	temp_file bin "$kernel"
6607a07ffeSRadim Krčmář	args[3]='$bin'
6707a07ffeSRadim Krčmář
68b2a2aa5dSAndrew Jones	(echo "#!/bin/bash"
69b2a2aa5dSAndrew Jones	 cat scripts/arch-run.bash "$TEST_DIR/run") | temp_file RUNTIME_arch_run
70ba4a6fcfSRadim Krčmář
7107a07ffeSRadim Krčmář	cat scripts/runtime.bash
722b30b764SAndrew Jones
7307a07ffeSRadim Krčmář	echo "run ${args[@]}"
74eec22c7cSRadim Krčmář}
75eec22c7cSRadim Krčmář
76eec22c7cSRadim Krčmářfunction mkstandalone()
77eec22c7cSRadim Krčmář{
78eec22c7cSRadim Krčmář	local testname="$1"
79eec22c7cSRadim Krčmář
80eec22c7cSRadim Krčmář	if [ -z "$testname" ]; then
81a3831260SAndrew Jones		return
822b30b764SAndrew Jones	fi
83d4c68647SRadim Krčmář
84eec22c7cSRadim Krčmář	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
85a3831260SAndrew Jones		return
86eec22c7cSRadim Krčmář	fi
87eec22c7cSRadim Krčmář
88eec22c7cSRadim Krčmář	standalone=tests/$testname
89eec22c7cSRadim Krčmář
90eec22c7cSRadim Krčmář	generate_test "$@" > $standalone
91eec22c7cSRadim Krčmář
922b30b764SAndrew Jones	chmod +x $standalone
93c8104a66SPaolo Bonzini	echo Written $standalone.
942b30b764SAndrew Jones}
952b30b764SAndrew Jones
962b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT
972b30b764SAndrew Jonescfg=$(mktemp)
982b30b764SAndrew Jones
992800cc92SRadim Krčmářunittests=$TEST_DIR/unittests.cfg
1002800cc92SRadim Krčmářone_kernel="$1"
1012800cc92SRadim Krčmář
1022800cc92SRadim Krčmářif [ "$one_kernel" ]; then
1032800cc92SRadim Krčmář	[ ! -f $one_kernel ] && {
1042800cc92SRadim Krčmář		echo "$one_kernel doesn't exist"
1052800cc92SRadim Krčmář		exit 1
1062800cc92SRadim Krčmář	}
1072800cc92SRadim Krčmář
1082800cc92SRadim Krčmář	one_kernel_base=$(basename $one_kernel)
1092800cc92SRadim Krčmář	one_testname="${2:-${one_kernel_base%.*}}"
1102800cc92SRadim Krčmář
1112b30b764SAndrew Jones	if grep -q "\[$one_testname\]" $unittests; then
1122b30b764SAndrew Jones		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
1132b30b764SAndrew Jones			| awk '!/^\[/ || NR == 1' > $cfg
1142b30b764SAndrew Jones	else
1152b30b764SAndrew Jones		echo "[$one_testname]" > $cfg
1162b30b764SAndrew Jones		echo "file = $one_kernel_base" >> $cfg
1172b30b764SAndrew Jones	fi
1182b30b764SAndrew Joneselse
1192b30b764SAndrew Jones	cp -f $unittests $cfg
1202b30b764SAndrew Jonesfi
1212b30b764SAndrew Jones
1222800cc92SRadim Krčmářmkdir -p tests
1232800cc92SRadim Krčmář
1242b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone
125