aboutsummaryrefslogtreecommitdiffstats
path: root/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch
diff options
context:
space:
mode:
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.patch217
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 =
+