iproute2: simplify linking libelf for eBFP/XDP object file support
authorTony Ambardar <itugrok@yahoo.com>
Sat, 24 Nov 2018 00:33:45 +0000 (16:33 -0800)
committerKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Mon, 11 Feb 2019 20:18:48 +0000 (20:18 +0000)
Simplify build and runtime dependencies on libelf, which allows tc and ip
to load BPF and XDP object files respectively.

Preserve optionality of libelf by having configuration script follow the
HAVE_ELF environment variable, used similarly to the HAVE_MNL variable.

Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
package/network/utils/iproute2/Makefile
package/network/utils/iproute2/patches/145-keep_libelf_optional.patch [new file with mode: 0644]
package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch [deleted file]

index 56a16d095c7c679d504fe02afba7b3b0c2f30360..a9bcfd40a033ce6757b4f6e37ec61f06652220bb 100644 (file)
@@ -49,7 +49,7 @@ $(call Package/iproute2/Default)
  VARIANT:=full
  PROVIDES:=ip
  ALTERNATIVES:=300:/sbin/ip:/usr/libexec/ip-full
- DEPENDS:=+libnl-tiny +(PACKAGE_devlink||PACKAGE_rdma):libmnl
+ DEPENDS:=+libnl-tiny +libelf +(PACKAGE_devlink||PACKAGE_rdma):libmnl
 endef
 
 define Package/tc
@@ -100,6 +100,14 @@ ifeq ($(BUILD_VARIANT),tiny)
   IP_CONFIG_TINY:=y
 endif
 
+ifeq ($(BUILD_VARIANT),full)
+  HAVE_ELF:=y
+endif
+
+ifeq ($(BUILD_VARIANT),tc)
+  HAVE_ELF:=y
+endif
+
 ifdef CONFIG_PACKAGE_devlink
   HAVE_MNL:=y
 endif
@@ -121,6 +129,7 @@ MAKE_FLAGS += \
        KERNEL_INCLUDE="$(LINUX_DIR)/user_headers/include" \
        SHARED_LIBS="" \
        IP_CONFIG_TINY=$(IP_CONFIG_TINY) \
+       HAVE_ELF=$(HAVE_ELF) \
        HAVE_MNL=$(HAVE_MNL) \
        IPT_LIB_DIR=/usr/lib/iptables \
        XT_LIB_DIR=/usr/lib/iptables \
diff --git a/package/network/utils/iproute2/patches/145-keep_libelf_optional.patch b/package/network/utils/iproute2/patches/145-keep_libelf_optional.patch
new file mode 100644 (file)
index 0000000..2e3ad18
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/configure
++++ b/configure
+@@ -228,7 +228,7 @@ EOF
+ check_elf()
+ {
+-    if ${PKG_CONFIG} libelf --exists; then
++    if [ "${HAVE_ELF}" = "y" ] && ${PKG_CONFIG} libelf --exists; then
+       echo "HAVE_ELF:=y" >>$CONFIG
+       echo "yes"
diff --git a/package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch b/package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch
deleted file mode 100644 (file)
index 31aacff..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -231,8 +231,9 @@ check_elf()
-       echo "HAVE_ELF:=y" >>$CONFIG
-       echo "yes"
--      echo 'CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG
--      echo 'LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG
-+      echo 'CFLAGS += -DHAVE_ELF' >> $CONFIG
-+      echo 'ELF_CFLAGS += ' `${PKG_CONFIG} libelf --cflags` >> $CONFIG
-+      echo 'ELF_LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG
-     else
-       echo "no"
-     fi
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -11,9 +11,17 @@ UTILOBJ = utils.o rt_names.o ll_map.o ll
-       inet_proto.o namespace.o json_writer.o json_print.o \
-       names.o color.o bpf.o exec.o fs.o
-+ELFOBJ=$(patsubst %.o,%.elf.o,$(UTILOBJ))
-+
- NLOBJ=libgenl.o libnetlink.o
--all: libnetlink.a libutil.a
-+all: libnetlink.a libutil.a libutil-elf.a
-+
-+%.o: %.c
-+      $(QUIET_CC)$(CC) $(CFLAGS) -UHAVE_ELF $(EXTRA_CFLAGS) -c -o $@ $<
-+
-+%.elf.o: %.c
-+      $(QUIET_CC)$(CC) $(CFLAGS) $(ELF_CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<
- libnetlink.a: $(NLOBJ)
-       $(QUIET_AR)$(AR) rcs $@ $^
-@@ -21,7 +29,10 @@ libnetlink.a: $(NLOBJ)
- libutil.a: $(UTILOBJ) $(ADDLIB)
-       $(QUIET_AR)$(AR) rcs $@ $^
-+libutil-elf.a: $(ELFOBJ) $(ADDLIB)
-+      $(QUIET_AR)$(AR) rcs $@ $^
-+
- install:
- clean:
--      rm -f $(NLOBJ) $(UTILOBJ) $(ADDLIB) libnetlink.a libutil.a
-+      rm -f $(NLOBJ) $(UTILOBJ) $(ELFOBJ) $(ADDLIB) libnetlink.a libutil.a libutil-elf.a
---- a/tc/Makefile
-+++ b/tc/Makefile
-@@ -133,8 +133,8 @@ MODDESTDIR := $(DESTDIR)$(LIBDIR)/tc
- all: tc $(TCSO)
--tc: $(TCOBJ) $(LIBNETLINK) libtc.a
--      $(QUIET_LINK)$(CC) $^ $(LDFLAGS) $(LDLIBS) -o $@
-+tc: $(TCOBJ) $(subst libutil.a,libutil-elf.a,$(LIBNETLINK)) libtc.a
-+      $(QUIET_LINK)$(CC) $^ $(LDFLAGS) $(LDLIBS) $(ELF_LDLIBS) -o $@
- libtc.a: $(TCLIB)
-       $(QUIET_AR)$(AR) rcs $@ $^