xref: /linux/tools/testing/selftests/lib.mk (revision 083f345151938706d33969b37b92e7e13ab02b3e)
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
5define RUN_TESTS
6	@for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
7		BASENAME_TEST=`basename $$TEST`;	\
8		cd `dirname $$TEST`; (./$$BASENAME_TEST && echo "selftests: $$BASENAME_TEST [PASS]") || echo "selftests:  $$BASENAME_TEST [FAIL]"; cd -;\
9	done;
10endef
11
12run_tests: all
13	$(RUN_TESTS)
14
15define INSTALL_RULE
16	@if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then					\
17		mkdir -p ${INSTALL_PATH};										\
18		echo "rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/";	\
19		rsync -a $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(INSTALL_PATH)/;		\
20	fi
21	@if [ "X$(TEST_GEN_PROGS)$(TEST_GEN_PROGS_EXTENDED)$(TEST_GEN_FILES)" != "X" ]; then					\
22		mkdir -p ${INSTALL_PATH};										\
23		echo "rsync -a $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/";	\
24		rsync -a $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(INSTALL_PATH)/;		\
25	fi
26endef
27
28install: all
29ifdef INSTALL_PATH
30	$(INSTALL_RULE)
31else
32	$(error Error: set INSTALL_PATH to use install)
33endif
34
35define EMIT_TESTS
36	@for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
37		BASENAME_TEST=`basename $$TEST`;	\
38		echo "(./$$BASENAME_TEST && echo \"selftests: $$BASENAME_TEST [PASS]\") || echo \"selftests: $$BASENAME_TEST [FAIL]\""; \
39	done;
40endef
41
42emit_tests:
43	$(EMIT_TESTS)
44
45TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
46TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
47
48all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
49
50clean:
51	$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
52
53$(OUTPUT)/%:%.c
54	$(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $< -o $@
55
56$(OUTPUT)/%.o:%.S
57	$(CC) $(ASFLAGS) -c $< -o $@
58
59$(OUTPUT)/%:%.S
60	$(CC) $(ASFLAGS) $< -o $@
61
62.PHONY: run_tests all clean install emit_tests
63