Skip to content

Commit afe4943

Browse files
kkdwiveditohojo
authored andcommitted
xdp-tools: Feature detection for bpftool
Add bpftool feature detection to generate necessarily BPF skeletons from the BPF objects we build. Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> [ Support skeletons in common.mk, make bpftool and clang-11 hard dependencies ] Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
1 parent 3b75c82 commit afe4943

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,6 @@ xdp-dispatcher.c
6363
.clangd
6464
.cache
6565
compile_commands.json
66+
67+
# BPF skeleton files
68+
*.skel.h

configure

+15-4
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ find_tool()
3939

4040
# we're looking for a binary with the same name as tool_name; try version
4141
# suffixes in order until we find one
42-
for v in 16 15 14 13 12 11 10; do
42+
for v in 16 15 14 13 12 11; do
4343
tool_path="${tool_name}-$v"
4444
if command -v "$tool_path" >/dev/null 2>&1; then
4545
echo $tool_path
@@ -55,6 +55,7 @@ check_toolchain()
5555
{
5656
local emacs_version
5757
local clang_version
58+
local bpftool_version
5859

5960
: ${PKG_CONFIG:=pkg-config}
6061
: ${CC=gcc}
@@ -64,12 +65,13 @@ check_toolchain()
6465
: ${LLC=llc}
6566
: ${M4=m4}
6667
: ${EMACS=emacs}
68+
: ${BPFTOOL=bpftool}
6769
: ${ARCH_INCLUDES=}
6870

6971
CLANG=$(find_tool clang "$CLANG")
7072
LLC=$(find_tool llc "$LLC")
7173

72-
for TOOL in $PKG_CONFIG $CC $LD $OBJCOPY $CLANG $LLC $M4; do
74+
for TOOL in $PKG_CONFIG $CC $LD $OBJCOPY $CLANG $LLC $M4 $BPFTOOL; do
7375
if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then
7476
echo "*** ERROR: Cannot find tool ${TOOL}" ;
7577
exit 1;
@@ -83,8 +85,8 @@ check_toolchain()
8385
fi
8486

8587
echo "Found clang binary '$CLANG' with version $clang_version (from '$($CLANG --version | head -n 1)')"
86-
if [ "$clang_version" -lt "10" ]; then
87-
echo "*** ERROR: Need LLVM version 10+, '$CLANG' is version $clang_version"
88+
if [ "$clang_version" -lt "11" ]; then
89+
echo "*** ERROR: Need LLVM version 11+, '$CLANG' is version $clang_version"
8890
[ -n "$RELAXED_LLVM_VERSION" ] || exit 1
8991
fi
9092

@@ -106,6 +108,14 @@ check_toolchain()
106108
exit 1
107109
fi
108110

111+
if $BPFTOOL gen help 2>&1 | grep 'gen help' > /dev/null; then
112+
bpftool_version=$($BPFTOOL version | head -n 1)
113+
echo "using $bpftool_version"
114+
else
115+
echo "bpftool doesn't support skeleton generation"
116+
exit 1
117+
fi
118+
109119
if [ -z "$ARCH_INCLUDES" ]; then
110120
for dir in $(echo | $CC -Wp,-v -E - 2>&1 | grep '^ '); do
111121
local idir
@@ -123,6 +133,7 @@ check_toolchain()
123133
echo "M4:=${M4}" >>$CONFIG
124134
echo "EMACS:=${EMACS}" >>$CONFIG
125135
echo "ARCH_INCLUDES:=$ARCH_INCLUDES" >> $CONFIG
136+
echo "BPFTOOL:=${BPFTOOL}" >> $CONFIG
126137
}
127138

128139
check_zlib()

lib/common.mk

+7-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
#
1313
XDP_C = ${XDP_TARGETS:=.c}
1414
XDP_OBJ = ${XDP_C:.c=.o}
15+
BPF_SKEL_OBJ = ${BPF_SKEL_TARGETS:=.o}
16+
BPF_SKEL_H = ${BPF_SKEL_OBJ:.bpf.o=.skel.h}
1517
USER_C := ${USER_TARGETS:=.c}
1618
USER_OBJ := ${USER_C:.c=.o}
1719
TEST_C := ${TEST_TARGETS:=.c}
@@ -63,7 +65,7 @@ all: $(USER_TARGETS) $(XDP_OBJ) $(EXTRA_TARGETS) $(TEST_TARGETS) man
6365

6466
.PHONY: clean
6567
clean::
66-
$(Q)rm -f $(USER_TARGETS) $(XDP_OBJ) $(USER_OBJ) $(TEST_OBJ) $(USER_GEN) *.ll
68+
$(Q)rm -f $(USER_TARGETS) $(XDP_OBJ) $(USER_OBJ) $(TEST_OBJ) $(USER_GEN) $(BPF_SKEL_H) *.ll
6769

6870
.PHONY: install
6971
install: all install_local
@@ -100,7 +102,7 @@ $(LIB_OBJS): %.o: %.c %.h $(LIB_H)
100102
$(Q)$(MAKE) -C $(dir $@) $(notdir $@)
101103

102104
ALL_EXEC_TARGETS=$(USER_TARGETS) $(TEST_TARGETS)
103-
$(ALL_EXEC_TARGETS): %: %.c $(OBJECT_LIBBPF) $(OBJECT_LIBXDP) $(LIBMK) $(LIB_OBJS) $(KERN_USER_H) $(EXTRA_DEPS) $(EXTRA_USER_DEPS)
105+
$(ALL_EXEC_TARGETS): %: %.c $(OBJECT_LIBBPF) $(OBJECT_LIBXDP) $(LIBMK) $(LIB_OBJS) $(KERN_USER_H) $(EXTRA_DEPS) $(EXTRA_USER_DEPS) $(BPF_SKEL_H)
104106
$(QUIET_CC)$(CC) -Wall $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(LIB_OBJS) \
105107
$< $(LDLIBS)
106108

@@ -117,6 +119,9 @@ $(XDP_OBJ): %.o: %.c $(KERN_USER_H) $(EXTRA_DEPS) $(BPF_HEADERS) $(LIBMK)
117119
-O2 -emit-llvm -c -g -o ${@:.o=.ll} $<
118120
$(QUIET_LLC)$(LLC) -march=$(BPF_TARGET) -filetype=obj -o $@ ${@:.o=.ll}
119121

122+
$(BPF_SKEL_H): %.skel.h: %.bpf.o
123+
$(QUIET_GEN)$(BPFTOOL) gen skeleton $< name ${@:.skel.h=} > $@
124+
120125
.PHONY: man
121126
ifeq ($(EMACS),)
122127
man: ;

0 commit comments

Comments
 (0)