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
  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 \

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