xref: /linux/tools/tracing/rtla/Makefile (revision 146cc263e457ff6055fe7829e4f4f4b0b5d5dd86)
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
179