hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/tools/bpf/bpftool/Makefile
....@@ -1,5 +1,5 @@
1
+# SPDX-License-Identifier: GPL-2.0-only
12 include ../../scripts/Makefile.include
2
-include ../../scripts/utilities.mak
33
44 ifeq ($(srctree),)
55 srctree := $(patsubst %/,%,$(dir $(CURDIR)))
....@@ -16,44 +16,55 @@
1616 BPF_DIR = $(srctree)/tools/lib/bpf/
1717
1818 ifneq ($(OUTPUT),)
19
- BPF_PATH = $(OUTPUT)
19
+ LIBBPF_OUTPUT = $(OUTPUT)/libbpf/
20
+ LIBBPF_PATH = $(LIBBPF_OUTPUT)
2021 else
21
- BPF_PATH = $(BPF_DIR)
22
+ LIBBPF_PATH = $(BPF_DIR)
2223 endif
2324
24
-LIBBPF = $(BPF_PATH)libbpf.a
25
+LIBBPF = $(LIBBPF_PATH)libbpf.a
2526
26
-BPFTOOL_VERSION := $(shell make --no-print-directory -sC ../../.. kernelversion)
27
+BPFTOOL_VERSION ?= $(shell make -rR --no-print-directory -sC ../../.. kernelversion)
2728
2829 $(LIBBPF): FORCE
29
- $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(OUTPUT) $(OUTPUT)libbpf.a
30
+ $(if $(LIBBPF_OUTPUT),@mkdir -p $(LIBBPF_OUTPUT))
31
+ $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) $(LIBBPF_OUTPUT)libbpf.a
3032
3133 $(LIBBPF)-clean:
3234 $(call QUIET_CLEAN, libbpf)
33
- $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(OUTPUT) clean >/dev/null
35
+ $(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_OUTPUT) clean >/dev/null
3436
3537 prefix ?= /usr/local
3638 bash_compdir ?= /usr/share/bash-completion/completions
3739
38
-CC = gcc
39
-
4040 CFLAGS += -O2
41
-CFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wshadow -Wno-missing-field-initializers
41
+CFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers
42
+CFLAGS += $(filter-out -Wswitch-enum -Wnested-externs,$(EXTRA_WARNINGS))
4243 CFLAGS += -DPACKAGE='"bpftool"' -D__EXPORTED_HEADERS__ \
44
+ -I$(if $(OUTPUT),$(OUTPUT),.) \
4345 -I$(srctree)/kernel/bpf/ \
4446 -I$(srctree)/tools/include \
4547 -I$(srctree)/tools/include/uapi \
46
- -I$(srctree)/tools/lib/bpf \
48
+ -I$(srctree)/tools/lib \
4749 -I$(srctree)/tools/perf
4850 CFLAGS += -DBPFTOOL_VERSION='"$(BPFTOOL_VERSION)"'
49
-LIBS = -lelf -lbfd -lopcodes $(LIBBPF)
51
+ifneq ($(EXTRA_CFLAGS),)
52
+CFLAGS += $(EXTRA_CFLAGS)
53
+endif
54
+ifneq ($(EXTRA_LDFLAGS),)
55
+LDFLAGS += $(EXTRA_LDFLAGS)
56
+endif
5057
5158 INSTALL ?= install
5259 RM ?= rm -f
60
+CLANG ?= clang
61
+LLVM_STRIP ?= llvm-strip
5362
5463 FEATURE_USER = .bpftool
55
-FEATURE_TESTS = libbfd disassembler-four-args reallocarray
56
-FEATURE_DISPLAY = libbfd disassembler-four-args
64
+FEATURE_TESTS = libbfd disassembler-four-args reallocarray zlib libcap \
65
+ clang-bpf-co-re
66
+FEATURE_DISPLAY = libbfd disassembler-four-args zlib libcap \
67
+ clang-bpf-co-re
5768
5869 check_feat := 1
5970 NON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall
....@@ -79,27 +90,103 @@
7990 CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
8091 endif
8192
93
+LIBS = $(LIBBPF) -lelf -lz
94
+ifeq ($(feature-libcap), 1)
95
+CFLAGS += -DUSE_LIBCAP
96
+LIBS += -lcap
97
+endif
98
+
8299 include $(wildcard $(OUTPUT)*.d)
83100
84101 all: $(OUTPUT)bpftool
85102
86
-SRCS = $(wildcard *.c)
103
+BFD_SRCS = jit_disasm.c
104
+
105
+SRCS = $(filter-out $(BFD_SRCS),$(wildcard *.c))
106
+
107
+ifeq ($(feature-libbfd),1)
108
+ LIBS += -lbfd -ldl -lopcodes
109
+else ifeq ($(feature-libbfd-liberty),1)
110
+ LIBS += -lbfd -ldl -lopcodes -liberty
111
+else ifeq ($(feature-libbfd-liberty-z),1)
112
+ LIBS += -lbfd -ldl -lopcodes -liberty -lz
113
+endif
114
+
115
+ifneq ($(filter -lbfd,$(LIBS)),)
116
+CFLAGS += -DHAVE_LIBBFD_SUPPORT
117
+SRCS += $(BFD_SRCS)
118
+endif
119
+
120
+BPFTOOL_BOOTSTRAP := $(if $(OUTPUT),$(OUTPUT)bpftool-bootstrap,./bpftool-bootstrap)
121
+
122
+BOOTSTRAP_OBJS = $(addprefix $(OUTPUT),main.o common.o json_writer.o gen.o btf.o)
87123 OBJS = $(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o
88124
125
+VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux) \
126
+ $(if $(KBUILD_OUTPUT),$(KBUILD_OUTPUT)/vmlinux) \
127
+ ../../../vmlinux \
128
+ /sys/kernel/btf/vmlinux \
129
+ /boot/vmlinux-$(shell uname -r)
130
+VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS))))
131
+
132
+ifneq ($(VMLINUX_BTF)$(VMLINUX_H),)
133
+ifeq ($(feature-clang-bpf-co-re),1)
134
+
135
+BUILD_BPF_SKELS := 1
136
+
137
+$(OUTPUT)vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL_BOOTSTRAP)
138
+ifeq ($(VMLINUX_H),)
139
+ $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) btf dump file $< format c > $@
140
+else
141
+ $(Q)cp "$(VMLINUX_H)" $@
142
+endif
143
+
144
+$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h $(LIBBPF)
145
+ $(QUIET_CLANG)$(CLANG) \
146
+ -I$(if $(OUTPUT),$(OUTPUT),.) \
147
+ -I$(srctree)/tools/include/uapi/ \
148
+ -I$(LIBBPF_PATH) \
149
+ -I$(srctree)/tools/lib \
150
+ -g -O2 -target bpf -c $< -o $@ && $(LLVM_STRIP) -g $@
151
+
152
+$(OUTPUT)%.skel.h: $(OUTPUT)%.bpf.o $(BPFTOOL_BOOTSTRAP)
153
+ $(QUIET_GEN)$(BPFTOOL_BOOTSTRAP) gen skeleton $< > $@
154
+
155
+$(OUTPUT)prog.o: $(OUTPUT)profiler.skel.h
156
+
157
+$(OUTPUT)pids.o: $(OUTPUT)pid_iter.skel.h
158
+
159
+endif
160
+endif
161
+
162
+CFLAGS += $(if $(BUILD_BPF_SKELS),,-DBPFTOOL_WITHOUT_SKELETONS)
163
+
89164 $(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
90
- $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $<
165
+ $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD -o $@ $<
166
+
167
+$(OUTPUT)feature.o: | zdep
168
+
169
+$(BPFTOOL_BOOTSTRAP): $(BOOTSTRAP_OBJS) $(LIBBPF)
170
+ $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(BOOTSTRAP_OBJS) $(LIBS)
91171
92172 $(OUTPUT)bpftool: $(OBJS) $(LIBBPF)
93
- $(QUIET_LINK)$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
173
+ $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
94174
95175 $(OUTPUT)%.o: %.c
96
- $(QUIET_CC)$(COMPILE.c) -MMD -o $@ $<
176
+ $(QUIET_CC)$(CC) $(CFLAGS) -c -MMD -o $@ $<
97177
98
-clean: $(LIBBPF)-clean
178
+feature-detect-clean:
179
+ $(call QUIET_CLEAN, feature-detect)
180
+ $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null
181
+
182
+clean: $(LIBBPF)-clean feature-detect-clean
99183 $(call QUIET_CLEAN, bpftool)
100
- $(Q)$(RM) $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d
184
+ $(Q)$(RM) -- $(OUTPUT)bpftool $(OUTPUT)*.o $(OUTPUT)*.d
185
+ $(Q)$(RM) -- $(BPFTOOL_BOOTSTRAP) $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h
186
+ $(Q)$(RM) -r -- $(OUTPUT)libbpf/
101187 $(call QUIET_CLEAN, core-gen)
102
- $(Q)$(RM) $(OUTPUT)FEATURE-DUMP.bpftool
188
+ $(Q)$(RM) -- $(OUTPUT)FEATURE-DUMP.bpftool
189
+ $(Q)$(RM) -r -- $(OUTPUT)feature/
103190
104191 install: $(OUTPUT)bpftool
105192 $(call QUIET_INSTALL, bpftool)
....@@ -110,8 +197,8 @@
110197
111198 uninstall:
112199 $(call QUIET_UNINST, bpftool)
113
- $(Q)$(RM) $(DESTDIR)$(prefix)/sbin/bpftool
114
- $(Q)$(RM) $(DESTDIR)$(bash_compdir)/bpftool
200
+ $(Q)$(RM) -- $(DESTDIR)$(prefix)/sbin/bpftool
201
+ $(Q)$(RM) -- $(DESTDIR)$(bash_compdir)/bpftool
115202
116203 doc:
117204 $(call descend,Documentation)
....@@ -127,6 +214,10 @@
127214
128215 FORCE:
129216
130
-.PHONY: all FORCE clean install uninstall
217
+zdep:
218
+ @if [ "$(feature-zlib)" != "1" ]; then echo "No zlib found"; exit 1 ; fi
219
+
220
+.SECONDARY:
221
+.PHONY: all FORCE clean install uninstall zdep
131222 .PHONY: doc doc-clean doc-install doc-uninstall
132223 .DEFAULT_GOAL := all