projects/linux·blob master · refs

178 lines · 5.1 KiB

1# SPDX-License-Identifier: GPL-2.0-only
2
3ifeq ($(srctree),)
4 srctree := $(patsubst %/,%,$(dir $(CURDIR)))
5 srctree := $(patsubst %/,%,$(dir $(srctree)))
6 srctree := $(patsubst %/,%,$(dir $(srctree)))
7endif
8
9include $(srctree)/tools/scripts/Makefile.include
10
11# O is an alias for OUTPUT
12OUTPUT := $(O)
13
14ifeq ($(OUTPUT),)
15 OUTPUT := $(CURDIR)
16else
17 # subdir is used by the ../Makefile in $(call descend,)
18 ifneq ($(subdir),)
19 OUTPUT := $(OUTPUT)/$(subdir)
20 endif
21endif
22
23ifneq ($(patsubst %/,,$(lastword $(OUTPUT))),)
24 OUTPUT := $(OUTPUT)/
25endif
26
27RTLA := $(OUTPUT)rtla
28RTLA_IN := $(RTLA)-in.o
29
30LIBSUBCMD_DIR = $(srctree)/tools/lib/subcmd/
31ifneq ($(OUTPUT),)
32 LIBSUBCMD_OUTPUT = $(abspath $(OUTPUT))/libsubcmd
33else
34 LIBSUBCMD_OUTPUT = $(CURDIR)/libsubcmd
35endif
36LIBSUBCMD = $(LIBSUBCMD_OUTPUT)/libsubcmd.a
37LIBSUBCMD_INCLUDES = $(LIBSUBCMD_OUTPUT)/include
38LIBSUBCMD_MAKEFLAGS = O=$(LIBSUBCMD_OUTPUT) DESTDIR=$(LIBSUBCMD_OUTPUT) prefix= subdir=
39
40TOOLS_INCLUDES = -I$(srctree)/tools/include
41
42ifneq ($(OUTPUT),)
43 LIB_OUTPUT = $(abspath $(OUTPUT))/lib
44else
45 LIB_OUTPUT = $(CURDIR)/lib
46endif
47
48LIB_CTYPE = $(LIB_OUTPUT)/ctype.o
49LIB_CTYPE_SRC = $(srctree)/tools/lib/ctype.c
50
51LIB_STRING = $(LIB_OUTPUT)/string.o
52LIB_STRING_SRC = $(srctree)/tools/lib/string.c
53
54LIB_STR_ERROR_R = $(LIB_OUTPUT)/str_error_r.o
55LIB_STR_ERROR_R_SRC = $(srctree)/tools/lib/str_error_r.c
56
57VERSION := $(shell sh -c "make -sC ../../.. kernelversion | grep -v make")
58DOCSRC := ../../../Documentation/tools/rtla/
59
60FEATURE_TESTS := libtraceevent
61FEATURE_TESTS += libtracefs
62FEATURE_TESTS += libcpupower
63FEATURE_TESTS += libcheck
64FEATURE_TESTS += libbpf
65FEATURE_TESTS += clang-bpf-co-re
66FEATURE_TESTS += bpftool-skeletons
67FEATURE_DISPLAY := libtraceevent
68FEATURE_DISPLAY += libtracefs
69FEATURE_DISPLAY += libcpupower
70FEATURE_DISPLAY += libcheck
71FEATURE_DISPLAY += libbpf
72FEATURE_DISPLAY += clang-bpf-co-re
73FEATURE_DISPLAY += bpftool-skeletons
74
75all: $(RTLA)
76
77include $(srctree)/tools/build/Makefile.include
78include Makefile.rtla
79include tests/unit/Makefile.unit
80
81# check for dependencies only on required targets
82NON_CONFIG_TARGETS := clean install tarball doc doc_clean doc_install
83
84config := 1
85ifdef MAKECMDGOALS
86ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
87 config := 0
88endif
89endif
90
91ifeq ($(config),1)
92 include $(srctree)/tools/build/Makefile.feature
93 include Makefile.config
94endif
95
96CFLAGS += $(INCLUDES) $(LIB_INCLUDES) $(TOOLS_INCLUDES) -I$(LIBSUBCMD_INCLUDES)
97
98export CFLAGS OUTPUT srctree
99
100ifeq ($(BUILD_BPF_SKEL),1)
101src/timerlat.bpf.o: src/timerlat.bpf.c
102 $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
103
104src/timerlat.skel.h: src/timerlat.bpf.o
105 $(QUIET_GENSKEL)$(SYSTEM_BPFTOOL) gen skeleton $< > $@
106
107example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
108 $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
109
110tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
111 $(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
112else
113src/timerlat.skel.h:
114 $(Q)echo '/* BPF skeleton is disabled */' > src/timerlat.skel.h
115
116example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
117 $(Q)echo "BPF skeleton support is disabled, skipping example/timerlat_bpf_action.o"
118
119tests/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"
121endif
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
126static: $(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
130rtla.%: 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
159libsubcmd-clean:
160 $(call QUIET_CLEAN, libsubcmd)
161 $(Q)$(RM) -r -- $(LIBSUBCMD_OUTPUT)
162
163lib-clean:
164 $(call QUIET_CLEAN, lib)
165 $(Q)$(RM) -r -- $(LIB_OUTPUT)
166
167clean: 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
175check: $(RTLA) tests/bpf/bpf_action_map.o
176 RTLA=$(RTLA) BPFTOOL=$(SYSTEM_BPFTOOL) prove -o -f -v tests/
177examples: example/timerlat_bpf_action.o
178.PHONY: FORCE clean check