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 path = lib/libbpf
url = https://github.com/xdp-project/libbpf.git url = https://github.com/xdp-project/libbpf.git
ignore = dirty 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) TMPDIR=$(mktemp -d config.XXXXXX)
trap 'status=$?; rm -rf $TMPDIR; rm -f $CONFIG; exit $status' EXIT HUP INT QUIT TERM trap 'status=$?; rm -rf $TMPDIR; rm -f $CONFIG; exit $status' EXIT HUP INT QUIT TERM
SUBMODULE_LIBBPF=0
check_toolchain() check_toolchain()
{ {
local clang_version local clang_version
@@ -123,9 +125,10 @@ EOF
fi fi
echo submodule echo submodule
SUBMODULE_LIBBPF=1
echo "SYSTEM_LIBBPF:=n" >> $CONFIG echo "SYSTEM_LIBBPF:=n" >> $CONFIG
echo '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)/libbpf-install/usr/include' >>$CONFIG echo 'BPF_CFLAGS += -I$(LIB_DIR)/lib-install/usr/include' >>$CONFIG
echo 'LDFLAGS += -L$(LIB_DIR)/libbpf/src' >>$CONFIG echo 'LDFLAGS += -L$(LIB_DIR)/libbpf/src' >>$CONFIG
echo 'LDLIBS += -l:libbpf.a' >>$CONFIG echo 'LDLIBS += -l:libbpf.a' >>$CONFIG
echo 'OBJECT_LIBBPF = $(LIB_DIR)/libbpf/src/libbpf.a' >>$CONFIG echo 'OBJECT_LIBBPF = $(LIB_DIR)/libbpf/src/libbpf.a' >>$CONFIG
@@ -173,6 +176,42 @@ EOF
fi 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() quiet_config()
{ {
cat <<EOF cat <<EOF
@@ -211,6 +250,8 @@ check_toolchain
echo -n "libbpf support: " echo -n "libbpf support: "
check_libbpf check_libbpf
echo -n "libxdp support: "
check_libxdp
check_bpf_use_errno 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 LIBBPF_CFLAGS:=$(if $(CFLAGS),$(CFLAGS),-g -O2 -Werror -Wall) -fPIC
LIB_DIR = . LIB_DIR = .
LIB_INSTALL := lib-install
include defines.mk include defines.mk
SUBDIRS= SUBDIRS=
all: $(OBJECT_LIBBPF) all: $(OBJECT_LIBBPF) $(OBJECT_LIBXDP)
@set -e; \ @set -e; \
for i in $(SUBDIRS); \ for i in $(SUBDIRS); \
do echo; echo " $$i"; $(MAKE) -C $$i; done do echo; echo " $$i"; $(MAKE) -C $$i; done
.PHONY: clean .PHONY: clean
clean: libbpf_clean clean: libbpf_clean libxdp_clean
@for i in $(SUBDIRS); \ @for i in $(SUBDIRS); \
do $(MAKE) -C $$i clean; done do $(MAKE) -C $$i clean; done
@@ -21,7 +22,9 @@ install:
$(MAKE) -C libxdp install $(MAKE) -C libxdp install
$(MAKE) -C testing install $(MAKE) -C testing install
libbpf: $(OBJECT_LIBBPF) libbpf: $(OBJECT_LIBBPF)
libxdp: libbpf $(OBJECT_LIBXDP)
# Handle libbpf as git submodule # Handle libbpf as git submodule
ifeq ($(SYSTEM_LIBBPF),n) ifeq ($(SYSTEM_LIBBPF),n)
@@ -31,21 +34,45 @@ endif
# Detect submodule libbpf source file changes # Detect submodule libbpf source file changes
LIBBPF_SOURCES := $(wildcard libbpf/src/*.[ch]) LIBBPF_SOURCES := $(wildcard libbpf/src/*.[ch])
LIBBPF_INSTALL := libbpf-install
INSTDIR=../../$(LIBBPF_INSTALL)
.PHONY: libbpf_clean
libbpf/src/libbpf.a: $(LIBBPF_SOURCES) libbpf/src/libbpf.a: $(LIBBPF_SOURCES)
@echo ; echo " libbpf" @echo ; echo " libbpf"
$(QUIET_CC)$(MAKE) -C libbpf/src CFLAGS="$(LIBBPF_CFLAGS)" $P $(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: libbpf_clean:
$(Q)$(MAKE) -C libbpf/src clean $P $(Q)$(MAKE) -C libbpf/src clean $P
$(Q)$(RM) -r $(LIBBPF_INSTALL) $(Q)$(RM) -r $(LIB_INSTALL)
else else
libbpf_clean: libbpf_clean:
@echo -n @echo -n
endif 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) $(OBJECT_LIBBPF): $(LIBBPF_SOURCES)
$(Q)$(MAKE) -C $(LIB_DIR) libbpf $(Q)$(MAKE) -C $(LIB_DIR) libbpf
$(OBJECT_LIBXDP): $(LIBXDP_SOURCES)
$(Q)$(MAKE) -C $(LIB_DIR) libxdp
$(CONFIGMK): $(CONFIGMK):
$(Q)$(MAKE) -C $(LIB_DIR)/.. config.mk $(Q)$(MAKE) -C $(LIB_DIR)/.. config.mk

1
lib/xdp-tools Submodule

Submodule lib/xdp-tools added at 27cbd728e2