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