| 1 |
|
| 2 |
|
| 3 | ifeq ($(srctree),)
|
| 4 | srctree := $(patsubst %/,%,$(dir $(CURDIR)))
|
| 5 | srctree := $(patsubst %/,%,$(dir $(srctree)))
|
| 6 | srctree := $(patsubst %/,%,$(dir $(srctree)))
|
| 7 | endif
|
| 8 |
|
| 9 | include $(srctree)/tools/scripts/Makefile.include
|
| 10 |
|
| 11 |
|
| 12 | OUTPUT := $(O)
|
| 13 |
|
| 14 | ifeq ($(OUTPUT),)
|
| 15 | OUTPUT := $(CURDIR)
|
| 16 | else
|
| 17 |
|
| 18 | ifneq ($(subdir),)
|
| 19 | OUTPUT := $(OUTPUT)/$(subdir)
|
| 20 | endif
|
| 21 | endif
|
| 22 |
|
| 23 | ifneq ($(patsubst %/,,$(lastword $(OUTPUT))),)
|
| 24 | OUTPUT := $(OUTPUT)/
|
| 25 | endif
|
| 26 |
|
| 27 | RTLA := $(OUTPUT)rtla
|
| 28 | RTLA_IN := $(RTLA)-in.o
|
| 29 |
|
| 30 | LIBSUBCMD_DIR = $(srctree)/tools/lib/subcmd/
|
| 31 | ifneq ($(OUTPUT),)
|
| 32 | LIBSUBCMD_OUTPUT = $(abspath $(OUTPUT))/libsubcmd
|
| 33 | else
|
| 34 | LIBSUBCMD_OUTPUT = $(CURDIR)/libsubcmd
|
| 35 | endif
|
| 36 | LIBSUBCMD = $(LIBSUBCMD_OUTPUT)/libsubcmd.a
|
| 37 | LIBSUBCMD_INCLUDES = $(LIBSUBCMD_OUTPUT)/include
|
| 38 | LIBSUBCMD_MAKEFLAGS = O=$(LIBSUBCMD_OUTPUT) DESTDIR=$(LIBSUBCMD_OUTPUT) prefix= subdir=
|
| 39 |
|
| 40 | TOOLS_INCLUDES = -I$(srctree)/tools/include
|
| 41 |
|
| 42 | ifneq ($(OUTPUT),)
|
| 43 | LIB_OUTPUT = $(abspath $(OUTPUT))/lib
|
| 44 | else
|
| 45 | LIB_OUTPUT = $(CURDIR)/lib
|
| 46 | endif
|
| 47 |
|
| 48 | LIB_CTYPE = $(LIB_OUTPUT)/ctype.o
|
| 49 | LIB_CTYPE_SRC = $(srctree)/tools/lib/ctype.c
|
| 50 |
|
| 51 | LIB_STRING = $(LIB_OUTPUT)/string.o
|
| 52 | LIB_STRING_SRC = $(srctree)/tools/lib/string.c
|
| 53 |
|
| 54 | LIB_STR_ERROR_R = $(LIB_OUTPUT)/str_error_r.o
|
| 55 | LIB_STR_ERROR_R_SRC = $(srctree)/tools/lib/str_error_r.c
|
| 56 |
|
| 57 | VERSION := $(shell sh -c "make -sC ../../.. kernelversion | grep -v make")
|
| 58 | DOCSRC := ../../../Documentation/tools/rtla/
|
| 59 |
|
| 60 | FEATURE_TESTS := libtraceevent
|
| 61 | FEATURE_TESTS += libtracefs
|
| 62 | FEATURE_TESTS += libcpupower
|
| 63 | FEATURE_TESTS += libcheck
|
| 64 | FEATURE_TESTS += libbpf
|
| 65 | FEATURE_TESTS += clang-bpf-co-re
|
| 66 | FEATURE_TESTS += bpftool-skeletons
|
| 67 | FEATURE_DISPLAY := libtraceevent
|
| 68 | FEATURE_DISPLAY += libtracefs
|
| 69 | FEATURE_DISPLAY += libcpupower
|
| 70 | FEATURE_DISPLAY += libcheck
|
| 71 | FEATURE_DISPLAY += libbpf
|
| 72 | FEATURE_DISPLAY += clang-bpf-co-re
|
| 73 | FEATURE_DISPLAY += bpftool-skeletons
|
| 74 |
|
| 75 | all: $(RTLA)
|
| 76 |
|
| 77 | include $(srctree)/tools/build/Makefile.include
|
| 78 | include Makefile.rtla
|
| 79 | include tests/unit/Makefile.unit
|
| 80 |
|
| 81 |
|
| 82 | NON_CONFIG_TARGETS := clean install tarball doc doc_clean doc_install
|
| 83 |
|
| 84 | config := 1
|
| 85 | ifdef MAKECMDGOALS
|
| 86 | ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
|
| 87 | config := 0
|
| 88 | endif
|
| 89 | endif
|
| 90 |
|
| 91 | ifeq ($(config),1)
|
| 92 | include $(srctree)/tools/build/Makefile.feature
|
| 93 | include Makefile.config
|
| 94 | endif
|
| 95 |
|
| 96 | CFLAGS += $(INCLUDES) $(LIB_INCLUDES) $(TOOLS_INCLUDES) -I$(LIBSUBCMD_INCLUDES)
|
| 97 |
|
| 98 | export CFLAGS OUTPUT srctree
|
| 99 |
|
| 100 | ifeq ($(BUILD_BPF_SKEL),1)
|
| 101 | src/timerlat.bpf.o: src/timerlat.bpf.c
|
| 102 | $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
| 103 |
|
| 104 | src/timerlat.skel.h: src/timerlat.bpf.o
|
| 105 | $(QUIET_GENSKEL)$(SYSTEM_BPFTOOL) gen skeleton $< > $@
|
| 106 |
|
| 107 | example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
|
| 108 | $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
| 109 |
|
| 110 | tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
|
| 111 | $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
|
| 112 | else
|
| 113 | src/timerlat.skel.h:
|
| 114 | $(Q)echo '/* BPF skeleton is disabled */' > src/timerlat.skel.h
|
| 115 |
|
| 116 | example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
|
| 117 | $(Q)echo "BPF skeleton support is disabled, skipping example/timerlat_bpf_action.o"
|
| 118 |
|
| 119 | tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
|
| 120 | $(Q)echo "BPF skeleton support is disabled, skipping tests/bpf/bpf_action_map.o"
|
| 121 | endif
|
| 122 |
|
| 123 | $(RTLA): $(RTLA_IN) $(LIBSUBCMD) $(LIB_CTYPE) $(LIB_STRING) $(LIB_STR_ERROR_R)
|
| 124 | $(QUIET_LINK)$(CC) $(LDFLAGS) -o $(RTLA) $(RTLA_IN) $(LIBSUBCMD) $(LIB_CTYPE) $(LIB_STRING) $(LIB_STR_ERROR_R) $(EXTLIBS)
|
| 125 |
|
| 126 | static: $(RTLA_IN) $(LIBSUBCMD) $(LIB_CTYPE) $(LIB_STRING) $(LIB_STR_ERROR_R)
|
| 127 | $(eval LDFLAGS += -static)
|
| 128 | $(QUIET_LINK)$(CC) -static $(LDFLAGS) -o $(RTLA)-static $(RTLA_IN) $(LIBSUBCMD) $(LIB_CTYPE) $(LIB_STRING) $(LIB_STR_ERROR_R) $(EXTLIBS)
|
| 129 |
|
| 130 | rtla.%: fixdep FORCE
|
| 131 | make -f $(srctree)/tools/build/Makefile.build dir=. $@
|
| 132 |
|
| 133 | $(RTLA_IN): fixdep FORCE src/timerlat.skel.h $(LIBSUBCMD_INCLUDES)
|
| 134 | make $(build)=rtla
|
| 135 |
|
| 136 | $(LIBSUBCMD_OUTPUT):
|
| 137 | $(Q)$(MKDIR) -p $@
|
| 138 |
|
| 139 | $(LIBSUBCMD_INCLUDES): FORCE | $(LIBSUBCMD_OUTPUT)
|
| 140 | $(Q)$(MAKE) -C $(LIBSUBCMD_DIR) $(LIBSUBCMD_MAKEFLAGS) \
|
| 141 | install_headers
|
| 142 |
|
| 143 | $(LIBSUBCMD): FORCE | $(LIBSUBCMD_OUTPUT)
|
| 144 | $(Q)$(MAKE) -C $(LIBSUBCMD_DIR) $(LIBSUBCMD_MAKEFLAGS) \
|
| 145 | $@
|
| 146 |
|
| 147 | $(LIB_OUTPUT):
|
| 148 | $(Q)$(MKDIR) -p $@
|
| 149 |
|
| 150 | $(LIB_STR_ERROR_R): $(LIB_STR_ERROR_R_SRC) | $(LIB_OUTPUT)
|
| 151 | $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
|
| 152 |
|
| 153 | $(LIB_STRING): $(LIB_STRING_SRC) | $(LIB_OUTPUT)
|
| 154 | $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
|
| 155 |
|
| 156 | $(LIB_CTYPE): $(LIB_CTYPE_SRC) | $(LIB_OUTPUT)
|
| 157 | $(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
|
| 158 |
|
| 159 | libsubcmd-clean:
|
| 160 | $(call QUIET_CLEAN, libsubcmd)
|
| 161 | $(Q)$(RM) -r -- $(LIBSUBCMD_OUTPUT)
|
| 162 |
|
| 163 | lib-clean:
|
| 164 | $(call QUIET_CLEAN, lib)
|
| 165 | $(Q)$(RM) -r -- $(LIB_OUTPUT)
|
| 166 |
|
| 167 | clean: doc_clean fixdep-clean libsubcmd-clean lib-clean
|
| 168 | $(call QUIET_CLEAN, rtla)
|
| 169 | $(Q)find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
|
| 170 | $(Q)rm -f rtla rtla-static fixdep FEATURE-DUMP rtla-*
|
| 171 | $(Q)rm -rf feature
|
| 172 | $(Q)rm -f src/timerlat.bpf.o src/timerlat.skel.h example/timerlat_bpf_action.o
|
| 173 | $(Q)rm -f $(UNIT_TESTS)
|
| 174 |
|
| 175 | check: $(RTLA) tests/bpf/bpf_action_map.o
|
| 176 | RTLA=$(RTLA) BPFTOOL=$(SYSTEM_BPFTOOL) prove -o -f -v tests/
|
| 177 | examples: example/timerlat_bpf_action.o
|
| 178 | .PHONY: FORCE clean check
|