selftests: introduce gen_tar Makefile target
diff mbox series

Message ID
State Changes Requested
Headers show
  • selftests: introduce gen_tar Makefile target
Related show

Commit Message

Veronika Kabatova April 28, 2020, 12:34 p.m. UTC
The always packages *all* selftests and doesn't
pass along any variables to `make install` to influence what should be
built. This can result in an early error on the command line ("Unknown
tarball format TARGETS=XXX"), or unexpected test failures as the
tarball contains tests people wanted to skip on purpose.

Since the makefile already contains all the logic, we can add a target
for packaging. Keep the default .gz target the script uses, and actually
extend the supported formats by using tar's autodetection.

To not break current workflows, keep the script as
it is, with an added suggestion to use the makefile target instead.

Signed-off-by: Veronika Kabatova <>
Reviewed-by: Stefano Brivio <>
 Documentation/dev-tools/kselftest.rst        | 23 ++++++++++++++++++++
 tools/testing/selftests/Makefile             |  9 +++++++-
 tools/testing/selftests/ |  5 +++++
 3 files changed, 36 insertions(+), 1 deletion(-)

diff mbox series

diff --git a/Documentation/dev-tools/kselftest.rst b/Documentation/dev-tools/kselftest.rst
index 61ae13c44f91..3fc559bcb597 100644
--- a/Documentation/dev-tools/kselftest.rst
+++ b/Documentation/dev-tools/kselftest.rst
@@ -151,6 +151,29 @@  note some tests will require root privileges::
    $ cd kselftest
    $ ./
+Packaging selftests
+In some cases packaging is desired, such as when tests need to run on a
+different system. To package selftests, run::
+   $ make -C tools/testing/selftests gen_tar
+This generates a tarball in the `INSTALL_PATH/kselftest-packages` directory. By
+default, `.gz` format is used. The tar format can be overriden by specifying
+a `FORMAT` make variable. Any value recognized by `tar's auto-compress`_ option
+is supported, such as::
+    $ make -C tools/testing/selftests gen_tar FORMAT=.xz
+`make gen_tar` invokes `make install` so you can use it to package a subset of
+tests by using variables specified in `Running a subset of selftests`_
+    $ make -C tools/testing/selftests gen_tar TARGETS="bpf" FORMAT=.xz
+.. _tar's auto-compress:
 Contributing new tests
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index 2ff68702fd41..1195bd85af38 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -249,10 +249,17 @@  else
 	$(error Error: set INSTALL_PATH to use install)
+FORMAT ?= .gz
+TAR_PATH = $(abspath ${INSTALL_PATH}/kselftest-packages/kselftest.tar${FORMAT})
+gen_tar: install
+	@mkdir -p ${INSTALL_PATH}/kselftest-packages/
+	@tar caf ${TAR_PATH} --exclude=kselftest-packages -C ${INSTALL_PATH} .
+	@echo "Created ${TAR_PATH}"
 	@for TARGET in $(TARGETS); do \
-.PHONY: khdr all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean
+.PHONY: khdr all run_tests hotplug run_hotplug clean_hotplug run_pstore_crash install clean gen_tar
diff --git a/tools/testing/selftests/ b/tools/testing/selftests/
index 8b2b6088540d..4a974bc03385 100755
--- a/tools/testing/selftests/
+++ b/tools/testing/selftests/
@@ -49,6 +49,11 @@  main()
 	# directory
 	./ "$install_dir"
 	(cd "$install_work"; tar $copts "$dest"/kselftest${ext} $install_name)
+	# Don't put the message at the actual end as people may be parsing the
+	# "archive created" line in their scripts.
+	echo -e "\nConsider using 'make gen_tar' instead of this script\n"
 	echo "Kselftest archive kselftest${ext} created!"
 	# clean up top-level install work directory