linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: "Paul E . McKenney" <paulmck@kernel.org>
Cc: Pranith Kumar <bobby.prani@gmail.com>,
	Alviro Iskandar Setiawan <alviro.iskandar@gnuweeb.org>,
	Ammar Faizi <ammarfaizi2@gnuweeb.org>,
	David Laight <David.Laight@ACULAB.COM>,
	Mark Brown <broonie@kernel.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Shuah Khan <shuah@kernel.org>,
	linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
	Willy Tarreau <w@1wt.eu>
Subject: [PATCH 15/17] selftests/nolibc: add a "run" target to start the kernel in QEMU
Date: Tue, 19 Jul 2022 23:44:47 +0200	[thread overview]
Message-ID: <20220719214449.2520-17-w@1wt.eu> (raw)
In-Reply-To: <20220719214449.2520-1-w@1wt.eu>

The "run" target will build the kernel and start it in QEMU. The
"rerun" target will not have the kernel dependency and will just try
to start QEMU. The QEMU architecture used to start the kernel is
derived from the configured ARCH. This might need to be improved
for archs which include different variants under the same name
(mips vs mipsel, +/-64, riscv32 vs riscv64). This could be tested
for i386, x86, arm, arm64, mips and riscv (the later two reporting
issues on some tests).

It is possible to pass a test specification for nolibc-test in the TEST
variable, which will be passed as-is as NOLIBC_TEST.

On success, the number of successful tests is printed. On failure, failed
lines are individually printed.

Signed-off-by: Willy Tarreau <w@1wt.eu>
---
 tools/testing/selftests/nolibc/Makefile | 33 +++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
index c104719eae8b..7c1f5360f454 100644
--- a/tools/testing/selftests/nolibc/Makefile
+++ b/tools/testing/selftests/nolibc/Makefile
@@ -31,6 +31,27 @@ DEFCONFIG_mips    = malta_defconfig
 DEFCONFIG_riscv   = defconfig
 DEFCONFIG         = $(DEFCONFIG_$(ARCH))
 
+# optional tests to run (default = all)
+TEST =
+
+# QEMU_ARCH: arch names used by qemu
+QEMU_ARCH_i386    = i386
+QEMU_ARCH_x86     = x86_64
+QEMU_ARCH_arm64   = aarch64
+QEMU_ARCH_arm     = arm
+QEMU_ARCH_mips    = mipsel  # works with malta_defconfig
+QEMU_ARCH_riscv   = riscv64
+QEMU_ARCH         = $(QEMU_ARCH_$(ARCH))
+
+# QEMU_ARGS : some arch-specific args to pass to qemu
+QEMU_ARGS_i386    = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_x86     = -M pc -append "console=ttyS0,9600 i8042.noaux panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_arm64   = -M virt -cpu cortex-a53 -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_arm     = -M virt -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_mips    = -M malta -append "panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS_riscv   = -M virt -append "console=ttyS0 panic=-1 $(TEST:%=NOLIBC_TEST=%)"
+QEMU_ARGS         = $(QEMU_ARGS_$(ARCH))
+
 # OUTPUT is only set when run from the main makefile, otherwise
 # it defaults to this nolibc directory.
 OUTPUT ?= $(CURDIR)/
@@ -61,8 +82,20 @@ defconfig:
 kernel: initramfs
 	$(Q)$(MAKE) -C $(srctree) ARCH=$(ARCH) CC=$(CC) CROSS_COMPILE=$(CROSS_COMPILE) $(IMAGE_NAME) CONFIG_INITRAMFS_SOURCE=$(CURDIR)/initramfs
 
