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
)
23 LIBBPF_PATH
= $(BPF_DIR
)
26 LIBBPF
= $(LIBBPF_PATH
)libbpf.a
28 BPFTOOL_VERSION
:= $(shell make
-rR
--no-print-directory
-sC ..
/..
/.. kernelversion
)
31 $(if
$(LIBBPF_OUTPUT
),@mkdir
-p
$(LIBBPF_OUTPUT
))
32 $(Q
)$(MAKE
) -C
$(BPF_DIR
) OUTPUT
=$(LIBBPF_OUTPUT
) $(LIBBPF_OUTPUT
)libbpf.a
35 $(call QUIET_CLEAN
, libbpf
)
36 $(Q
)$(MAKE
) -C
$(BPF_DIR
) OUTPUT
=$(LIBBPF_OUTPUT
) clean >/dev
/null
39 bash_compdir ?
= /usr
/share
/bash-completion
/completions
42 CFLAGS
+= -W
-Wall
-Wextra
-Wno-unused-parameter
-Wno-missing-field-initializers
43 CFLAGS
+= $(filter-out -Wswitch-enum
,$(EXTRA_WARNINGS
))
44 CFLAGS
+= -DPACKAGE
='"bpftool"' -D__EXPORTED_HEADERS__ \
45 -I
$(srctree
)/kernel
/bpf
/ \
46 -I
$(srctree
)/tools
/include \
47 -I
$(srctree
)/tools
/include/uapi \
48 -I
$(srctree
)/tools
/lib \
49 -I
$(srctree
)/tools
/perf
50 CFLAGS
+= -DBPFTOOL_VERSION
='"$(BPFTOOL_VERSION)"'
51 ifneq ($(EXTRA_CFLAGS
),)
52 CFLAGS
+= $(EXTRA_CFLAGS
)
54 ifneq ($(EXTRA_LDFLAGS
),)
55 LDFLAGS
+= $(EXTRA_LDFLAGS
)
58 LIBS
= $(LIBBPF
) -lelf
-lz
64 FEATURE_USER
= .bpftool
65 FEATURE_TESTS
= libbfd disassembler-four-args reallocarray zlib \
67 FEATURE_DISPLAY
= libbfd disassembler-four-args zlib clang-bpf-global-var
70 NON_CHECK_FEAT_TARGETS
:= clean uninstall doc doc-clean doc-install doc-uninstall
72 ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS
),$(MAKECMDGOALS
)),)
77 ifeq ($(check_feat
),1)
78 ifeq ($(FEATURES_DUMP
),)
79 include $(srctree
)/tools
/build
/Makefile.feature
81 include $(FEATURES_DUMP
)
85 ifeq ($(feature-disassembler-four-args
), 1)
86 CFLAGS
+= -DDISASM_FOUR_ARGS_SIGNATURE
89 ifeq ($(feature-reallocarray
), 0)
90 CFLAGS
+= -DCOMPAT_NEED_REALLOCARRAY
93 include $(wildcard $(OUTPUT
)*.d
)
97 BFD_SRCS
= jit_disasm.c
99 SRCS
= $(filter-out $(BFD_SRCS
),$(wildcard *.c
))
101 ifeq ($(feature-libbfd
),1)
102 LIBS
+= -lbfd
-ldl
-lopcodes
103 else ifeq ($(feature-libbfd-liberty
),1)
104 LIBS
+= -lbfd
-ldl
-lopcodes
-liberty
105 else ifeq ($(feature-libbfd-liberty-z
),1)
106 LIBS
+= -lbfd
-ldl
-lopcodes
-liberty
-lz
109 ifneq ($(filter -lbfd
,$(LIBS
)),)
110 CFLAGS
+= -DHAVE_LIBBFD_SUPPORT
114 OBJS
= $(patsubst %.c
,$(OUTPUT
)%.o
,$(SRCS
)) $(OUTPUT
)disasm.o
115 _OBJS
= $(filter-out $(OUTPUT
)prog.o
,$(OBJS
)) $(OUTPUT
)_prog.o
117 ifeq ($(feature-clang-bpf-global-var
),1)
123 $(OUTPUT
)_prog.o
: prog.c
124 $(QUIET_CC
)$(COMPILE.c
) -MMD
-DBPFTOOL_WITHOUT_SKELETONS
-o
$@
$<
126 $(OUTPUT
)_bpftool
: $(_OBJS
) $(LIBBPF
)
127 $(QUIET_LINK
)$(CC
) $(CFLAGS
) $(LDFLAGS
) -o
$@
$(_OBJS
) $(LIBS
)
129 skeleton
/profiler.bpf.o
: skeleton
/profiler.bpf.c
$(LIBBPF
)
130 $(QUIET_CLANG
)$(CLANG
) \
131 -I
$(srctree
)/tools
/include/uapi
/ \
132 -I
$(LIBBPF_PATH
) -I
$(srctree
)/tools
/lib \
133 -g
-O2
-target bpf
-c
$< -o
$@
135 profiler.skel.h
: $(OUTPUT
)_bpftool skeleton
/profiler.bpf.o
136 $(QUIET_GEN
)$(OUTPUT
).
/_bpftool gen skeleton skeleton
/profiler.bpf.o
> $@
138 $(OUTPUT
)prog.o
: prog.c profiler.skel.h
139 $(QUIET_CC
)$(COMPILE.c
) -MMD
-o
$@
$<
141 $(OUTPUT
)disasm.o
: $(srctree
)/kernel
/bpf
/disasm.c
142 $(QUIET_CC
)$(COMPILE.c
) -MMD
-o
$@
$<
144 $(OUTPUT
)feature.o
: | zdep
146 $(OUTPUT
)bpftool
: $(__OBJS
) $(LIBBPF
)
147 $(QUIET_LINK
)$(CC
) $(CFLAGS
) $(LDFLAGS
) -o
$@
$(__OBJS
) $(LIBS
)
150 $(QUIET_CC
)$(COMPILE.c
) -MMD
-o
$@
$<
152 clean: $(LIBBPF
)-clean
153 $(call QUIET_CLEAN
, bpftool
)
154 $(Q
)$(RM
) -- $(OUTPUT
)bpftool
$(OUTPUT
)*.o
$(OUTPUT
)*.d
155 $(Q
)$(RM
) -- $(OUTPUT
)_bpftool profiler.skel.h skeleton
/profiler.bpf.o
156 $(Q
)$(RM
) -r
-- $(OUTPUT
)libbpf
/
157 $(call QUIET_CLEAN
, core-gen
)
158 $(Q
)$(RM
) -- $(OUTPUT
)FEATURE-DUMP.bpftool
159 $(Q
)$(RM
) -r
-- $(OUTPUT
)feature
/
161 install: $(OUTPUT
)bpftool
162 $(call QUIET_INSTALL
, bpftool
)
163 $(Q
)$(INSTALL
) -m
0755 -d
$(DESTDIR
)$(prefix)/sbin
164 $(Q
)$(INSTALL
) $(OUTPUT
)bpftool
$(DESTDIR
)$(prefix)/sbin
/bpftool
165 $(Q
)$(INSTALL
) -m
0755 -d
$(DESTDIR
)$(bash_compdir
)
166 $(Q
)$(INSTALL
) -m
0644 bash-completion
/bpftool
$(DESTDIR
)$(bash_compdir
)
169 $(call QUIET_UNINST
, bpftool
)
170 $(Q
)$(RM
) -- $(DESTDIR
)$(prefix)/sbin
/bpftool
171 $(Q
)$(RM
) -- $(DESTDIR
)$(bash_compdir
)/bpftool
174 $(call descend
,Documentation
)
177 $(call descend
,Documentation
,clean)
180 $(call descend
,Documentation
,install)
183 $(call descend
,Documentation
,uninstall)
188 @if
[ "$(feature-zlib)" != "1" ]; then echo
"No zlib found"; exit
1 ; fi
190 .PHONY
: all FORCE
clean install uninstall zdep
191 .PHONY
: doc doc-clean doc-install doc-uninstall