Imported Upstream version 16.07-rc1
[deb_dpdk.git] / debian / patches / ubuntu-backport-40-linking-fixes-stage-3-4.patch
1 Description: backport of dpdk 16.07 fix for library underlinking - stage 3/4
2
3 This is a merge of related upstream fixes:
4 - cb8e39da mk: sort drivers in static application link list
5 - ea469893 mk: fix driver dependencies order for static application
6 - 4e04fd45 mk: remove library grouping during application linking
7 - 6248e442 mk: prevent overlinking in applications
8 - ce18c527 mk: sort libraries in level order when linking
9 - 95dc3c3c mk: reduce scope of whole-archive static linking
10
11 Forwarded: yes (in DPDK 16.07)
12 Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
13 Last-Update: 2016-06-14
14
15 Index: dpdk/mk/rte.app.mk
16 ===================================================================
17 --- dpdk.orig/mk/rte.app.mk
18 +++ dpdk/mk/rte.app.mk
19 @@ -50,6 +50,9 @@ ifeq ($(NO_LDSCRIPT),)
20  LDSCRIPT = $(RTE_LDSCRIPT)
21  endif
22  
23 +# Link only the libraries used in the application
24 +LDFLAGS += --as-needed
25 +
26  # default path for libs
27  _LDLIBS-y += -L$(RTE_SDK_BIN)/lib
28  
29 @@ -57,11 +60,6 @@ _LDLIBS-y += -L$(RTE_SDK_BIN)/lib
30  # Order is important: from higher level to lower level
31  #
32  
33 -_LDLIBS-y += --whole-archive
34 -
35 -_LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)    += -lrte_distributor
36 -_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER)        += -lrte_reorder
37 -
38  ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y)
39  _LDLIBS-$(CONFIG_RTE_LIBRTE_KNI)            += -lrte_kni
40  _LDLIBS-$(CONFIG_RTE_LIBRTE_IVSHMEM)        += -lrte_ivshmem
41 @@ -70,51 +68,25 @@ endif
42  _LDLIBS-$(CONFIG_RTE_LIBRTE_PIPELINE)       += -lrte_pipeline
43  _LDLIBS-$(CONFIG_RTE_LIBRTE_TABLE)          += -lrte_table
44  _LDLIBS-$(CONFIG_RTE_LIBRTE_PORT)           += -lrte_port
45 -_LDLIBS-$(CONFIG_RTE_LIBRTE_TIMER)          += -lrte_timer
46 -_LDLIBS-$(CONFIG_RTE_LIBRTE_HASH)           += -lrte_hash
47 -_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS)       += -lrte_jobstats
48 -_LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
49 -_LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
50 -_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
51 +
52 +_LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)    += -lrte_distributor
53 +_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER)        += -lrte_reorder
54 +_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG)        += -lrte_ip_frag
55  _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
56  _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
57 -_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
58 +_LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
59 +_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
60 +_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS)       += -lrte_jobstats
61 +_LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
62  
63 -# The static libraries do not know their dependencies.
64 -# So linking with static library requires explicit dependencies.
65 -ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
66 -_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
67 -_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
68 -_LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lm
69 -ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
70 -_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
71 -endif
72 -ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
73 -_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
74 -endif
75 -_LDLIBS-$(CONFIG_RTE_PORT_PCAP)             += -lpcap
76 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lpcap
77 -_LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD)      += -lz
78 -_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD)       += -libverbs
79 -_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD)       += -libverbs
80 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lsze2
81 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lxenstore
82 -_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
83 -_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD)        += -lm
84 -# QAT / AESNI GCM PMDs are dependent on libcrypto (from openssl)
85 -# for calculating HMAC precomputes
86 -ifeq ($(CONFIG_RTE_LIBRTE_PMD_QAT),y)
87 -_LDLIBS-y                                   += -lcrypto
88 -else ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM),y)
89 -_LDLIBS-y                                   += -lcrypto
90 -endif
91 -endif # !CONFIG_RTE_BUILD_SHARED_LIBS
92 +_LDLIBS-y += --whole-archive
93  
94 -_LDLIBS-y += --start-group
95 +_LDLIBS-$(CONFIG_RTE_LIBRTE_TIMER)          += -lrte_timer
96 +_LDLIBS-$(CONFIG_RTE_LIBRTE_HASH)           += -lrte_hash
97 +_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
98  
99  _LDLIBS-$(CONFIG_RTE_LIBRTE_KVARGS)         += -lrte_kvargs
100  _LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF)           += -lrte_mbuf
101 -_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG)        += -lrte_ip_frag
102  _LDLIBS-$(CONFIG_RTE_LIBRTE_ETHER)          += -lethdev
103  _LDLIBS-$(CONFIG_RTE_LIBRTE_CRYPTODEV)      += -lrte_cryptodev
104  _LDLIBS-$(CONFIG_RTE_LIBRTE_MEMPOOL)        += -lrte_mempool
105 @@ -123,61 +95,65 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_EAL)
106  _LDLIBS-$(CONFIG_RTE_LIBRTE_CMDLINE)        += -lrte_cmdline
107  _LDLIBS-$(CONFIG_RTE_LIBRTE_CFGFILE)        += -lrte_cfgfile
108  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BOND)       += -lrte_pmd_bond
109 -
110 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lrte_pmd_xenvirt
111 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lrte_pmd_xenvirt -lxenstore
112  
113  ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
114  # plugins (link only if static libraries)
115  
116 -_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD)    += -lrte_pmd_vmxnet3_uio
117 -_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD)     += -lrte_pmd_virtio
118 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET)  += -lrte_pmd_af_packet
119  _LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD)      += -lrte_pmd_bnx2x
120  _LDLIBS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD)      += -lrte_pmd_cxgbe
121 +_LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD)      += -lrte_pmd_e1000
122 +_LDLIBS-$(CONFIG_RTE_LIBRTE_ENA_PMD)        += -lrte_pmd_ena
123  _LDLIBS-$(CONFIG_RTE_LIBRTE_ENIC_PMD)       += -lrte_pmd_enic
124 -_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD)       += -lrte_pmd_i40e
125  _LDLIBS-$(CONFIG_RTE_LIBRTE_FM10K_PMD)      += -lrte_pmd_fm10k
126 +_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD)       += -lrte_pmd_i40e
127  _LDLIBS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD)      += -lrte_pmd_ixgbe
128 -_LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD)      += -lrte_pmd_e1000
129 -_LDLIBS-$(CONFIG_RTE_LIBRTE_ENA_PMD)        += -lrte_pmd_ena
130 -_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD)       += -lrte_pmd_mlx4
131 -_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD)       += -lrte_pmd_mlx5
132 -_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD)        += -lrte_pmd_nfp
133 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lrte_pmd_szedata2
134 -_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lrte_pmd_mpipe
135 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING)       += -lrte_pmd_ring
136 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lrte_pmd_pcap
137 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET)  += -lrte_pmd_af_packet
138 +_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD)       += -lrte_pmd_mlx4 -libverbs
139 +_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD)       += -lrte_pmd_mlx5 -libverbs
140 +_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lrte_pmd_mpipe -lgxio
141 +_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD)        += -lrte_pmd_nfp -lm
142  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL)       += -lrte_pmd_null
143 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lrte_pmd_pcap -lpcap
144 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING)       += -lrte_pmd_ring
145 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lrte_pmd_szedata2 -lsze2
146 +_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD)     += -lrte_pmd_virtio
147 +ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y)
148 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST)      += -lrte_pmd_vhost
149 +endif # $(CONFIG_RTE_LIBRTE_VHOST)
150 +_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD)    += -lrte_pmd_vmxnet3_uio
151  
152  ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
153 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lrte_pmd_qat
154  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB)   += -lrte_pmd_aesni_mb
155 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM)   += -lrte_pmd_aesni_gcm
156 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB)   += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
157 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM)  += -lrte_pmd_aesni_gcm
158 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM)  += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
159  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += -lrte_pmd_null_crypto
160 -
161 -# AESNI MULTI BUFFER / GCM PMDs are dependent on the IPSec_MB library
162 -ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_MB),y)
163 -_LDLIBS-y += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
164 -else ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM),y)
165 -_LDLIBS-y += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
166 -endif
167 -
168 -# SNOW3G PMD is dependent on the LIBSSO library
169 +_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lrte_pmd_qat
170  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G)     += -lrte_pmd_snow3g
171  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G)     += -L$(LIBSSO_PATH)/build -lsso
172  endif # CONFIG_RTE_LIBRTE_CRYPTODEV
173  
174 -ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y)
175 -
176 -_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST)      += -lrte_pmd_vhost
177 +endif # !CONFIG_RTE_BUILD_SHARED_LIBS
178  
179 -endif # $(CONFIG_RTE_LIBRTE_VHOST)
180 +_LDLIBS-y += --no-whole-archive
181  
182 -endif # ! $(CONFIG_RTE_BUILD_SHARED_LIB)
183 +ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
184 +# The static libraries do not know their dependencies.
185 +# So linking with static library requires explicit dependencies.
186 +_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
187 +_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
188 +_LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lm
189 +ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
190 +_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
191 +endif
192 +ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
193 +_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
194 +endif
195 +_LDLIBS-$(CONFIG_RTE_PORT_PCAP)             += -lpcap
196 +endif # !CONFIG_RTE_BUILD_SHARED_LIBS
197  
198  _LDLIBS-y += $(EXECENV_LDLIBS)
199 -_LDLIBS-y += --end-group
200 -_LDLIBS-y += --no-whole-archive
201  
202  LDLIBS += $(_LDLIBS-y) $(CPU_LDLIBS) $(EXTRA_LDLIBS)
203  
204 Index: dpdk/mk/exec-env/linuxapp/rte.vars.mk
205 ===================================================================
206 --- dpdk.orig/mk/exec-env/linuxapp/rte.vars.mk
207 +++ dpdk/mk/exec-env/linuxapp/rte.vars.mk
208 @@ -45,9 +45,6 @@ else
209  EXECENV_CFLAGS  = -pthread
210  endif
211  
212 -# Workaround lack of DT_NEEDED entry
213 -EXECENV_LDFLAGS = --no-as-needed
214 -
215  EXECENV_LDLIBS  =
216  EXECENV_ASFLAGS =
217