1# SPDX-License-Identifier: GPL-2.0-only
2
3STOP_ERROR :=
4
5LIBTRACEEVENT_MIN_VERSION = 1.5
6LIBTRACEFS_MIN_VERSION = 1.6
7
8define lib_setup
9  $(eval LIB_INCLUDES += $(shell sh -c "$(PKG_CONFIG) --cflags lib$(1)"))
10  $(eval LDFLAGS += $(shell sh -c "$(PKG_CONFIG) --libs-only-L lib$(1)"))
11  $(eval EXTLIBS += $(shell sh -c "$(PKG_CONFIG) --libs-only-l lib$(1)"))
12endef
13
14$(call feature_check,libtraceevent)
15ifeq ($(feature-libtraceevent), 1)
16  $(call detected,CONFIG_LIBTRACEEVENT)
17
18  TEST = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEEVENT_MIN_VERSION) libtraceevent > /dev/null 2>&1 && echo y || echo n")
19  ifeq ($(TEST),n)
20    $(info libtraceevent version is too low, it must be at least $(LIBTRACEEVENT_MIN_VERSION))
21    STOP_ERROR := 1
22  endif
23
24  $(call lib_setup,traceevent)
25else
26  STOP_ERROR := 1
27  $(info libtraceevent is missing. Please install libtraceevent-dev/libtraceevent-devel)
28endif
29
30$(call feature_check,libtracefs)
31ifeq ($(feature-libtracefs), 1)
32  $(call detected,CONFIG_LIBTRACEFS)
33
34  TEST = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEFS_MIN_VERSION) libtracefs > /dev/null 2>&1 && echo y || echo n")
35  ifeq ($(TEST),n)
36    $(info libtracefs version is too low, it must be at least $(LIBTRACEFS_MIN_VERSION))
37    STOP_ERROR := 1
38  endif
39
40  $(call lib_setup,tracefs)
41else
42  STOP_ERROR := 1
43  $(info libtracefs is missing. Please install libtracefs-dev/libtracefs-devel)
44endif
45
46$(call feature_check,libcpupower)
47ifeq ($(feature-libcpupower), 1)
48  $(call detected,CONFIG_LIBCPUPOWER)
49  CFLAGS += -DHAVE_LIBCPUPOWER_SUPPORT
50  EXTLIBS += -lcpupower
51else
52  $(info libcpupower is missing, building without --deepest-idle-state support.)
53  $(info Please install libcpupower-dev/kernel-tools-libs-devel)
54endif
55
56ifndef BUILD_BPF_SKEL
57  # BPF skeletons are used to implement improved sample collection, enable
58  # them by default.
59  BUILD_BPF_SKEL := 1
60endif
61
62ifeq ($(BUILD_BPF_SKEL),0)
63  $(info BPF skeleton support disabled, building without BPF skeleton support.)
64endif
65
66$(call feature_check,libbpf)
67ifeq ($(feature-libbpf), 1)
68  $(call detected,CONFIG_LIBBPF)
69else
70  $(info libbpf is missing, building without BPF skeleton support.)
71  $(info Please install libbpf-dev/libbpf-devel)
72  BUILD_BPF_SKEL := 0
73endif
74
75$(call feature_check,clang-bpf-co-re)
76ifeq ($(feature-clang-bpf-co-re), 1)
77  $(call detected,CONFIG_CLANG_BPF_CO_RE)
78else
79  $(info clang is missing or does not support BPF CO-RE, building without BPF skeleton support.)
80  $(info Please install clang)
81  BUILD_BPF_SKEL := 0
82endif
83
84$(call feature_check,bpftool-skeletons)
85ifeq ($(feature-bpftool-skeletons), 1)
86  $(call detected,CONFIG_BPFTOOL_SKELETONS)
87else
88  $(info bpftool is missing or not supporting skeletons, building without BPF skeleton support.)
89  $(info Please install bpftool)
90  BUILD_BPF_SKEL := 0
91endif
92
93ifeq ($(BUILD_BPF_SKEL),1)
94  CFLAGS += -DHAVE_BPF_SKEL
95  EXTLIBS += -lbpf
96endif
97
98ifeq ($(STOP_ERROR),1)
99  $(error Please, check the errors above.)
100endif
101