1 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
2 include ..
/..
/scripts
/Makefile.
include
4 OUTPUT ?
= $(abspath .output
)/
6 BPFTOOL_OUTPUT
:= $(OUTPUT
)bpftool
/
7 DEFAULT_BPFTOOL
:= $(BPFTOOL_OUTPUT
)bootstrap
/bpftool
8 BPFTOOL ?
= $(DEFAULT_BPFTOOL
)
9 LIBBPF_SRC
:= $(abspath ..
/..
/lib
/bpf
)
10 BPFOBJ_OUTPUT
:= $(OUTPUT
)libbpf
/
11 BPFOBJ
:= $(BPFOBJ_OUTPUT
)libbpf.a
12 BPF_DESTDIR
:= $(BPFOBJ_OUTPUT
)
13 BPF_INCLUDE
:= $(BPF_DESTDIR
)/include
14 INCLUDES
:= -I
$(OUTPUT
) -I
$(BPF_INCLUDE
) -I
$(abspath ..
/..
/include/uapi
)
15 CFLAGS
:= -g
-Wall
$(CLANG_CROSS_FLAGS
)
16 CFLAGS
+= $(EXTRA_CFLAGS
)
17 LDFLAGS
+= $(EXTRA_LDFLAGS
)
20 # Try to detect best kernel BTF source
21 KERNEL_REL
:= $(shell uname
-r
)
22 VMLINUX_BTF_PATHS
:= $(if
$(O
),$(O
)/vmlinux
) \
23 $(if
$(KBUILD_OUTPUT
),$(KBUILD_OUTPUT
)/vmlinux
) \
24 ..
/..
/..
/vmlinux
/sys
/kernel
/btf
/vmlinux \
25 /boot
/vmlinux-
$(KERNEL_REL
)
26 VMLINUX_BTF_PATH
:= $(or
$(VMLINUX_BTF
),$(firstword \
27 $(wildcard $(VMLINUX_BTF_PATHS
))))
33 MAKEFLAGS
+= --no-print-directory
34 submake_extras
:= feature_display
=0
39 .PHONY
: all clean runqslower libbpf_hdrs
42 runqslower
: $(OUTPUT
)/runqslower
45 $(call QUIET_CLEAN
, runqslower
)
46 $(Q
)$(RM
) -r
$(BPFOBJ_OUTPUT
) $(BPFTOOL_OUTPUT
)
47 $(Q
)$(RM
) $(OUTPUT
)*.o
$(OUTPUT
)*.d
48 $(Q
)$(RM
) $(OUTPUT
)*.skel.h
$(OUTPUT
)vmlinux.h
49 $(Q
)$(RM
) $(OUTPUT
)runqslower
52 libbpf_hdrs
: $(BPFOBJ
)
54 $(OUTPUT
)/runqslower
: $(OUTPUT
)/runqslower.o
$(BPFOBJ
)
55 $(QUIET_LINK
)$(CC
) $(CFLAGS
) $(LDFLAGS
) $^
$(LDLIBS
) -o
$@
57 $(OUTPUT
)/runqslower.o
: runqslower.h
$(OUTPUT
)/runqslower.skel.h \
58 $(OUTPUT
)/runqslower.bpf.o | libbpf_hdrs
60 $(OUTPUT
)/runqslower.bpf.o
: $(OUTPUT
)/vmlinux.h runqslower.h | libbpf_hdrs
62 $(OUTPUT
)/%.skel.h
: $(OUTPUT
)/%.bpf.o |
$(BPFTOOL
)
63 $(QUIET_GEN
)$(BPFTOOL
) gen skeleton
$< > $@
65 $(OUTPUT
)/%.bpf.o
: %.bpf.c
$(BPFOBJ
) |
$(OUTPUT
)
66 $(QUIET_GEN
)$(CLANG
) -g
-O2
--target
=bpf
$(INCLUDES
) \
67 -c
$(filter %.c
,$^
) -o
$@
&& \
70 $(OUTPUT
)/%.o
: %.c |
$(OUTPUT
)
71 $(QUIET_CC
)$(CC
) $(CFLAGS
) $(INCLUDES
) -c
$(filter %.c
,$^
) -o
$@
73 $(OUTPUT
) $(BPFOBJ_OUTPUT
) $(BPFTOOL_OUTPUT
):
74 $(QUIET_MKDIR
)mkdir
-p
$@
76 $(OUTPUT
)/vmlinux.h
: $(VMLINUX_BTF_PATH
) |
$(OUTPUT
) $(BPFTOOL
)
78 $(Q
)if
[ ! -e
"$(VMLINUX_BTF_PATH)" ] ; then \
79 echo
"Couldn't find kernel BTF; set VMLINUX_BTF to" \
80 "specify its location." >&2; \
83 $(QUIET_GEN
)$(BPFTOOL
) btf dump file
$(VMLINUX_BTF_PATH
) format c
> $@
85 $(Q
)cp
"$(VMLINUX_H)" $@
88 $(BPFOBJ
): $(wildcard $(LIBBPF_SRC
)/*.
[ch
] $(LIBBPF_SRC
)/Makefile
) |
$(BPFOBJ_OUTPUT
)
89 $(Q
)$(MAKE
) $(submake_extras
) -C
$(LIBBPF_SRC
) OUTPUT
=$(BPFOBJ_OUTPUT
) \
90 DESTDIR
=$(BPFOBJ_OUTPUT
) prefix= $(abspath
$@
) install_headers
92 $(DEFAULT_BPFTOOL
): |
$(BPFTOOL_OUTPUT
)
93 $(Q
)$(MAKE
) $(submake_extras
) -C ..
/bpftool OUTPUT
=$(BPFTOOL_OUTPUT
) bootstrap