xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision abdc5d02a7796a55802509ac9bb704c721f2a5f6)
11b7dd7d3SSergey Bronnikov#!/usr/bin/env 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
89f159116SPeter Xusource scripts/common.bash
92b30b764SAndrew Jones
10ba4a6fcfSRadim Krčmářtemp_file ()
11ba4a6fcfSRadim Krčmář{
12ba4a6fcfSRadim Krčmář	local var="$1"
13b2a2aa5dSAndrew Jones	local file="${2:--}"
14ba4a6fcfSRadim Krčmář
15ba4a6fcfSRadim Krčmář	echo "$var=\`mktemp\`"
16ba4a6fcfSRadim Krčmář	echo "cleanup=\"\$$var \$cleanup\""
17a3831260SAndrew Jones	echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 2"
18ba4a6fcfSRadim Krčmář
19b2a2aa5dSAndrew Jones	gzip -c "$file" | base64
20ba4a6fcfSRadim Krčmář
21ba4a6fcfSRadim Krčmář	echo "BIN_EOF"
22ba4a6fcfSRadim Krčmář	echo "chmod +x \$$var"
23ba4a6fcfSRadim Krčmář}
24ba4a6fcfSRadim Krčmář
25b6ff178dSAndrew Jonesconfig_export ()
26b6ff178dSAndrew Jones{
27b6ff178dSAndrew Jones	echo "export $(grep ^${1}= config.mak)"
28b6ff178dSAndrew Jones}
29b6ff178dSAndrew Jones
30eec22c7cSRadim Krčmářgenerate_test ()
312b30b764SAndrew Jones{
32730843c4SRadim Krčmář	local args=()
33730843c4SRadim Krčmář	for arg in "${@}"; do
34730843c4SRadim Krčmář		args+=("$(printf "%q" "$arg")")
35730843c4SRadim Krčmář	done
362b30b764SAndrew Jones
371b7dd7d3SSergey Bronnikov	echo "#!/usr/bin/env bash"
3857ab5a6dSThomas Huth	echo "export KUT_STANDALONE=yes"
39b16df9eeSAndrew Jones	echo "export ENVIRON_DEFAULT=$ENVIRON_DEFAULT"
409374d112SLukáš Doktor	echo "export HOST=\$(uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/')"
4156c886b0SPeter Feiner	echo "export PRETTY_PRINT_STACKS=no"
4256c886b0SPeter Feiner
43b6ff178dSAndrew Jones	config_export ARCH
44b6ff178dSAndrew Jones	config_export ARCH_NAME
45*5f77b72dSJean-Philippe Brucker	config_export TARGET_CPU
46*5f77b72dSJean-Philippe Brucker	config_export DEFAULT_QEMU_CPU
47560cd30bSRadim Krčmář
483244d846SAndrew Jones	echo "echo BUILD_HEAD=$(cat build-head)"
493244d846SAndrew Jones
502b30b764SAndrew Jones	if [ ! -f $kernel ]; then
5107a07ffeSRadim Krčmář		echo 'echo "skip '"$testname"' (test kernel not present)"'
52a3831260SAndrew Jones		echo 'exit 2'
53a3831260SAndrew Jones		return
54eec22c7cSRadim Krčmář	fi
55d4c68647SRadim Krčmář
56949e210fSRadim Krčmář	echo "trap 'rm -f \$cleanup' EXIT"
57ba4a6fcfSRadim Krčmář
583f8d4194SAndrew Jones	if [ "$FIRMWARE" ]; then
593f8d4194SAndrew Jones		temp_file FIRMWARE "$FIRMWARE"
603f8d4194SAndrew Jones		echo 'export FIRMWARE'
613f8d4194SAndrew Jones	fi
623f8d4194SAndrew Jones
63b16df9eeSAndrew Jones	if [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ]; then
641ea4709cSAndrew Jones		temp_file ERRATATXT "$ERRATATXT"
651ea4709cSAndrew Jones		echo 'export ERRATATXT'
661ea4709cSAndrew Jones	fi
671ea4709cSAndrew Jones
68ba4a6fcfSRadim Krčmář	temp_file bin "$kernel"
693df129a6SNicholas Piggin	# Don't want to expand $bin but print it as-is.
703df129a6SNicholas Piggin	# shellcheck disable=SC2016
7107a07ffeSRadim Krčmář	args[3]='$bin'
7207a07ffeSRadim Krčmář
731b7dd7d3SSergey Bronnikov	(echo "#!/usr/bin/env bash"
74b2a2aa5dSAndrew Jones	 cat scripts/arch-run.bash "$TEST_DIR/run") | temp_file RUNTIME_arch_run
75ba4a6fcfSRadim Krčmář
76e9ae9613SRadim Krčmář	echo "exec {stdout}>&1"
77e9ae9613SRadim Krčmář	echo "RUNTIME_log_stdout () { cat >&\$stdout; }"
781abbc2ceSRadim Krčmář	echo "RUNTIME_log_stderr () { cat >&2; }"
79e9ae9613SRadim Krčmář
8007a07ffeSRadim Krčmář	cat scripts/runtime.bash
812b30b764SAndrew Jones
827f01fa71SNicholas Piggin	echo "run ${args[*]}"
83eec22c7cSRadim Krčmář}
84eec22c7cSRadim Krčmář
85eec22c7cSRadim Krčmářfunction mkstandalone()
86eec22c7cSRadim Krčmář{
87eec22c7cSRadim Krčmář	local testname="$1"
88eec22c7cSRadim Krčmář
89eec22c7cSRadim Krčmář	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
90a3831260SAndrew Jones		return
91eec22c7cSRadim Krčmář	fi
92eec22c7cSRadim Krčmář
93eec22c7cSRadim Krčmář	standalone=tests/$testname
94eec22c7cSRadim Krčmář
95eec22c7cSRadim Krčmář	generate_test "$@" > $standalone
96eec22c7cSRadim Krčmář
972b30b764SAndrew Jones	chmod +x $standalone
98c8104a66SPaolo Bonzini	echo Written $standalone.
992b30b764SAndrew Jones}
1002b30b764SAndrew Jones
101b16df9eeSAndrew Jonesif [ "$ENVIRON_DEFAULT" = "yes" ] && [ "$ERRATATXT" ] && [ ! -f "$ERRATATXT" ]; then
102b16df9eeSAndrew Jones	echo "$ERRATATXT not found. (ERRATATXT=$ERRATATXT)" >&2
103b16df9eeSAndrew Jones	exit 2
104b16df9eeSAndrew Jonesfi
105b16df9eeSAndrew Jones
1062b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT
1072b30b764SAndrew Jonescfg=$(mktemp)
1082b30b764SAndrew Jones
1092800cc92SRadim Krčmářunittests=$TEST_DIR/unittests.cfg
1102800cc92SRadim Krčmářone_kernel="$1"
1112800cc92SRadim Krčmář
1122800cc92SRadim Krčmářif [ "$one_kernel" ]; then
1132800cc92SRadim Krčmář	[ ! -f $one_kernel ] && {
1142800cc92SRadim Krčmář		echo "$one_kernel doesn't exist"
1152800cc92SRadim Krčmář		exit 1
1162800cc92SRadim Krčmář	}
1172800cc92SRadim Krčmář
1182800cc92SRadim Krčmář	one_kernel_base=$(basename $one_kernel)
1192800cc92SRadim Krčmář	one_testname="${2:-${one_kernel_base%.*}}"
1202800cc92SRadim Krčmář
1212b30b764SAndrew Jones	if grep -q "\[$one_testname\]" $unittests; then
1222b30b764SAndrew Jones		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
1232b30b764SAndrew Jones			| awk '!/^\[/ || NR == 1' > $cfg
1242b30b764SAndrew Jones	else
1252b30b764SAndrew Jones		echo "[$one_testname]" > $cfg
1262b30b764SAndrew Jones		echo "file = $one_kernel_base" >> $cfg
1272b30b764SAndrew Jones	fi
1282b30b764SAndrew Joneselse
1292b30b764SAndrew Jones	cp -f $unittests $cfg
1302b30b764SAndrew Jonesfi
1312b30b764SAndrew Jones
1322800cc92SRadim Krčmářmkdir -p tests
1332800cc92SRadim Krčmář
1342b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone
135