1 # SPDX-License-Identifier: GPL-2.0-only
2 include ..
/..
/scripts
/Makefile.
include
3 include ..
/..
/scripts
/utilities.mak
6 srctree
:= $(patsubst %/,%,$(dir $(CURDIR
)))
7 srctree
:= $(patsubst %/,%,$(dir $(srctree
)))
8 srctree
:= $(patsubst %/,%,$(dir $(srctree
)))
17 BPF_DIR
= $(srctree
)/tools
/lib
/bpf
/
20 LIBBPF_OUTPUT
= $(OUTPUT
)/libbpf
/
21 LIBBPF_PATH
= $(LIBBPF_OUTPUT
)
22 BOOTSTRAP_OUTPUT
= $(OUTPUT
)/bootstrap
/
25 LIBBPF_PATH
= $(BPF_DIR
)
26 BOOTSTRAP_OUTPUT
= $(CURDIR
)/bootstrap
/
29 LIBBPF
= $(LIBBPF_PATH
)libbpf.a
30 LIBBPF_BOOTSTRAP_OUTPUT
= $(BOOTSTRAP_OUTPUT
)libbpf
/
31 LIBBPF_BOOTSTRAP
= $(LIBBPF_BOOTSTRAP_OUTPUT
)libbpf.a
33 ifeq ($(BPFTOOL_VERSION
),)
34 BPFTOOL_VERSION
:= $(shell make
-rR
--no-print-directory
-sC ..
/..
/.. kernelversion
)
37 $(LIBBPF_OUTPUT
) $(BOOTSTRAP_OUTPUT
) $(LIBBPF_BOOTSTRAP_OUTPUT
):
38 $(QUIET_MKDIR
)mkdir
-p
$@
40 $(LIBBPF
): FORCE |
$(LIBBPF_OUTPUT
)
41 $(Q
)$(MAKE
) -C
$(BPF_DIR
) OUTPUT
=$(LIBBPF_OUTPUT
) $(LIBBPF_OUTPUT
)libbpf.a
43 $(LIBBPF_BOOTSTRAP
): FORCE |
$(LIBBPF_BOOTSTRAP_OUTPUT
)
44 $(Q
)$(MAKE
) -C
$(BPF_DIR
) OUTPUT
=$(LIBBPF_BOOTSTRAP_OUTPUT
) \
45 ARCH
= CC
=$(HOSTCC
) LD
=$(HOSTLD
) $@
47 $(LIBBPF
)-clean: FORCE |
$(LIBBPF_OUTPUT
)
48 $(call QUIET_CLEAN
, libbpf
)
49 $(Q
)$(MAKE
) -C
$(BPF_DIR
) OUTPUT
=$(LIBBPF_OUTPUT
) clean >/dev
/null
51 $(LIBBPF_BOOTSTRAP
)-clean: FORCE |
$(LIBBPF_BOOTSTRAP_OUTPUT
)
52 $(call QUIET_CLEAN
, libbpf-bootstrap
)
53 $(Q
)$(MAKE
) -C
$(BPF_DIR
) OUTPUT
=$(LIBBPF_BOOTSTRAP_OUTPUT
) clean >/dev
/null
56 bash_compdir ?
= /usr
/share
/bash-completion
/completions
59 CFLAGS
+= -W
-Wall
-Wextra
-Wno-unused-parameter
-Wno-missing-field-initializers
60 CFLAGS
+= $(filter-out -Wswitch-enum
-Wnested-externs
,$(EXTRA_WARNINGS
))
61 CFLAGS
+= -DPACKAGE
='"bpftool"' -D__EXPORTED_HEADERS__ \
62 -I
$(if
$(OUTPUT
),$(OUTPUT
),.
) \
63 -I
$(srctree
)/kernel
/bpf
/ \
64 -I
$(srctree
)/tools
/include \
65 -I
$(srctree
)/tools
/include/uapi \
66 -I
$(srctree
)/tools
/lib \
67 -I
$(srctree
)/tools
/perf
68 CFLAGS
+= -DBPFTOOL_VERSION
='"$(BPFTOOL_VERSION)"'
69 ifneq ($(EXTRA_CFLAGS
),)
70 CFLAGS
+= $(EXTRA_CFLAGS
)
72 ifneq ($(EXTRA_LDFLAGS
),)
73 LDFLAGS
+= $(EXTRA_LDFLAGS
)
79 LLVM_STRIP ?
= llvm-strip
81 FEATURE_USER
= .bpftool
82 FEATURE_TESTS
= libbfd disassembler-four-args reallocarray zlib libcap \
84 FEATURE_DISPLAY
= libbfd disassembler-four-args zlib libcap \
88 NON_CHECK_FEAT_TARGETS
:= clean uninstall doc doc-clean doc-install doc-uninstall
90 ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS
),$(MAKECMDGOALS
)),)
95 ifeq ($(check_feat
),1)
96 ifeq ($(FEATURES_DUMP
),)
97 include $(srctree
)/tools
/build
/Makefile.feature
99 include $(FEATURES_DUMP
)
103 ifeq ($(feature-disassembler-four-args
), 1)
104 CFLAGS
+= -DDISASM_FOUR_ARGS_SIGNATURE
107 ifeq ($(feature-reallocarray
), 0)
108 CFLAGS
+= -DCOMPAT_NEED_REALLOCARRAY
111 LIBS
= $(LIBBPF
) -lelf
-lz
112 LIBS_BOOTSTRAP
= $(LIBBPF_BOOTSTRAP
) -lelf
-lz
113 ifeq ($(feature-libcap
), 1)
114 CFLAGS
+= -DUSE_LIBCAP
118 include $(wildcard $(OUTPUT
)*.d
)
120 all: $(OUTPUT
)bpftool
122 BFD_SRCS
= jit_disasm.c
124 SRCS
= $(filter-out $(BFD_SRCS
),$(wildcard *.c
))
126 ifeq ($(feature-libbfd
),1)
127 LIBS
+= -lbfd
-ldl
-lopcodes
128 else ifeq ($(feature-libbfd-liberty
),1)
129 LIBS
+= -lbfd
-ldl
-lopcodes
-liberty
130 else ifeq ($(feature-libbfd-liberty-z
),1)
131 LIBS
+= -lbfd
-ldl
-lopcodes
-liberty
-lz
134 ifneq ($(filter -lbfd
,$(LIBS
)),)
135 CFLAGS
+= -DHAVE_LIBBFD_SUPPORT
139 BPFTOOL_BOOTSTRAP
:= $(BOOTSTRAP_OUTPUT
)bpftool
141 BOOTSTRAP_OBJS
= $(addprefix $(BOOTSTRAP_OUTPUT
),main.o common.o json_writer.o gen.o btf.o
)
142 OBJS
= $(patsubst %.c
,$(OUTPUT
)%.o
,$(SRCS
)) $(OUTPUT
)disasm.o
144 VMLINUX_BTF_PATHS ?
= $(if
$(O
),$(O
)/vmlinux
) \
145 $(if
$(KBUILD_OUTPUT
),$(KBUILD_OUTPUT
)/vmlinux
) \
147 /sys
/kernel
/btf
/vmlinux \
148 /boot
/vmlinux-
$(shell uname
-r
)
149 VMLINUX_BTF ?
= $(abspath
$(firstword $(wildcard $(VMLINUX_BTF_PATHS
))))
151 ifneq ($(VMLINUX_BTF
)$(VMLINUX_H
),)
152 ifeq ($(feature-clang-bpf-co-re
),1)
156 $(OUTPUT
)vmlinux.h
: $(VMLINUX_BTF
) $(BPFTOOL_BOOTSTRAP
)
158 $(QUIET_GEN
)$(BPFTOOL_BOOTSTRAP
) btf dump file
$< format c
> $@
160 $(Q
)cp
"$(VMLINUX_H)" $@
163 $(OUTPUT
)%.bpf.o
: skeleton
/%.bpf.c
$(OUTPUT
)vmlinux.h
$(LIBBPF
)
164 $(QUIET_CLANG
)$(CLANG
) \
165 -I
$(if
$(OUTPUT
),$(OUTPUT
),.
) \
166 -I
$(srctree
)/tools
/include/uapi
/ \
168 -I
$(srctree
)/tools
/lib \
169 -g
-O2
-target bpf
-c
$< -o
$@
&& $(LLVM_STRIP
) -g
$@
171 $(OUTPUT
)%.skel.h
: $(OUTPUT
)%.bpf.o
$(BPFTOOL_BOOTSTRAP
)
172 $(QUIET_GEN
)$(BPFTOOL_BOOTSTRAP
) gen skeleton
$< > $@
174 $(OUTPUT
)prog.o
: $(OUTPUT
)profiler.skel.h
176 $(OUTPUT
)pids.o
: $(OUTPUT
)pid_iter.skel.h
181 CFLAGS
+= $(if
$(BUILD_BPF_SKELS
),,-DBPFTOOL_WITHOUT_SKELETONS
)
183 $(OUTPUT
)disasm.o
: $(srctree
)/kernel
/bpf
/disasm.c
184 $(QUIET_CC
)$(CC
) $(CFLAGS
) -c
-MMD
-o
$@
$<
186 $(OUTPUT
)feature.o
: | zdep
188 $(BPFTOOL_BOOTSTRAP
): $(BOOTSTRAP_OBJS
) $(LIBBPF_BOOTSTRAP
)
189 $(QUIET_LINK
)$(HOSTCC
) $(CFLAGS
) $(LDFLAGS
) -o
$@
$(BOOTSTRAP_OBJS
) \
192 $(OUTPUT
)bpftool
: $(OBJS
) $(LIBBPF
)
193 $(QUIET_LINK
)$(CC
) $(CFLAGS
) $(LDFLAGS
) -o
$@
$(OBJS
) $(LIBS
)
195 $(BOOTSTRAP_OUTPUT
)%.o
: %.c |
$(BOOTSTRAP_OUTPUT
)
196 $(QUIET_CC
)$(HOSTCC
) $(CFLAGS
) -c
-MMD
-o
$@
$<
199 $(QUIET_CC
)$(CC
) $(CFLAGS
) -c
-MMD
-o
$@
$<
201 feature-detect-clean
:
202 $(call QUIET_CLEAN
, feature-detect
)
203 $(Q
)$(MAKE
) -C
$(srctree
)/tools
/build
/feature
/ clean >/dev
/null
205 clean: $(LIBBPF
)-clean $(LIBBPF_BOOTSTRAP
)-clean feature-detect-clean
206 $(call QUIET_CLEAN
, bpftool
)
207 $(Q
)$(RM
) -- $(OUTPUT
)bpftool
$(OUTPUT
)*.o
$(OUTPUT
)*.d
208 $(Q
)$(RM
) -- $(OUTPUT
)*.skel.h
$(OUTPUT
)vmlinux.h
209 $(Q
)$(RM
) -r
-- $(LIBBPF_OUTPUT
) $(BOOTSTRAP_OUTPUT
)
210 $(call QUIET_CLEAN
, core-gen
)
211 $(Q
)$(RM
) -- $(OUTPUT
)FEATURE-DUMP.bpftool
212 $(Q
)$(RM
) -r
-- $(OUTPUT
)feature
/
214 install: $(OUTPUT
)bpftool
215 $(call QUIET_INSTALL
, bpftool
)
216 $(Q
)$(INSTALL
) -m
0755 -d
$(DESTDIR
)$(prefix)/sbin
217 $(Q
)$(INSTALL
) $(OUTPUT
)bpftool
$(DESTDIR
)$(prefix)/sbin
/bpftool
218 $(Q
)$(INSTALL
) -m
0755 -d
$(DESTDIR
)$(bash_compdir
)
219 $(Q
)$(INSTALL
) -m
0644 bash-completion
/bpftool
$(DESTDIR
)$(bash_compdir
)
222 $(call QUIET_UNINST
, bpftool
)
223 $(Q
)$(RM
) -- $(DESTDIR
)$(prefix)/sbin
/bpftool
224 $(Q
)$(RM
) -- $(DESTDIR
)$(bash_compdir
)/bpftool
227 $(call descend
,Documentation
)
230 $(call descend
,Documentation
,clean)
233 $(call descend
,Documentation
,install)
236 $(call descend
,Documentation
,uninstall)
241 @if
[ "$(feature-zlib)" != "1" ]; then echo
"No zlib found"; exit
1 ; fi
244 .PHONY
: all FORCE
clean install uninstall zdep
245 .PHONY
: doc doc-clean doc-install doc-uninstall