xref: /linux/tools/testing/selftests/lib.mk (revision 8fe6e53a8ed5f043ff4e6a366ebb3a641114546b)
1# This mimics the top-level Makefile. We do it explicitly here so that this
2# Makefile can operate with or without the kbuild infrastructure.
3CC := $(CROSS_COMPILE)gcc
4
5ifeq (0,$(MAKELEVEL))
6OUTPUT := $(shell pwd)
7endif
8
9TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
10TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
11
12all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
13
14define RUN_TESTS
15	@for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
16		BASENAME_TEST=`basename $$TEST`;	\
17		if [ ! -x $$BASENAME_TEST ]; then	\
18			echo "selftests: Warning: file $$BASENAME_TEST is not executable, correct this.";\
19			echo "selftests: $$BASENAME_TEST [FAIL]"; \
20		else					\
21			cd `dirname $$TEST`; (./$$BASENAME_TEST && echo "selftests: $$BASENAME_TEST [PASS]") || echo "selftests:  $$BASENAME_TEST [FAIL]"; cd -;\
22		fi;					\
23	done;
24endef
25
26run_tests: all
27	$(RUN_TESTS)
28
29define INSTALL_RULE
30	@if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then					\
31		mkdir -p ${INSTALL_PATH};										\
32		echo "rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/";	\
33		rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/;		\
34	fi
35	@if [ "X$(TEST_GEN_PROGS)$(TEST_GEN_PROGS_EXTENDED)$(TEST_GEN_FILES)" != "X" ]; then					\
36		mkdir -p ${INSTALL_PATH};										\
37		echo "rsync -a $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/";	\
38		rsync -a $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/;		\
39	fi
40endef
41
42install: all
43ifdef INSTALL_PATH
44	$(INSTALL_RULE)
45else
46	$(error Error: set INSTALL_PATH to use install)
47endif
48
49define EMIT_TESTS
50	@for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
51		BASENAME_TEST=`basename $$TEST`;	\
52		echo "(./$$BASENAME_TEST && echo \"selftests: $$BASENAME_TEST [PASS]\") || echo \"selftests: $$BASENAME_TEST [FAIL]\""; \
53	done;
54endef
55
56emit_tests:
57	$(EMIT_TESTS)
58
59define CLEAN
60	$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
61endef
62
63clean:
64	$(CLEAN)
65
66$(OUTPUT)/%:%.c
67	$(LINK.c) $^ $(LDLIBS) -o $@
68
69$(OUTPUT)/%.o:%.S
70	$(COMPILE.S) $^ -o $@
71
72$(OUTPUT)/%:%.S
73	$(LINK.S) $^ $(LDLIBS) -o $@
74
75.PHONY: run_tests all clean install emit_tests
76