0001
0002
0003 ifneq ($(LLVM),)
0004 ifneq ($(filter %/,$(LLVM)),)
0005 LLVM_PREFIX := $(LLVM)
0006 else ifneq ($(filter -%,$(LLVM)),)
0007 LLVM_SUFFIX := $(LLVM)
0008 endif
0009
0010 CLANG_TARGET_FLAGS_arm := arm-linux-gnueabi
0011 CLANG_TARGET_FLAGS_arm64 := aarch64-linux-gnu
0012 CLANG_TARGET_FLAGS_hexagon := hexagon-linux-musl
0013 CLANG_TARGET_FLAGS_m68k := m68k-linux-gnu
0014 CLANG_TARGET_FLAGS_mips := mipsel-linux-gnu
0015 CLANG_TARGET_FLAGS_powerpc := powerpc64le-linux-gnu
0016 CLANG_TARGET_FLAGS_riscv := riscv64-linux-gnu
0017 CLANG_TARGET_FLAGS_s390 := s390x-linux-gnu
0018 CLANG_TARGET_FLAGS_x86 := x86_64-linux-gnu
0019 CLANG_TARGET_FLAGS := $(CLANG_TARGET_FLAGS_$(ARCH))
0020
0021 ifeq ($(CROSS_COMPILE),)
0022 ifeq ($(CLANG_TARGET_FLAGS),)
0023 $(error Specify CROSS_COMPILE or add '--target=' option to lib.mk
0024 else
0025 CLANG_FLAGS += --target=$(CLANG_TARGET_FLAGS)
0026 endif
0027 else
0028 CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%))
0029 endif
0030
0031 CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX) $(CLANG_FLAGS) -fintegrated-as
0032 else
0033 CC := $(CROSS_COMPILE)gcc
0034 endif
0035
0036 ifeq (0,$(MAKELEVEL))
0037 ifeq ($(OUTPUT),)
0038 OUTPUT := $(shell pwd)
0039 DEFAULT_INSTALL_HDR_PATH := 1
0040 endif
0041 endif
0042 selfdir = $(realpath $(dir $(filter %/lib.mk,$(MAKEFILE_LIST))))
0043 top_srcdir = $(selfdir)/../../..
0044
0045 ifeq ($(KHDR_INCLUDES),)
0046 KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include
0047 endif
0048
0049
0050
0051
0052
0053
0054
0055 TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
0056 TEST_GEN_PROGS_EXTENDED := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS_EXTENDED))
0057 TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
0058
0059 all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
0060
0061 define RUN_TESTS
0062 BASE_DIR="$(selfdir)"; \
0063 . $(selfdir)/kselftest/runner.sh; \
0064 if [ "X$(summary)" != "X" ]; then \
0065 per_test_logging=1; \
0066 fi; \
0067 run_many $(1)
0068 endef
0069
0070 run_tests: all
0071 ifdef building_out_of_srctree
0072 @if [ "X$(TEST_PROGS)$(TEST_PROGS_EXTENDED)$(TEST_FILES)" != "X" ]; then \
0073 rsync -aq $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) $(OUTPUT); \
0074 fi
0075 @if [ "X$(TEST_PROGS)" != "X" ]; then \
0076 $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) \
0077 $(addprefix $(OUTPUT)/,$(TEST_PROGS))) ; \
0078 else \
0079 $(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS)); \
0080 fi
0081 else
0082 @$(call RUN_TESTS, $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS))
0083 endif
0084
0085 define INSTALL_SINGLE_RULE
0086 $(if $(INSTALL_LIST),@mkdir -p $(INSTALL_PATH))
0087 $(if $(INSTALL_LIST),rsync -a $(INSTALL_LIST) $(INSTALL_PATH)/)
0088 endef
0089
0090 define INSTALL_RULE
0091 $(eval INSTALL_LIST = $(TEST_PROGS)) $(INSTALL_SINGLE_RULE)
0092 $(eval INSTALL_LIST = $(TEST_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE)
0093 $(eval INSTALL_LIST = $(TEST_FILES)) $(INSTALL_SINGLE_RULE)
0094 $(eval INSTALL_LIST = $(TEST_GEN_PROGS)) $(INSTALL_SINGLE_RULE)
0095 $(eval INSTALL_LIST = $(TEST_CUSTOM_PROGS)) $(INSTALL_SINGLE_RULE)
0096 $(eval INSTALL_LIST = $(TEST_GEN_PROGS_EXTENDED)) $(INSTALL_SINGLE_RULE)
0097 $(eval INSTALL_LIST = $(TEST_GEN_FILES)) $(INSTALL_SINGLE_RULE)
0098 $(eval INSTALL_LIST = $(wildcard config settings)) $(INSTALL_SINGLE_RULE)
0099 endef
0100
0101 install: all
0102 ifdef INSTALL_PATH
0103 $(INSTALL_RULE)
0104 else
0105 $(error Error: set INSTALL_PATH to use install)
0106 endif
0107
0108 emit_tests:
0109 for TEST in $(TEST_GEN_PROGS) $(TEST_CUSTOM_PROGS) $(TEST_PROGS); do \
0110 BASENAME_TEST=`basename $$TEST`; \
0111 echo "$(COLLECTION):$$BASENAME_TEST"; \
0112 done
0113
0114
0115 ifeq ($(RM),)
0116 RM := rm -f
0117 endif
0118
0119 define CLEAN
0120 $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
0121 endef
0122
0123 clean:
0124 $(CLEAN)
0125
0126
0127
0128
0129 ifdef building_out_of_srctree
0130 LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
0131 COMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
0132 LINK.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
0133 endif
0134
0135
0136
0137 ifeq ($(OVERRIDE_TARGETS),)
0138 LOCAL_HDRS += $(selfdir)/kselftest_harness.h $(selfdir)/kselftest.h
0139 $(OUTPUT)/%:%.c $(LOCAL_HDRS)
0140 $(LINK.c) $(filter-out $(LOCAL_HDRS),$^) $(LDLIBS) -o $@
0141
0142 $(OUTPUT)/%.o:%.S
0143 $(COMPILE.S) $^ -o $@
0144
0145 $(OUTPUT)/%:%.S
0146 $(LINK.S) $^ $(LDLIBS) -o $@
0147 endif
0148
0149 .PHONY: run_tests all clean install emit_tests