Back to home page

OSCL-LXR

 
 

    


0001 # This mimics the top-level Makefile. We do it explicitly here so that this
0002 # Makefile can operate with or without the kbuild infrastructure.
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 # CLANG_TARGET_FLAGS
0027 else
0028 CLANG_FLAGS     += --target=$(notdir $(CROSS_COMPILE:%-=%))
0029 endif # CROSS_COMPILE
0030 
0031 CC := $(LLVM_PREFIX)clang$(LLVM_SUFFIX) $(CLANG_FLAGS) -fintegrated-as
0032 else
0033 CC := $(CROSS_COMPILE)gcc
0034 endif # LLVM
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 # The following are built by lib.mk common compile rules.
0050 # TEST_CUSTOM_PROGS should be used by tests that require
0051 # custom build rule and prevent common build rule use.
0052 # TEST_PROGS are for test shell scripts.
0053 # TEST_CUSTOM_PROGS and TEST_PROGS will be run by common run_tests
0054 # and install targets. Common clean doesn't touch them.
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 # define if isn't already. It is undefined in make O= case.
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 # When make O= with kselftest target from main level
0127 # the following aren't defined.
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 # Selftest makefiles can override those targets by setting
0136 # OVERRIDE_TARGETS = 1.
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