@@ -220,13 +220,9 @@ ifdef INSTALL_PATH
@# Ask all targets to emit their test scripts
echo "#!/bin/sh" > $(ALL_SCRIPT)
echo "BASE_DIR=\$$(realpath \$$(dirname \$$0))" >> $(ALL_SCRIPT)
- echo "cd \$$BASE_DIR" >> $(ALL_SCRIPT)
echo ". ./kselftest/runner.sh" >> $(ALL_SCRIPT)
- echo "ROOT=\$$PWD" >> $(ALL_SCRIPT)
- echo "if [ \"\$$1\" = \"--summary\" ]; then" >> $(ALL_SCRIPT)
- echo " logfile=\$$BASE_DIR/output.log" >> $(ALL_SCRIPT)
- echo " cat /dev/null > \$$logfile" >> $(ALL_SCRIPT)
- echo "fi" >> $(ALL_SCRIPT)
+ echo "TESTS=\"$(TARGETS)\"" | tr -s "/-" "_" >> $(ALL_SCRIPT)
+ echo "" >> $(ALL_SCRIPT);
@# While building run_kselftest.sh skip also non-existent TARGET dirs:
@# they could be the result of a build failure and should NOT be
@@ -234,15 +230,47 @@ ifdef INSTALL_PATH
for TARGET in $(TARGETS); do \
BUILD_TARGET=$$BUILD/$$TARGET; \
[ ! -d $(INSTALL_PATH)/$$TARGET ] && echo "Skipping non-existent dir: $$TARGET" && continue; \
- echo "[ -w /dev/kmsg ] && echo \"kselftest: Running tests in $$TARGET\" >> /dev/kmsg" >> $(ALL_SCRIPT); \
- echo "cd $$TARGET" >> $(ALL_SCRIPT); \
- echo -n "run_many" >> $(ALL_SCRIPT); \
+ echo "run_$$TARGET()" | tr -s "/-" "_" >> $(ALL_SCRIPT); \
+ echo "{" >> $(ALL_SCRIPT); \
+ echo -e "\t[ -w /dev/kmsg ] && echo \"kselftest: Running tests in $$TARGET\" >> /dev/kmsg" >> $(ALL_SCRIPT); \
+ echo -e "\tcd $$TARGET" >> $(ALL_SCRIPT); \
+ echo -en "\trun_many" >> $(ALL_SCRIPT); \
echo -n "Emit Tests for $$TARGET\n"; \
$(MAKE) -s --no-print-directory OUTPUT=$$BUILD_TARGET -C $$TARGET emit_tests >> $(ALL_SCRIPT); \
echo "" >> $(ALL_SCRIPT); \
- echo "cd \$$ROOT" >> $(ALL_SCRIPT); \
+ echo -e "\tcd \$$ROOT" >> $(ALL_SCRIPT); \
+ echo "}" >> $(ALL_SCRIPT); \
+ echo "" >> $(ALL_SCRIPT); \
done;
+ echo "usage()" >> $(ALL_SCRIPT);
+ echo "{" >> $(ALL_SCRIPT);
+ echo -e "\tcat <<EOF" >> $(ALL_SCRIPT);
+ echo "usage: \$${0##*/} OPTS" >> $(ALL_SCRIPT);
+ echo -e "\t-s | --summary\t\tOnly print summary info and put detailed log in output.log" >> $(ALL_SCRIPT);
+ echo -e "\t-t | --tests\t\tTest name you want to run specifically" >> $(ALL_SCRIPT);
+ echo -e "\t-h | --help\t\tShow this usage info" >> $(ALL_SCRIPT);
+ echo "EOF" >> $(ALL_SCRIPT);
+ echo "}" >> $(ALL_SCRIPT);
+ echo "" >> $(ALL_SCRIPT);
+
+ echo "while true; do" >> $(ALL_SCRIPT);
+ echo -e "\tcase \"\$$1\" in" >> $(ALL_SCRIPT);
+ echo -e "\t-s | --summary ) logfile=\$$BASE_DIR/output.log; cat /dev/null > \$$logfile; shift ;;" >> $(ALL_SCRIPT);
+ echo -e "\t-t | --tests ) TESTS=\$$2; shift 2 ;;" >> $(ALL_SCRIPT);
+ echo -e "\t-h | --help ) usage; exit 0;;" >> $(ALL_SCRIPT);
+ echo -e "\t\"\" ) break;;" >> $(ALL_SCRIPT);
+ echo -e "\t* ) usage; exit 1;;" >> $(ALL_SCRIPT);
+ echo -e "\tesac" >> $(ALL_SCRIPT);
+ echo "done" >> $(ALL_SCRIPT);
+ echo "" >> $(ALL_SCRIPT);
+
+ echo "cd \$$BASE_DIR" >> $(ALL_SCRIPT)
+ echo "ROOT=\$$PWD" >> $(ALL_SCRIPT)
+
+ echo "for test in \$$TESTS; do" >> $(ALL_SCRIPT); \
+ echo -e "\trun_\$$test" >> $(ALL_SCRIPT); \
+ echo "done" >> $(ALL_SCRIPT); \
chmod u+x $(ALL_SCRIPT)
else
$(error Error: set INSTALL_PATH to use install)
@@ -110,7 +110,7 @@ emit_tests:
for TEST in $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS); do \
BASENAME_TEST=`basename $$TEST`; \
echo " \\"; \
- echo -n " \"$$BASENAME_TEST\""; \
+ echo -ne "\t\t\"$$BASENAME_TEST\""; \
done; \
# define if isn't already. It is undefined in make O= case.
Currently, after generating run_kselftest.sh, there is no way to choose which test we could run. All the tests are listed together and we have to run all every time. This patch enhanced the run_kselftest.sh to make the tests individually selectable. Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> --- tools/testing/selftests/Makefile | 48 +++++++++++++++++++++++++------- tools/testing/selftests/lib.mk | 2 +- 2 files changed, 39 insertions(+), 11 deletions(-)