Browse Source

iproute2: simplify linking libelf for eBFP/XDP object file support

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 <[email protected]>
Tony Ambardar 7 years ago
parent
commit
26681fa6a6

+ 10 - 1
package/network/utils/iproute2/Makefile

@@ -49,7 +49,7 @@ $(call Package/iproute2/Default)
  VARIANT:=full
  VARIANT:=full
  PROVIDES:=ip
  PROVIDES:=ip
  ALTERNATIVES:=300:/sbin/ip:/usr/libexec/ip-full
  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
 endef
 
 
 define Package/tc
 define Package/tc
@@ -100,6 +100,14 @@ ifeq ($(BUILD_VARIANT),tiny)
   IP_CONFIG_TINY:=y
   IP_CONFIG_TINY:=y
 endif
 endif
 
 
+ifeq ($(BUILD_VARIANT),full)
+  HAVE_ELF:=y
+endif
+
+ifeq ($(BUILD_VARIANT),tc)
+  HAVE_ELF:=y
+endif
+
 ifdef CONFIG_PACKAGE_devlink
 ifdef CONFIG_PACKAGE_devlink
   HAVE_MNL:=y
   HAVE_MNL:=y
 endif
 endif
@@ -121,6 +129,7 @@ MAKE_FLAGS += \
 	KERNEL_INCLUDE="$(LINUX_DIR)/user_headers/include" \
 	KERNEL_INCLUDE="$(LINUX_DIR)/user_headers/include" \
 	SHARED_LIBS="" \
 	SHARED_LIBS="" \
 	IP_CONFIG_TINY=$(IP_CONFIG_TINY) \
 	IP_CONFIG_TINY=$(IP_CONFIG_TINY) \
+	HAVE_ELF=$(HAVE_ELF) \
 	HAVE_MNL=$(HAVE_MNL) \
 	HAVE_MNL=$(HAVE_MNL) \
 	IPT_LIB_DIR=/usr/lib/iptables \
 	IPT_LIB_DIR=/usr/lib/iptables \
 	XT_LIB_DIR=/usr/lib/iptables \
 	XT_LIB_DIR=/usr/lib/iptables \

+ 11 - 0
package/network/utils/iproute2/patches/145-keep_libelf_optional.patch

@@ -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"
+ 

+ 0 - 60
package/network/utils/iproute2/patches/190-link-libelf-to-tc-only.patch

@@ -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 $@ $^