+# run the tests after building the kernel
+run: kernel
+	$(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
+	$(Q)grep -w FAIL "$(CURDIR)/run.out" && echo "See all results in $(CURDIR)/run.out" || echo "$$(grep -c ^[0-9].*OK $(CURDIR)/run.out) test(s) passed."
+
+# re-run the tests from an existing kernel
+rerun:
+	$(Q)qemu-system-$(QEMU_ARCH) -display none -no-reboot -kernel "$(srctree)/$(IMAGE)" -serial stdio $(QEMU_ARGS) > "$(CURDIR)/run.out"
+	$(Q)grep -w FAIL "$(CURDIR)/run.out" && echo "See all results in $(CURDIR)/run.out" || echo "$$(grep -c ^[0-9].*OK $(CURDIR)/run.out) test(s) passed."
+
 clean:
 	$(call QUIET_CLEAN, nolibc-test)
 	$(Q)rm -f nolibc-test
 	$(call QUIET_CLEAN, initramfs)
 	$(Q)rm -rf initramfs
+	$(call QUIET_CLEAN, run.out)
+	$(Q)rm -rf run.out
-- 
2.17.5


  parent reply	other threads:[~2022-07-19 21:45 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-19 21:44 [PATCH 00/17] nolibc: add preliminary self tests Willy Tarreau
2022-07-19 21:44 ` [PATCH 01/17] tools/nolibc: make argc 32-bit in riscv startup code Willy Tarreau
2022-07-19 21:44 ` [PATCH 02/17] tools/nolibc: fix build warning in sys_mmap() when my_syscall6 is not defined Willy Tarreau
2022-07-19 21:44 ` [PATCH 03/17] tools/nolibc: make sys_mmap() automatically use the right __NR_mmap definition Willy Tarreau
2022-07-19 21:44 ` [PATCH 04/17] selftests/nolibc: add basic infrastructure to ease creation of nolibc tests Willy Tarreau
2022-07-19 21:44 ` [PATCH 05/17] selftests/nolibc: support a test definition format Willy Tarreau
2022-07-19 21:44 ` [PATCH 06/17] selftests/nolibc: implement a few tests for various syscalls Willy Tarreau
2022-07-19 21:44 ` [PATCH 07/17] selftests/nolibc: add a few tests for some libc functions Willy Tarreau
2022-07-19 21:44 ` [PATCH 07/17] selftests/nolibc: add a few tests for some stdlib functions Willy Tarreau
2022-07-19 21:44 ` [PATCH 08/17] selftests/nolibc: exit with poweroff on success when getpid() == 1 Willy Tarreau
2022-07-19 21:44 ` [PATCH 09/17] selftests/nolibc: on x86, support exiting with isa-debug-exit Willy Tarreau
2022-07-19 21:44 ` [PATCH 10/17] selftests/nolibc: recreate and populate /dev and /proc if missing Willy Tarreau
2022-07-19 21:44 ` [PATCH 11/17] selftests/nolibc: condition some tests on /proc existence Willy Tarreau
2022-07-19 21:44 ` [PATCH 12/17] selftests/nolibc: support glibc as well Willy Tarreau
2022-07-19 21:44 ` [PATCH 13/17] selftests/nolibc: add a "kernel" target to build the kernel with the initramfs Willy Tarreau
2022-07-19 21:44 ` [PATCH 14/17] selftests/nolibc: add a "defconfig" target Willy Tarreau
2022-07-19 21:44 ` Willy Tarreau [this message]
2022-07-19 21:44 ` [PATCH 16/17] selftests/nolibc: "sysroot" target installs a local copy of the sysroot Willy Tarreau
2022-07-19 21:44 ` [PATCH 17/17] selftests/nolibc: add a "help" target Willy Tarreau
2022-07-19 22:49 ` [PATCH 00/17] nolibc: add preliminary self tests Paul E. McKenney
2022-07-20  3:26   ` Willy Tarreau
2022-07-20 16:03 ` Ammar Faizi
2022-07-20 16:20   ` Willy Tarreau
2022-07-20 17:05     ` Ammar Faizi
2022-07-20 17:14       ` Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220719214449.2520-17-w@1wt.eu \
    --to=w@1wt.eu \
    --cc=David.Laight@ACULAB.COM \
    --cc=alviro.iskandar@gnuweeb.org \
    --cc=ammarfaizi2@gnuweeb.org \
    --cc=bobby.prani@gmail.com \
    --cc=broonie@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=paulmck@kernel.org \
    --cc=shuah@kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).