xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/lib.mk (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard Worker# This mimics the top-level Makefile. We do it explicitly here so that this
2*053f45beSAndroid Build Coastguard Worker# Makefile can operate with or without the kbuild infrastructure.
3*053f45beSAndroid Build Coastguard Workerifneq ($(LLVM),)
4*053f45beSAndroid Build Coastguard Workerifneq ($(filter %/,$(LLVM)),)
5*053f45beSAndroid Build Coastguard WorkerLLVM_PREFIX := $(LLVM)
6*053f45beSAndroid Build Coastguard Workerelse ifneq ($(filter -%,$(LLVM)),)
7*053f45beSAndroid Build Coastguard WorkerLLVM_SUFFIX := $(LLVM)
8*053f45beSAndroid Build Coastguard Workerendif
9*053f45beSAndroid Build Coastguard Worker
10*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_arm          := arm-linux-gnueabi
11*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_arm64        := aarch64-linux-gnu
12*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_hexagon      := hexagon-linux-musl
13*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_m68k         := m68k-linux-gnu
14*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_mips         := mipsel-linux-gnu
15*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_powerpc      := powerpc64le-linux-gnu
16*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_riscv        := riscv64-linux-gnu
17*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_s390         := s390x-linux-gnu
18*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS_x86          := x86_64-linux-gnu
19*053f45beSAndroid Build Coastguard WorkerCLANG_TARGET_FLAGS              := $(CLANG_TARGET_FLAGS_$(ARCH))
20*053f45beSAndroid Build Coastguard Worker
21*053f45beSAndroid Build Coastguard Workerifeq ($(CROSS_COMPILE),)
22*053f45beSAndroid Build Coastguard Workerifeq ($(CLANG_TARGET_FLAGS),)
23*053f45beSAndroid Build Coastguard Worker$(error Specify CROSS_COMPILE or add '--target=' option to lib.mk
24*053f45beSAndroid Build Coastguard Workerelse
25*053f45beSAndroid Build Coastguard WorkerCLANG_FLAGS     += --target=$(CLANG_TARGET_FLAGS)
26*053f45beSAndroid Build Coastguard Workerendif # CLANG_TARGET_FLAGS
27*053f45beSAndroid Build Coastguard Workerelse
28*053f45beSAndroid Build Coastguard WorkerCLANG_FLAGS     += --target=$(notdir $(CROSS_COMPILE:%-=%))
29*053f45beSAndroid Build Coastguard Workerendif # CROSS_COMPILE
30*053f45beSAndroid Build Coastguard Worker
31*053f45beSAndroid Build Coastguard WorkerCC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX) $(CLANG_FLAGS) -fintegrated-as
32*053f45beSAndroid Build Coastguard Workerelse
33*053f45beSAndroid Build Coastguard WorkerCC := $(CROSS_COMPILE)gcc
34*053f45beSAndroid Build Coastguard Workerendif # LLVM
35*053f45beSAndroid Build Coastguard Worker
36*053f45beSAndroid Build Coastguard Workerifeq (0,$(MAKELEVEL))
37*053f45beSAndroid Build Coastguard Worker    ifeq ($(OUTPUT),)
38*053f45beSAndroid Build Coastguard Worker	OUTPUT := $(shell pwd)
39*053f45beSAndroid Build Coastguard Worker	DEFAULT_INSTALL_HDR_PATH := 1
40*053f45beSAndroid Build Coastguard Worker    endif
41*053f45beSAndroid Build Coastguard Workerendif
42*053f45beSAndroid Build Coastguard Workerselfdir = $(realpath $(dir $(filter %/lib.mk,$(MAKEFILE_LIST))))
43*053f45beSAndroid Build Coastguard Workertop_srcdir = $(selfdir)/../../..
44*053f45beSAndroid Build Coastguard Worker
45*053f45beSAndroid Build Coastguard Workerifeq ($(KHDR_INCLUDES),)
46*053f45beSAndroid Build Coastguard WorkerKHDR_INCLUDES := -isystem $(top_srcdir)/usr/include
47*053f45beSAndroid Build Coastguard Workerendif
48*053f45beSAndroid Build Coastguard Worker
49*053f45beSAndroid Build Coastguard Worker# The following are built by lib.mk common compile rules.
50*053f45beSAndroid Build Coastguard Worker# TEST_CUSTOM_PROGS should be used by tests that require
51*053f45beSAndroid Build Coastguard Worker# custom build rule and prevent common build rule use.
52*053f45beSAndroid Build Coastguard Worker# TEST_PROGS are for test shell scripts.
53*053f45beSAndroid Build Coastguard Worker# TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests
54*053f45beSAndroid Build Coastguard Worker# and install targets. Common clean doesn't touch them.
55*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
56*053f45beSAndroid Build Coastguard WorkerTEST_GEN_PROGS_EXTENDED := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS_EXTENDED))
57*053f45beSAndroid Build Coastguard WorkerTEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
58*053f45beSAndroid Build Coastguard Worker
59*053f45beSAndroid Build Coastguard Workerall: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
60*053f45beSAndroid Build Coastguard Worker
61*053f45beSAndroid Build Coastguard Workerdefine RUN_TESTS
62*053f45beSAndroid Build Coastguard Worker	BASE_DIR="$(selfdir)";			\
63*053f45beSAndroid Build Coastguard Worker	. $(selfdir)/kselftest/runner.sh;	\
64*053f45beSAndroid Build Coastguard Worker	if [ "X$(summary)" != "X" ]; then       \
65*053f45beSAndroid Build Coastguard Worker		per_test_logging=1;		\
66*053f45beSAndroid Build Coastguard Worker	fi;                                     \
67*053f45beSAndroid Build Coastguard Worker	run_many $(1)
68*053f45beSAndroid Build Coastguard Workerendef
69*053f45beSAndroid Build Coastguard Worker
70*053f45beSAndroid Build Coastguard Workerrun_tests: all
71*053f45beSAndroid Build Coastguard Workerifdef building_out_of_srctree
72*053f45beSAndroid Build Coastguard Worker	@if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \
73*053f45beSAndroid Build Coastguard Worker		rsync -aLq $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(OUTPUT); \
74*053f45beSAndroid Build Coastguard Worker	fi
75*053f45beSAndroid Build Coastguard Worker	@if [ "X$(TEST_PROGS)" != "X" ]; then \
76*053f45beSAndroid Build Coastguard Worker		$(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) \
77*053f45beSAndroid Build Coastguard Worker				  $(addprefix $(OUTPUT)/,$(TEST_PROGS))) ; \
78*053f45beSAndroid Build Coastguard Worker	else \
79*053f45beSAndroid Build Coastguard Worker		$(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS)); \
80*053f45beSAndroid Build Coastguard Worker	fi
81*053f45beSAndroid Build Coastguard Workerelse
82*053f45beSAndroid Build Coastguard Worker	@$(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS))
83*053f45beSAndroid Build Coastguard Workerendif
84*053f45beSAndroid Build Coastguard Worker
85*053f45beSAndroid Build Coastguard Workerdefine INSTALL_SINGLE_RULE
86*053f45beSAndroid Build Coastguard Worker	$(if $(INSTALL_LIST),@mkdir -p $(INSTALL_PATH))
87*053f45beSAndroid Build Coastguard Worker	$(if $(INSTALL_LIST),rsync -aL $(INSTALL_LIST) $(INSTALL_PATH)/)
88*053f45beSAndroid Build Coastguard Workerendef
89*053f45beSAndroid Build Coastguard Worker
90*053f45beSAndroid Build Coastguard Workerdefine INSTALL_RULE
91*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_PROGS)) $(INSTALL_SINGLE_RULE)
92*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE)
93*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_FILES)) $(INSTALL_SINGLE_RULE)
94*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_GEN_PROGS)) $(INSTALL_SINGLE_RULE)
95*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_CUSTOM_PROGS)) $(INSTALL_SINGLE_RULE)
96*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_GEN_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE)
97*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(TEST_GEN_FILES)) $(INSTALL_SINGLE_RULE)
98*053f45beSAndroid Build Coastguard Worker	$(eval INSTALL_LIST = $(wildcard config settings)) $(INSTALL_SINGLE_RULE)
99*053f45beSAndroid Build Coastguard Workerendef
100*053f45beSAndroid Build Coastguard Worker
101*053f45beSAndroid Build Coastguard Workerinstall: all
102*053f45beSAndroid Build Coastguard Workerifdef INSTALL_PATH
103*053f45beSAndroid Build Coastguard Worker	$(INSTALL_RULE)
104*053f45beSAndroid Build Coastguard Workerelse
105*053f45beSAndroid Build Coastguard Worker	$(error Error: set INSTALL_PATH to use install)
106*053f45beSAndroid Build Coastguard Workerendif
107*053f45beSAndroid Build Coastguard Worker
108*053f45beSAndroid Build Coastguard Workeremit_tests:
109*053f45beSAndroid Build Coastguard Worker	for TEST in $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS); do \
110*053f45beSAndroid Build Coastguard Worker		BASENAME_TEST=`basename $$TEST`;	\
111*053f45beSAndroid Build Coastguard Worker		echo "$(COLLECTION):$$BASENAME_TEST";	\
112*053f45beSAndroid Build Coastguard Worker	done
113*053f45beSAndroid Build Coastguard Worker
114*053f45beSAndroid Build Coastguard Worker# define if isn't already. It is undefined in make O= case.
115*053f45beSAndroid Build Coastguard Workerifeq ($(RM),)
116*053f45beSAndroid Build Coastguard WorkerRM := rm -f
117*053f45beSAndroid Build Coastguard Workerendif
118*053f45beSAndroid Build Coastguard Worker
119*053f45beSAndroid Build Coastguard Workerdefine CLEAN
120*053f45beSAndroid Build Coastguard Worker	$(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
121*053f45beSAndroid Build Coastguard Workerendef
122*053f45beSAndroid Build Coastguard Worker
123*053f45beSAndroid Build Coastguard Workerclean:
124*053f45beSAndroid Build Coastguard Worker	$(CLEAN)
125*053f45beSAndroid Build Coastguard Worker
126*053f45beSAndroid Build Coastguard Worker# When make O= with kselftest target from main level
127*053f45beSAndroid Build Coastguard Worker# the following aren't defined.
128*053f45beSAndroid Build Coastguard Worker#
129*053f45beSAndroid Build Coastguard Workerifdef building_out_of_srctree
130*053f45beSAndroid Build Coastguard WorkerLINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
131*053f45beSAndroid Build Coastguard WorkerCOMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
132*053f45beSAndroid Build Coastguard WorkerLINK.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
133*053f45beSAndroid Build Coastguard Workerendif
134*053f45beSAndroid Build Coastguard Worker
135*053f45beSAndroid Build Coastguard Worker# Selftest makefiles can override those targets by setting
136*053f45beSAndroid Build Coastguard Worker# OVERRIDE_TARGETS = 1.
137*053f45beSAndroid Build Coastguard Workerifeq ($(OVERRIDE_TARGETS),)
138*053f45beSAndroid Build Coastguard WorkerLOCAL_HDRS += $(selfdir)/kselftest_harness.h $(selfdir)/kselftest.h
139*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/%:%.c $(LOCAL_HDRS)
140*053f45beSAndroid Build Coastguard Worker	$(LINK.c) $(filter-out $(LOCAL_HDRS),$^) $(LDLIBS) -o $@
141*053f45beSAndroid Build Coastguard Worker
142*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/%.o:%.S
143*053f45beSAndroid Build Coastguard Worker	$(COMPILE.S) $^ -o $@
144*053f45beSAndroid Build Coastguard Worker
145*053f45beSAndroid Build Coastguard Worker$(OUTPUT)/%:%.S
146*053f45beSAndroid Build Coastguard Worker	$(LINK.S) $^ $(LDLIBS) -o $@
147*053f45beSAndroid Build Coastguard Workerendif
148*053f45beSAndroid Build Coastguard Worker
149*053f45beSAndroid Build Coastguard Worker.PHONY: run_tests all clean install emit_tests
150