diff options
Diffstat (limited to 'debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch')
-rw-r--r-- | debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch b/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch new file mode 100644 index 00000000..161832e6 --- /dev/null +++ b/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch @@ -0,0 +1,217 @@ +Description: backport of dpdk 16.07 fix for library underlinking - stage 3/4 + +This is a merge of related upstream fixes: +- cb8e39da mk: sort drivers in static application link list +- ea469893 mk: fix driver dependencies order for static application +- 4e04fd45 mk: remove library grouping during application linking +- 6248e442 mk: prevent overlinking in applications +- ce18c527 mk: sort libraries in level order when linking +- 95dc3c3c mk: reduce scope of whole-archive static linking + +Forwarded: yes (in DPDK 16.07) +Author: Christian Ehrhardt <christian.ehrhardt@canonical.com> +Last-Update: 2016-06-14 + +Index: dpdk/mk/rte.app.mk +=================================================================== +--- dpdk.orig/mk/rte.app.mk ++++ dpdk/mk/rte.app.mk +@@ -50,6 +50,9 @@ ifeq ($(NO_LDSCRIPT),) + LDSCRIPT = $(RTE_LDSCRIPT) + endif + ++# Link only the libraries used in the application ++LDFLAGS += --as-needed ++ + # default path for libs + _LDLIBS-y += -L$(RTE_SDK_BIN)/lib + +@@ -57,11 +60,6 @@ _LDLIBS-y += -L$(RTE_SDK_BIN)/lib + # Order is important: from higher level to lower level + # + +-_LDLIBS-y += --whole-archive +- +-_LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += -lrte_distributor +-_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER) += -lrte_reorder +- + ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y) + _LDLIBS-$(CONFIG_RTE_LIBRTE_KNI) += -lrte_kni + _LDLIBS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += -lrte_ivshmem +@@ -70,51 +68,25 @@ endif + _LDLIBS-$(CONFIG_RTE_LIBRTE_PIPELINE) += -lrte_pipeline + _LDLIBS-$(CONFIG_RTE_LIBRTE_TABLE) += -lrte_table + _LDLIBS-$(CONFIG_RTE_LIBRTE_PORT) += -lrte_port +-_LDLIBS-$(CONFIG_RTE_LIBRTE_TIMER) += -lrte_timer +-_LDLIBS-$(CONFIG_RTE_LIBRTE_HASH) += -lrte_hash +-_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS) += -lrte_jobstats +-_LDLIBS-$(CONFIG_RTE_LIBRTE_LPM) += -lrte_lpm +-_LDLIBS-$(CONFIG_RTE_LIBRTE_POWER) += -lrte_power +-_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL) += -lrte_acl ++ ++_LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += -lrte_distributor ++_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER) += -lrte_reorder ++_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += -lrte_ip_frag + _LDLIBS-$(CONFIG_RTE_LIBRTE_METER) += -lrte_meter + _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED) += -lrte_sched +-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lrte_vhost ++_LDLIBS-$(CONFIG_RTE_LIBRTE_LPM) += -lrte_lpm ++_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL) += -lrte_acl ++_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS) += -lrte_jobstats ++_LDLIBS-$(CONFIG_RTE_LIBRTE_POWER) += -lrte_power + +-# The static libraries do not know their dependencies. +-# So linking with static library requires explicit dependencies. +-ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n) +-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED) += -lm +-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED) += -lrt +-_LDLIBS-$(CONFIG_RTE_LIBRTE_METER) += -lm +-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y) +-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lnuma +-endif +-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n) +-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lfuse +-endif +-_LDLIBS-$(CONFIG_RTE_PORT_PCAP) += -lpcap +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += -lpcap +-_LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD) += -lz +-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += -libverbs +-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += -libverbs +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += -lsze2 +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += -lxenstore +-_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += -lgxio +-_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += -lm +-# QAT / AESNI GCM PMDs are dependent on libcrypto (from openssl) +-# for calculating HMAC precomputes +-ifeq ($(CONFIG_RTE_LIBRTE_PMD_QAT),y) +-_LDLIBS-y += -lcrypto +-else ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM),y) +-_LDLIBS-y += -lcrypto +-endif +-endif # !CONFIG_RTE_BUILD_SHARED_LIBS ++_LDLIBS-y += --whole-archive + +-_LDLIBS-y += --start-group ++_LDLIBS-$(CONFIG_RTE_LIBRTE_TIMER) += -lrte_timer ++_LDLIBS-$(CONFIG_RTE_LIBRTE_HASH) += -lrte_hash ++_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lrte_vhost + + _LDLIBS-$(CONFIG_RTE_LIBRTE_KVARGS) += -lrte_kvargs + _LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF) += -lrte_mbuf +-_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += -lrte_ip_frag + _LDLIBS-$(CONFIG_RTE_LIBRTE_ETHER) += -lethdev + _LDLIBS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += -lrte_cryptodev + _LDLIBS-$(CONFIG_RTE_LIBRTE_MEMPOOL) += -lrte_mempool +@@ -123,61 +95,65 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_EAL) + _LDLIBS-$(CONFIG_RTE_LIBRTE_CMDLINE) += -lrte_cmdline + _LDLIBS-$(CONFIG_RTE_LIBRTE_CFGFILE) += -lrte_cfgfile + _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += -lrte_pmd_bond +- +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += -lrte_pmd_xenvirt ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += -lrte_pmd_xenvirt -lxenstore + + ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n) + # plugins (link only if static libraries) + +-_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += -lrte_pmd_vmxnet3_uio +-_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += -lrte_pmd_virtio ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += -lrte_pmd_af_packet + _LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD) += -lrte_pmd_bnx2x + _LDLIBS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += -lrte_pmd_cxgbe ++_LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD) += -lrte_pmd_e1000 ++_LDLIBS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += -lrte_pmd_ena + _LDLIBS-$(CONFIG_RTE_LIBRTE_ENIC_PMD) += -lrte_pmd_enic +-_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += -lrte_pmd_i40e + _LDLIBS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += -lrte_pmd_fm10k ++_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += -lrte_pmd_i40e + _LDLIBS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD) += -lrte_pmd_ixgbe +-_LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD) += -lrte_pmd_e1000 +-_LDLIBS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += -lrte_pmd_ena +-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += -lrte_pmd_mlx4 +-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += -lrte_pmd_mlx5 +-_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += -lrte_pmd_nfp +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += -lrte_pmd_szedata2 +-_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += -lrte_pmd_mpipe +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING) += -lrte_pmd_ring +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += -lrte_pmd_pcap +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += -lrte_pmd_af_packet ++_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += -lrte_pmd_mlx4 -libverbs ++_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += -lrte_pmd_mlx5 -libverbs ++_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += -lrte_pmd_mpipe -lgxio ++_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += -lrte_pmd_nfp -lm + _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += -lrte_pmd_null ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += -lrte_pmd_pcap -lpcap ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING) += -lrte_pmd_ring ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += -lrte_pmd_szedata2 -lsze2 ++_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += -lrte_pmd_virtio ++ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y) ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += -lrte_pmd_vhost ++endif # $(CONFIG_RTE_LIBRTE_VHOST) ++_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += -lrte_pmd_vmxnet3_uio + + ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y) +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += -lrte_pmd_qat + _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -lrte_pmd_aesni_mb +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -lrte_pmd_aesni_gcm ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -lrte_pmd_aesni_gcm ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB + _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += -lrte_pmd_null_crypto +- +-# AESNI MULTI BUFFER / GCM PMDs are dependent on the IPSec_MB library +-ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_MB),y) +-_LDLIBS-y += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB +-else ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM),y) +-_LDLIBS-y += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB +-endif +- +-# SNOW3G PMD is dependent on the LIBSSO library ++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += -lrte_pmd_qat + _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += -lrte_pmd_snow3g + _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G) += -L$(LIBSSO_PATH)/build -lsso + endif # CONFIG_RTE_LIBRTE_CRYPTODEV + +-ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y) +- +-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += -lrte_pmd_vhost ++endif # !CONFIG_RTE_BUILD_SHARED_LIBS + +-endif # $(CONFIG_RTE_LIBRTE_VHOST) ++_LDLIBS-y += --no-whole-archive + +-endif # ! $(CONFIG_RTE_BUILD_SHARED_LIB) ++ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n) ++# The static libraries do not know their dependencies. ++# So linking with static library requires explicit dependencies. ++_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED) += -lm ++_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED) += -lrt ++_LDLIBS-$(CONFIG_RTE_LIBRTE_METER) += -lm ++ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y) ++_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lnuma ++endif ++ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n) ++_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lfuse ++endif ++_LDLIBS-$(CONFIG_RTE_PORT_PCAP) += -lpcap ++endif # !CONFIG_RTE_BUILD_SHARED_LIBS + + _LDLIBS-y += $(EXECENV_LDLIBS) +-_LDLIBS-y += --end-group +-_LDLIBS-y += --no-whole-archive + + LDLIBS += $(_LDLIBS-y) $(CPU_LDLIBS) $(EXTRA_LDLIBS) + +Index: dpdk/mk/exec-env/linuxapp/rte.vars.mk +=================================================================== +--- dpdk.orig/mk/exec-env/linuxapp/rte.vars.mk ++++ dpdk/mk/exec-env/linuxapp/rte.vars.mk +@@ -45,9 +45,6 @@ else + EXECENV_CFLAGS = -pthread + endif + +-# Workaround lack of DT_NEEDED entry +-EXECENV_LDFLAGS = --no-as-needed +- + EXECENV_LDLIBS = + EXECENV_ASFLAGS = + |