xref: /linux/tools/tracing/rtla/Makefile (revision 244d0cbff2efa13931115784e5dc4d1270a04ec7)
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_STRING = $(LIB_OUTPUT)/string.o
49LIB_STRING_SRC = $(srctree)/tools/lib/string.c
50
51LIB_STR_ERROR_R = $(LIB_OUTPUT)/str_error_r.o
52LIB_STR_ERROR_R_SRC = $(srctree)/tools/lib/str_error_r.c
53
54VERSION		:= $(shell sh -c "make -sC ../../.. kernelversion | grep -v make")
55DOCSRC		:= ../../../Documentation/tools/rtla/
56
57FEATURE_TESTS	:= libtraceevent
58FEATURE_TESTS	+= libtracefs
59FEATURE_TESTS	+= libcpupower
60FEATURE_TESTS	+= libcheck
61FEATURE_TESTS	+= libbpf
62FEATURE_TESTS	+= clang-bpf-co-re
63FEATURE_TESTS	+= bpftool-skeletons
64FEATURE_DISPLAY	:= libtraceevent
65FEATURE_DISPLAY	+= libtracefs
66FEATURE_DISPLAY	+= libcpupower
67FEATURE_DISPLAY	+= libcheck
68FEATURE_DISPLAY	+= libbpf
69FEATURE_DISPLAY	+= clang-bpf-co-re
70FEATURE_DISPLAY	+= bpftool-skeletons
71
72all: $(RTLA)
73
74include $(srctree)/tools/build/Makefile.include
75include Makefile.rtla
76include tests/unit/Makefile.unit
77
78# check for dependencies only on required targets
79NON_CONFIG_TARGETS := clean install tarball doc doc_clean doc_install
80
81config		:= 1
82ifdef MAKECMDGOALS
83ifeq ($(filter-out $(NON_CONFIG_TARGETS),$(MAKECMDGOALS)),)
84 config		:= 0
85endif
86endif
87
88ifeq ($(config),1)
89  include $(srctree)/tools/build/Makefile.feature
90  include Makefile.config
91endif
92
93CFLAGS		+= $(INCLUDES) $(LIB_INCLUDES) $(TOOLS_INCLUDES) -I$(LIBSUBCMD_INCLUDES)
94
95export CFLAGS OUTPUT srctree
96
97ifeq ($(BUILD_BPF_SKEL),1)
98src/timerlat.bpf.o: src/timerlat.bpf.c
99	$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
100
101src/timerlat.skel.h: src/timerlat.bpf.o
102	$(QUIET_GENSKEL)$(SYSTEM_BPFTOOL) gen skeleton $< > $@
103
104example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
105	$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
106
107tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
108	$(QUIET_CLANG)$(CLANG) -g -O2 -target bpf -c $(filter %.c,$^) -o $@
109else
110src/timerlat.skel.h:
111	$(Q)echo '/* BPF skeleton is disabled */' > src/timerlat.skel.h
112
113example/timerlat_bpf_action.o: example/timerlat_bpf_action.c
114	$(Q)echo "BPF skeleton support is disabled, skipping example/timerlat_bpf_action.o"
115
116tests/bpf/bpf_action_map.o: tests/bpf/bpf_action_map.c
117	$(Q)echo "BPF skeleton support is disabled, skipping tests/bpf/bpf_action_map.o"
118endif
119
120$(RTLA): $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R)
121	$(QUIET_LINK)$(CC) $(LDFLAGS) -o $(RTLA) $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R) $(EXTLIBS)
122
123static: $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R)
124	$(eval LDFLAGS += -static)
125	$(QUIET_LINK)$(CC) -static $(LDFLAGS) -o $(RTLA)-static $(RTLA_IN) $(LIBSUBCMD) $(LIB_STRING) $(LIB_STR_ERROR_R) $(EXTLIBS)
126
127rtla.%: fixdep FORCE
128	make -f $(srctree)/tools/build/Makefile.build dir=. $@
129
130$(RTLA_IN): fixdep FORCE src/timerlat.skel.h $(LIBSUBCMD_INCLUDES)
131	make $(build)=rtla
132
133$(LIBSUBCMD_OUTPUT):
134	$(Q)$(MKDIR) -p $@
135
136$(LIBSUBCMD_INCLUDES): FORCE | $(LIBSUBCMD_OUTPUT)
137	$(Q)$(MAKE) -C $(LIBSUBCMD_DIR) $(LIBSUBCMD_MAKEFLAGS) \
138		install_headers
139
140$(LIBSUBCMD): FORCE | $(LIBSUBCMD_OUTPUT)
141	$(Q)$(MAKE) -C $(LIBSUBCMD_DIR) $(LIBSUBCMD_MAKEFLAGS) \
142		$@
143
144$(LIB_OUTPUT):
145	$(Q)$(MKDIR) -p $@
146
147$(LIB_STR_ERROR_R): $(LIB_STR_ERROR_R_SRC) | $(LIB_OUTPUT)
148	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
149
150$(LIB_STRING): $(LIB_STRING_SRC) | $(LIB_OUTPUT)
151	$(QUIET_CC)$(CC) $(CFLAGS) -c -o $@ $<
152
153libsubcmd-clean:
154	$(call QUIET_CLEAN, libsubcmd)
155	$(Q)$(RM) -r -- $(LIBSUBCMD_OUTPUT)
156
157lib-clean:
158	$(call QUIET_CLEAN, lib)
159	$(Q)$(RM) -r -- $(LIB_OUTPUT)
160
161clean: doc_clean fixdep-clean libsubcmd-clean lib-clean
162	$(call QUIET_CLEAN, rtla)
163	$(Q)find . -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
164	$(Q)rm -f rtla rtla-static fixdep FEATURE-DUMP rtla-*
165	$(Q)rm -rf feature
166	$(Q)rm -f src/timerlat.bpf.o src/timerlat.skel.h example/timerlat_bpf_action.o
167	$(Q)rm -f $(UNIT_TESTS)
168
169check: $(RTLA) tests/bpf/bpf_action_map.o
170	RTLA=$(RTLA) BPFTOOL=$(SYSTEM_BPFTOOL) prove -o -f -v tests/
171examples: example/timerlat_bpf_action.o
172.PHONY: FORCE clean check
173