From ff3e4272ff46f1187f53c3d20275b9e9df14e2e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= Date: Fri, 15 Oct 2021 13:27:49 +0200 Subject: [PATCH] Integrate libxdp as a submodule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .gitmodules | 3 +++ configure | 45 +++++++++++++++++++++++++++++++++++++++++++-- lib/.gitignore | 1 + lib/Makefile | 41 ++++++++++++++++++++++++++++++++++------- lib/common.mk | 3 +++ lib/xdp-tools | 1 + 6 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 lib/.gitignore create mode 160000 lib/xdp-tools diff --git a/.gitmodules b/.gitmodules index a06b6a0..3ce07b7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/configure b/configure index 48b9504..966b9ff 100755 --- a/configure +++ b/configure @@ -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 </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 diff --git a/lib/common.mk b/lib/common.mk index 811bab0..1a6a264 100644 --- a/lib/common.mk +++ b/lib/common.mk @@ -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 diff --git a/lib/xdp-tools b/lib/xdp-tools new file mode 160000 index 0000000..27cbd72 --- /dev/null +++ b/lib/xdp-tools @@ -0,0 +1 @@ +Subproject commit 27cbd728e210da926d9e8584954cf6e0a1d4d2a0