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