Integrate libxdp as a submodule

This adds libxdp as a submodule and link target alongside libbpf. This
should make it just as easy for examples to use libxdp as it currently is
for libbpf. Some hoops need to be jumped through to make libxdp link
against the same version of libbpf as the one we use in this repository.

Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
This commit is contained in:
Toke Høiland-Jørgensen
2021-10-15 13:27:49 +02:00
parent 58fcc521b7
commit ff3e4272ff
6 changed files with 85 additions and 9 deletions

3
.gitmodules vendored
View File

@@ -2,3 +2,6 @@
path = lib/libbpf
url = https://github.com/xdp-project/libbpf.git
ignore = dirty
[submodule "lib/xdp-tools"]
path = lib/xdp-tools
url = https://github.com/xdp-project/xdp-tools

45
configure vendored
View File

@@ -11,6 +11,8 @@ CONFIG=".${CONFIG}.tmp"
TMPDIR=$(mktemp -d config.XXXXXX)
trap 'status=$?; rm -rf $TMPDIR; rm -f $CONFIG; exit $status' EXIT HUP INT QUIT TERM
SUBMODULE_LIBBPF=0
check_toolchain()
{
local clang_version
@@ -123,9 +125,10 @@ EOF
fi
echo submodule
SUBMODULE_LIBBPF=1
echo "SYSTEM_LIBBPF:=n" >> $CONFIG
echo 'CFLAGS += -I$(LIB_DIR)/libbpf-install/usr/include' >>$CONFIG
echo 'BPF_CFLAGS += -I$(LIB_DIR)/libbpf-install/usr/include' >>$CONFIG
echo 'CFLAGS += -I$(LIB_DIR)/lib-install/usr/include' >>$CONFIG
echo 'BPF_CFLAGS += -I$(LIB_DIR)/lib-install/usr/include' >>$CONFIG
echo 'LDFLAGS += -L$(LIB_DIR)/libbpf/src' >>$CONFIG
echo 'LDLIBS += -l:libbpf.a' >>$CONFIG
echo 'OBJECT_LIBBPF = $(LIB_DIR)/libbpf/src/libbpf.a' >>$CONFIG
@@ -173,6 +176,42 @@ EOF
fi
}
check_libxdp()
{
if [ "${FORCE_SUBMODULE_LIBXDP:-0}" -ne "1" ] && ${PKG_CONFIG} libxdp --exists; then
LIBXDP_CFLAGS=$(${PKG_CONFIG} libxdp --cflags)
LIBXDP_LDLIBS=$(${PKG_CONFIG} libxdp --libs)
echo "SYSTEM_LIBXDP:=y" >>$CONFIG
echo 'CFLAGS += ' $LIBXDP_CFLAGS >> $CONFIG
echo 'LDLIBS += ' $LIBXDP_LDLIBS >>$CONFIG
echo 'OBJECT_LIBXDP = ' >>$CONFIG
echo system
return 0
fi
echo submodule
echo "SYSTEM_LIBXDP:=n" >> $CONFIG
if [ "$SUBMODULE_LIBBPF" -eq "1" ]; then
echo "Configuring libxdp to use our libbpf submodule"
(export LIBBPF_DIR="$(readlink -m lib/libbpf)" LIBBPF_INCLUDE_DIR="$(readlink -m lib/lib-install/usr/include)";
cd lib/xdp-tools; ./configure)
else
echo "Configuring libxdp without our libbpf"
(cd lib/xdp-tools; ./configure)
# these are already set if using libbpf as a submodule
echo 'CFLAGS += -I$(LIB_DIR)/lib-install/usr/include' >>$CONFIG
echo 'BPF_CFLAGS += -I$(LIB_DIR)/lib-install/usr/include' >>$CONFIG
fi
echo 'LDFLAGS += -L$(LIB_DIR)/lib-install/usr/lib' >>$CONFIG
echo 'LDLIBS += -l:libxdp.a' >>$CONFIG
echo 'OBJECT_LIBXDP = $(LIB_DIR)/lib-install/usr/lib/libxdp.a' >>$CONFIG
if ! [ -d "lib/xdp-tools/lib" ] && [ -f ".gitmodules" ] && [ -e ".git" ]; then
git submodule init && git submodule update
fi
}
quiet_config()
{
cat <<EOF
@@ -211,6 +250,8 @@ check_toolchain
echo -n "libbpf support: "
check_libbpf
echo -n "libxdp support: "
check_libxdp
check_bpf_use_errno

1
lib/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
lib-install

View File

@@ -2,17 +2,18 @@
LIBBPF_CFLAGS:=$(if $(CFLAGS),$(CFLAGS),-g -O2 -Werror -Wall) -fPIC
LIB_DIR = .
LIB_INSTALL := lib-install
include defines.mk
SUBDIRS=
all: $(OBJECT_LIBBPF)
all: $(OBJECT_LIBBPF) $(OBJECT_LIBXDP)
@set -e; \
for i in $(SUBDIRS); \
do echo; echo " $$i"; $(MAKE) -C $$i; done
.PHONY: clean
clean: libbpf_clean
clean: libbpf_clean libxdp_clean
@for i in $(SUBDIRS); \
do $(MAKE) -C $$i clean; done
@@ -21,7 +22,9 @@ install:
$(MAKE) -C libxdp install
$(MAKE) -C testing install
libbpf: $(OBJECT_LIBBPF)
libxdp: libbpf $(OBJECT_LIBXDP)
# Handle libbpf as git submodule
ifeq ($(SYSTEM_LIBBPF),n)
@@ -31,21 +34,45 @@ endif
# Detect submodule libbpf source file changes
LIBBPF_SOURCES := $(wildcard libbpf/src/*.[ch])
LIBBPF_INSTALL := libbpf-install
INSTDIR=../../$(LIBBPF_INSTALL)
.PHONY: libbpf_clean
libbpf/src/libbpf.a: $(LIBBPF_SOURCES)
@echo ; echo " libbpf"
$(QUIET_CC)$(MAKE) -C libbpf/src CFLAGS="$(LIBBPF_CFLAGS)" $P
$(QUIET_INSTALL)$(MAKE) -C libbpf/src DESTDIR=$(INSTDIR) install_headers $P
$(QUIET_INSTALL)$(MAKE) -C libbpf/src DESTDIR=../../$(LIB_INSTALL) install_headers $P
.PHONY: libbpf_clean
libbpf_clean:
$(Q)$(MAKE) -C libbpf/src clean $P
$(Q)$(RM) -r $(LIBBPF_INSTALL)
$(Q)$(RM) -r $(LIB_INSTALL)
else
libbpf_clean:
@echo -n
endif
# Handle libbpf as git submodule
ifeq ($(SYSTEM_LIBXDP),n)
ifeq ($(VERBOSE),0)
P:= >/dev/null
endif
# Detect submodule libbpf source file changes
LIBXDP_SOURCES := $(wildcard xdp-tools/lib/libxdp/*.[ch])
$(LIB_INSTALL)/usr/lib/libxdp.a: $(LIBXDP_SOURCES)
@echo ; echo " libxdp"
$(QUIET_CC)$(MAKE) -C xdp-tools BUILD_STATIC_ONLY=1 libxdp $P
$(QUIET_INSTALL)$(MAKE) -C xdp-tools DESTDIR=../../../$(LIB_INSTALL) PREFIX=/usr BUILD_STATIC_ONLY=1 libxdp_install $P
.PHONY: libxdp_clean
libxdp_clean:
$(Q)$(MAKE) -C xdp-tools clean $P
$(Q)$(RM) -r $(LIB_INSTALL)
else
libxdp_clean:
@echo -n
endif

View File

@@ -61,6 +61,9 @@ clean::
$(OBJECT_LIBBPF): $(LIBBPF_SOURCES)
$(Q)$(MAKE) -C $(LIB_DIR) libbpf
$(OBJECT_LIBXDP): $(LIBXDP_SOURCES)
$(Q)$(MAKE) -C $(LIB_DIR) libxdp
$(CONFIGMK):
$(Q)$(MAKE) -C $(LIB_DIR)/.. config.mk

1
lib/xdp-tools Submodule

Submodule lib/xdp-tools added at 27cbd728e2