@@ -19,24 +19,37 @@ BPF_DIR = $(srctree)/tools/lib/bpf/
19
19
ifneq ($(OUTPUT ) ,)
20
20
LIBBPF_OUTPUT = $(OUTPUT ) /libbpf/
21
21
LIBBPF_PATH = $(LIBBPF_OUTPUT )
22
+ BOOTSTRAP_OUTPUT = $(OUTPUT ) /bootstrap/
22
23
else
24
+ LIBBPF_OUTPUT =
23
25
LIBBPF_PATH = $(BPF_DIR )
26
+ BOOTSTRAP_OUTPUT = $(CURDIR ) /bootstrap/
24
27
endif
25
28
26
29
LIBBPF = $(LIBBPF_PATH ) libbpf.a
30
+ LIBBPF_BOOTSTRAP_OUTPUT = $(BOOTSTRAP_OUTPUT ) libbpf/
31
+ LIBBPF_BOOTSTRAP = $(LIBBPF_BOOTSTRAP_OUTPUT ) libbpf.a
27
32
28
33
BPFTOOL_VERSION ?= $(shell make -rR --no-print-directory -sC ../../.. kernelversion)
29
34
30
- $(LIBBPF_OUTPUT ) :
35
+ $(LIBBPF_OUTPUT ) $( BOOTSTRAP_OUTPUT ) $( LIBBPF_BOOTSTRAP_OUTPUT ) :
31
36
$(QUIET_MKDIR ) mkdir -p $@
32
37
33
38
$(LIBBPF ) : FORCE | $(LIBBPF_OUTPUT )
34
39
$(Q )$(MAKE ) -C $(BPF_DIR ) OUTPUT=$(LIBBPF_OUTPUT ) $(LIBBPF_OUTPUT ) libbpf.a
35
40
41
+ $(LIBBPF_BOOTSTRAP ) : FORCE | $(LIBBPF_BOOTSTRAP_OUTPUT )
42
+ $(Q )$(MAKE ) -C $(BPF_DIR ) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT ) \
43
+ ARCH= CC=$(HOSTCC ) LD=$(HOSTLD ) $@
44
+
36
45
$(LIBBPF ) -clean : $(LIBBPF_OUTPUT )
37
46
$(call QUIET_CLEAN, libbpf)
38
47
$(Q )$(MAKE ) -C $(BPF_DIR ) OUTPUT=$(LIBBPF_OUTPUT ) clean > /dev/null
39
48
49
+ $(LIBBPF_BOOTSTRAP ) -clean : $(LIBBPF_BOOTSTRAP_OUTPUT )
50
+ $(call QUIET_CLEAN, libbpf-bootstrap)
51
+ $(Q )$(MAKE ) -C $(BPF_DIR ) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT ) clean > /dev/null
52
+
40
53
prefix ?= /usr/local
41
54
bash_compdir ?= /usr/share/bash-completion/completions
42
55
@@ -94,6 +107,7 @@ CFLAGS += -DCOMPAT_NEED_REALLOCARRAY
94
107
endif
95
108
96
109
LIBS = $(LIBBPF ) -lelf -lz
110
+ LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP ) -lelf -lz
97
111
ifeq ($(feature-libcap ) , 1)
98
112
CFLAGS += -DUSE_LIBCAP
99
113
LIBS += -lcap
@@ -120,9 +134,9 @@ CFLAGS += -DHAVE_LIBBFD_SUPPORT
120
134
SRCS += $(BFD_SRCS )
121
135
endif
122
136
123
- BPFTOOL_BOOTSTRAP := $(if $( OUTPUT ) , $( OUTPUT ) bpftool-bootstrap,./bpftool-bootstrap)
137
+ BPFTOOL_BOOTSTRAP := $(BOOTSTRAP_OUTPUT ) bpftool
124
138
125
- BOOTSTRAP_OBJS = $(addprefix $(OUTPUT ) ,main.o common.o json_writer.o gen.o btf.o)
139
+ BOOTSTRAP_OBJS = $(addprefix $(BOOTSTRAP_OUTPUT ) ,main.o common.o json_writer.o gen.o btf.o)
126
140
OBJS = $(patsubst % .c,$(OUTPUT ) % .o,$(SRCS ) ) $(OUTPUT ) disasm.o
127
141
128
142
VMLINUX_BTF_PATHS ?= $(if $(O ) ,$(O ) /vmlinux) \
@@ -169,24 +183,28 @@ $(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c
169
183
170
184
$(OUTPUT ) feature.o : | zdep
171
185
172
- $(BPFTOOL_BOOTSTRAP ) : $(BOOTSTRAP_OBJS ) $(LIBBPF )
173
- $(QUIET_LINK )$(CC ) $(CFLAGS ) $(LDFLAGS ) -o $@ $(BOOTSTRAP_OBJS ) $(LIBS )
186
+ $(BPFTOOL_BOOTSTRAP ) : $(BOOTSTRAP_OBJS ) $(LIBBPF_BOOTSTRAP )
187
+ $(QUIET_LINK )$(HOSTCC ) $(CFLAGS ) $(LDFLAGS ) -o $@ $(BOOTSTRAP_OBJS ) \
188
+ $(LIBS_BOOTSTRAP )
174
189
175
190
$(OUTPUT ) bpftool : $(OBJS ) $(LIBBPF )
176
191
$(QUIET_LINK )$(CC ) $(CFLAGS ) $(LDFLAGS ) -o $@ $(OBJS ) $(LIBS )
177
192
193
+ $(BOOTSTRAP_OUTPUT ) % .o : % .c | $(BOOTSTRAP_OUTPUT )
194
+ $(QUIET_CC )$(HOSTCC ) $(CFLAGS ) -c -MMD -o $@ $<
195
+
178
196
$(OUTPUT ) % .o : % .c
179
197
$(QUIET_CC )$(CC ) $(CFLAGS ) -c -MMD -o $@ $<
180
198
181
199
feature-detect-clean :
182
200
$(call QUIET_CLEAN, feature-detect)
183
201
$(Q )$(MAKE ) -C $(srctree ) /tools/build/feature/ clean > /dev/null
184
202
185
- clean : $(LIBBPF ) -clean feature-detect-clean
203
+ clean : $(LIBBPF ) -clean $( LIBBPF_BOOTSTRAP ) -clean feature-detect-clean
186
204
$(call QUIET_CLEAN, bpftool)
187
205
$(Q )$(RM ) -- $(OUTPUT ) bpftool $(OUTPUT ) * .o $(OUTPUT ) * .d
188
- $(Q )$(RM ) -- $(BPFTOOL_BOOTSTRAP ) $( OUTPUT )* .skel.h $(OUTPUT ) vmlinux.h
189
- $(Q )$(RM ) -r -- $(OUTPUT ) libbpf/
206
+ $(Q )$(RM ) -- $(OUTPUT ) * .skel.h $(OUTPUT ) vmlinux.h
207
+ $(Q )$(RM ) -r -- $(LIBBPF_OUTPUT ) $( BOOTSTRAP_OUTPUT )
190
208
$(call QUIET_CLEAN, core-gen)
191
209
$(Q )$(RM ) -- $(OUTPUT ) FEATURE-DUMP.bpftool
192
210
$(Q )$(RM ) -r -- $(OUTPUT ) feature/
0 commit comments