1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2010-2017 Intel Corporation.
3 # Copyright(c) 2014-2015 6WIND S.A.
5 include $(RTE_SDK
)/mk
/internal
/rte.compile-pre.mk
6 include $(RTE_SDK
)/mk
/internal
/rte.install-pre.mk
7 include $(RTE_SDK
)/mk
/internal
/rte.clean-pre.mk
8 include $(RTE_SDK
)/mk
/internal
/rte.build-pre.mk
10 # VPATH contains at least SRCDIR
14 _INSTALL
= $(INSTALL-FILES-y
) $(SYMLINK-FILES-y
)
15 _INSTALL
+= $(RTE_OUTPUT
)/app
/$(APP
) $(RTE_OUTPUT
)/app
/$(APP
).map
16 POSTINSTALL
+= target-appinstall
18 POSTCLEAN
+= target-appclean
20 ifeq ($(NO_LDSCRIPT
),)
21 LDSCRIPT
= $(RTE_LDSCRIPT
)
24 # Link only the libraries used in the application
25 LDFLAGS
+= --as-needed
27 # default path for libs
28 _LDLIBS-y
+= -L
$(RTE_SDK_BIN
)/lib
31 # Order is important: from higher level to lower level
33 _LDLIBS-
$(CONFIG_RTE_LIBRTE_FLOW_CLASSIFY
) += -lrte_flow_classify
34 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PIPELINE
) += --whole-archive
35 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PIPELINE
) += -lrte_pipeline
36 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PIPELINE
) += --no-whole-archive
37 _LDLIBS-
$(CONFIG_RTE_LIBRTE_TABLE
) += --whole-archive
38 _LDLIBS-
$(CONFIG_RTE_LIBRTE_TABLE
) += -lrte_table
39 _LDLIBS-
$(CONFIG_RTE_LIBRTE_TABLE
) += --no-whole-archive
40 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PORT
) += --whole-archive
41 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PORT
) += -lrte_port
42 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PORT
) += --no-whole-archive
44 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PDUMP
) += -lrte_pdump
45 _LDLIBS-
$(CONFIG_RTE_LIBRTE_DISTRIBUTOR
) += -lrte_distributor
46 _LDLIBS-
$(CONFIG_RTE_LIBRTE_IP_FRAG
) += -lrte_ip_frag
47 _LDLIBS-
$(CONFIG_RTE_LIBRTE_METER
) += -lrte_meter
48 _LDLIBS-
$(CONFIG_RTE_LIBRTE_LPM
) += -lrte_lpm
49 # librte_acl needs --whole-archive because of weak functions
50 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ACL
) += --whole-archive
51 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ACL
) += -lrte_acl
52 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ACL
) += --no-whole-archive
53 _LDLIBS-
$(CONFIG_RTE_LIBRTE_JOBSTATS
) += -lrte_jobstats
54 _LDLIBS-
$(CONFIG_RTE_LIBRTE_METRICS
) += -lrte_metrics
55 _LDLIBS-
$(CONFIG_RTE_LIBRTE_BITRATE
) += -lrte_bitratestats
56 _LDLIBS-
$(CONFIG_RTE_LIBRTE_LATENCY_STATS
) += -lrte_latencystats
57 _LDLIBS-
$(CONFIG_RTE_LIBRTE_POWER
) += -lrte_power
59 _LDLIBS-
$(CONFIG_RTE_LIBRTE_EFD
) += -lrte_efd
60 _LDLIBS-
$(CONFIG_RTE_LIBRTE_BPF
) += -lrte_bpf
61 ifeq ($(CONFIG_RTE_LIBRTE_BPF_ELF
),y
)
62 _LDLIBS-
$(CONFIG_RTE_LIBRTE_BPF
) += -lelf
65 _LDLIBS-y
+= --whole-archive
67 _LDLIBS-
$(CONFIG_RTE_LIBRTE_CFGFILE
) += -lrte_cfgfile
68 _LDLIBS-
$(CONFIG_RTE_LIBRTE_GRO
) += -lrte_gro
69 _LDLIBS-
$(CONFIG_RTE_LIBRTE_GSO
) += -lrte_gso
70 _LDLIBS-
$(CONFIG_RTE_LIBRTE_HASH
) += -lrte_hash
71 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MEMBER
) += -lrte_member
72 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VHOST
) += -lrte_vhost
73 _LDLIBS-
$(CONFIG_RTE_LIBRTE_KVARGS
) += -lrte_kvargs
74 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MBUF
) += -lrte_mbuf
75 _LDLIBS-
$(CONFIG_RTE_LIBRTE_NET
) += -lrte_net
76 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ETHER
) += -lrte_ethdev
77 _LDLIBS-
$(CONFIG_RTE_LIBRTE_BBDEV
) += -lrte_bbdev
78 _LDLIBS-
$(CONFIG_RTE_LIBRTE_CRYPTODEV
) += -lrte_cryptodev
79 _LDLIBS-
$(CONFIG_RTE_LIBRTE_SECURITY
) += -lrte_security
80 _LDLIBS-
$(CONFIG_RTE_LIBRTE_COMPRESSDEV
) += -lrte_compressdev
81 _LDLIBS-
$(CONFIG_RTE_LIBRTE_EVENTDEV
) += -lrte_eventdev
82 _LDLIBS-
$(CONFIG_RTE_LIBRTE_RAWDEV
) += -lrte_rawdev
83 _LDLIBS-
$(CONFIG_RTE_LIBRTE_TIMER
) += -lrte_timer
84 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MEMPOOL
) += -lrte_mempool
85 _LDLIBS-
$(CONFIG_RTE_DRIVER_MEMPOOL_RING
) += -lrte_mempool_ring
86 _LDLIBS-
$(CONFIG_RTE_LIBRTE_RING
) += -lrte_ring
87 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PCI
) += -lrte_pci
88 _LDLIBS-
$(CONFIG_RTE_LIBRTE_EAL
) += -lrte_eal
89 _LDLIBS-
$(CONFIG_RTE_LIBRTE_CMDLINE
) += -lrte_cmdline
90 _LDLIBS-
$(CONFIG_RTE_LIBRTE_REORDER
) += -lrte_reorder
91 _LDLIBS-
$(CONFIG_RTE_LIBRTE_SCHED
) += -lrte_sched
93 ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP
),y
)
94 _LDLIBS-
$(CONFIG_RTE_LIBRTE_KNI
) += -lrte_kni
97 ifeq ($(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF
)$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL
),yy
)
98 _LDLIBS-y
+= -lrte_common_octeontx
101 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PCI_BUS
) += -lrte_bus_pci
102 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VDEV_BUS
) += -lrte_bus_vdev
103 _LDLIBS-
$(CONFIG_RTE_LIBRTE_DPAA_BUS
) += -lrte_bus_dpaa
104 ifeq ($(CONFIG_RTE_EAL_VFIO
),y
)
105 _LDLIBS-
$(CONFIG_RTE_LIBRTE_FSLMC_BUS
) += -lrte_bus_fslmc
108 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB
),n
)
109 # plugins (link only if static libraries)
111 _LDLIBS-
$(CONFIG_RTE_DRIVER_MEMPOOL_BUCKET
) += -lrte_mempool_bucket
112 _LDLIBS-
$(CONFIG_RTE_DRIVER_MEMPOOL_STACK
) += -lrte_mempool_stack
113 ifeq ($(CONFIG_RTE_LIBRTE_DPAA_BUS
),y
)
114 _LDLIBS-
$(CONFIG_RTE_LIBRTE_DPAA_MEMPOOL
) += -lrte_mempool_dpaa
116 ifeq ($(CONFIG_RTE_EAL_VFIO
)$(CONFIG_RTE_LIBRTE_FSLMC_BUS
),yy
)
117 _LDLIBS-
$(CONFIG_RTE_LIBRTE_DPAA2_MEMPOOL
) += -lrte_mempool_dpaa2
120 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET
) += -lrte_pmd_af_packet
121 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ARK_PMD
) += -lrte_pmd_ark
122 _LDLIBS-
$(CONFIG_RTE_LIBRTE_AVF_PMD
) += -lrte_pmd_avf
123 _LDLIBS-
$(CONFIG_RTE_LIBRTE_AVP_PMD
) += -lrte_pmd_avp
124 _LDLIBS-
$(CONFIG_RTE_LIBRTE_AXGBE_PMD
) += -lrte_pmd_axgbe
125 _LDLIBS-
$(CONFIG_RTE_LIBRTE_BNX2X_PMD
) += -lrte_pmd_bnx2x
-lz
126 _LDLIBS-
$(CONFIG_RTE_LIBRTE_BNXT_PMD
) += -lrte_pmd_bnxt
127 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BOND
) += -lrte_pmd_bond
128 _LDLIBS-
$(CONFIG_RTE_LIBRTE_CXGBE_PMD
) += -lrte_pmd_cxgbe
129 ifeq ($(CONFIG_RTE_LIBRTE_DPAA_BUS
),y
)
130 _LDLIBS-
$(CONFIG_RTE_LIBRTE_DPAA_PMD
) += -lrte_pmd_dpaa
132 ifeq ($(CONFIG_RTE_EAL_VFIO
)$(CONFIG_RTE_LIBRTE_FSLMC_BUS
),yy
)
133 _LDLIBS-
$(CONFIG_RTE_LIBRTE_DPAA2_PMD
) += -lrte_pmd_dpaa2
135 _LDLIBS-
$(CONFIG_RTE_LIBRTE_E1000_PMD
) += -lrte_pmd_e1000
136 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ENA_PMD
) += -lrte_pmd_ena
137 _LDLIBS-
$(CONFIG_RTE_LIBRTE_ENIC_PMD
) += -lrte_pmd_enic
138 _LDLIBS-
$(CONFIG_RTE_LIBRTE_FM10K_PMD
) += -lrte_pmd_fm10k
139 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_FAILSAFE
) += -lrte_pmd_failsafe
140 _LDLIBS-
$(CONFIG_RTE_LIBRTE_I40E_PMD
) += -lrte_pmd_i40e
141 _LDLIBS-
$(CONFIG_RTE_LIBRTE_IXGBE_PMD
) += -lrte_pmd_ixgbe
142 ifeq ($(CONFIG_RTE_LIBRTE_KNI
),y
)
143 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_KNI
) += -lrte_pmd_kni
145 _LDLIBS-
$(CONFIG_RTE_LIBRTE_LIO_PMD
) += -lrte_pmd_lio
146 ifeq ($(CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS
),y
)
147 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MLX4_PMD
) += -lrte_pmd_mlx4
-ldl
149 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MLX4_PMD
) += -lrte_pmd_mlx4
-libverbs
-lmlx4
151 ifeq ($(CONFIG_RTE_LIBRTE_MLX5_DLOPEN_DEPS
),y
)
152 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MLX5_PMD
) += -lrte_pmd_mlx5
-ldl
-lmnl
154 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MLX5_PMD
) += -lrte_pmd_mlx5
-libverbs
-lmlx5
-lmnl
156 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MVPP2_PMD
) += -lrte_pmd_mvpp2
-L
$(LIBMUSDK_PATH
)/lib
-lmusdk
157 _LDLIBS-
$(CONFIG_RTE_LIBRTE_NFP_PMD
) += -lrte_pmd_nfp
158 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_NULL
) += -lrte_pmd_null
159 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_PCAP
) += -lrte_pmd_pcap
-lpcap
160 _LDLIBS-
$(CONFIG_RTE_LIBRTE_QEDE_PMD
) += -lrte_pmd_qede
161 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_RING
) += -lrte_pmd_ring
162 ifeq ($(CONFIG_RTE_LIBRTE_SCHED
),y
)
163 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SOFTNIC
) += -lrte_pmd_softnic
165 _LDLIBS-
$(CONFIG_RTE_LIBRTE_SFC_EFX_PMD
) += -lrte_pmd_sfc_efx
166 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2
) += -lrte_pmd_szedata2
-lsze2
167 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_TAP
) += -lrte_pmd_tap
168 _LDLIBS-
$(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD
) += -lrte_pmd_thunderx_nicvf
169 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VDEV_NETVSC_PMD
) += -lrte_pmd_vdev_netvsc
170 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VIRTIO_PMD
) += -lrte_pmd_virtio
171 ifeq ($(CONFIG_RTE_LIBRTE_VHOST
),y
)
172 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_VHOST
) += -lrte_pmd_vhost
173 ifeq ($(CONFIG_RTE_EAL_VFIO
),y
)
174 _LDLIBS-
$(CONFIG_RTE_LIBRTE_IFC_PMD
) += -lrte_pmd_ifc
175 endif # $(CONFIG_RTE_EAL_VFIO)
176 endif # $(CONFIG_RTE_LIBRTE_VHOST)
177 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VMXNET3_PMD
) += -lrte_pmd_vmxnet3_uio
179 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VMBUS
) += -lrte_bus_vmbus
180 _LDLIBS-
$(CONFIG_RTE_LIBRTE_NETVSC_PMD
) += -lrte_pmd_netvsc
182 ifeq ($(CONFIG_RTE_LIBRTE_BBDEV
),y
)
183 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL
) += -lrte_pmd_bbdev_null
185 # TURBO SOFTWARE PMD is dependent on the FLEXRAN library
186 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW
) += -lrte_pmd_bbdev_turbo_sw
187 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW
) += -L
$(FLEXRAN_SDK
)/lib_crc
-lcrc
188 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW
) += -L
$(FLEXRAN_SDK
)/lib_turbo
-lturbo
189 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW
) += -L
$(FLEXRAN_SDK
)/lib_rate_matching
-lrate_matching
190 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW
) += -L
$(FLEXRAN_SDK
)/lib_common
-lcommon
191 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW
) += -lirc
-limf
-lstdc
++ -lipps
192 endif # CONFIG_RTE_LIBRTE_BBDEV
194 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV
),y
)
195 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB
) += -lrte_pmd_aesni_mb
196 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB
) += -lIPSec_MB
197 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM
) += -lrte_pmd_aesni_gcm
198 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM
) += -lIPSec_MB
199 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_CCP
) += -lrte_pmd_ccp
-lcrypto
200 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_OPENSSL
) += -lrte_pmd_openssl
-lcrypto
201 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO
) += -lrte_pmd_null_crypto
202 ifeq ($(CONFIG_RTE_LIBRTE_PMD_QAT
),y
)
203 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_QAT_SYM
) += -lrte_pmd_qat
-lcrypto
204 endif # CONFIG_RTE_LIBRTE_PMD_QAT
205 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SNOW3G
) += -lrte_pmd_snow3g
206 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SNOW3G
) += -L
$(LIBSSO_SNOW3G_PATH
)/build
-lsso_snow3g
207 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_KASUMI
) += -lrte_pmd_kasumi
208 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_KASUMI
) += -L
$(LIBSSO_KASUMI_PATH
)/build
-lsso_kasumi
209 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ZUC
) += -lrte_pmd_zuc
210 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ZUC
) += -L
$(LIBSSO_ZUC_PATH
)/build
-lsso_zuc
211 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO
) += -lrte_pmd_armv8
212 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO
) += -L
$(ARMV8_CRYPTO_LIB_PATH
) -larmv8_crypto
213 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_MVSAM_CRYPTO
) += -L
$(LIBMUSDK_PATH
)/lib
-lrte_pmd_mvsam_crypto
-lmusdk
214 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
) += -lrte_pmd_crypto_scheduler
215 ifeq ($(CONFIG_RTE_EAL_VFIO
)$(CONFIG_RTE_LIBRTE_FSLMC_BUS
),yy
)
216 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC
) += -lrte_pmd_dpaa2_sec
217 endif # CONFIG_RTE_LIBRTE_FSLMC_BUS
218 ifeq ($(CONFIG_RTE_LIBRTE_DPAA_BUS
),y
)
219 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_DPAA_SEC
) += -lrte_pmd_dpaa_sec
220 endif # CONFIG_RTE_LIBRTE_DPAA_BUS
221 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_VIRTIO_CRYPTO
) += -lrte_pmd_virtio_crypto
222 endif # CONFIG_RTE_LIBRTE_CRYPTODEV
224 ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV
),y
)
225 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ISAL
) += -lrte_pmd_isal_comp
226 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ISAL
) += -lisal
227 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_ZIPVF
) += -lrte_pmd_octeontx_zip
228 # Link QAT driver if it has not been linked yet
229 ifeq ($(CONFIG_RTE_LIBRTE_PMD_QAT_SYM
),n
)
230 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_QAT
) += -lrte_pmd_qat
231 endif # CONFIG_RTE_LIBRTE_PMD_QAT_SYM
232 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ZLIB
) += -lrte_pmd_zlib
233 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_ZLIB
) += -lz
234 endif # CONFIG_RTE_LIBRTE_COMPRESSDEV
236 ifeq ($(CONFIG_RTE_LIBRTE_EVENTDEV
),y
)
237 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SKELETON_EVENTDEV
) += -lrte_pmd_skeleton_event
238 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SW_EVENTDEV
) += -lrte_pmd_sw_event
239 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_SSOVF
) += -lrte_pmd_octeontx_ssovf
240 ifeq ($(CONFIG_RTE_LIBRTE_DPAA_BUS
),y
)
241 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_DPAA_EVENTDEV
) += -lrte_pmd_dpaa_event
242 endif # CONFIG_RTE_LIBRTE_DPAA_BUS
243 ifeq ($(CONFIG_RTE_EAL_VFIO
)$(CONFIG_RTE_LIBRTE_FSLMC_BUS
),yy
)
244 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_DPAA2_EVENTDEV
) += -lrte_pmd_dpaa2_event
245 endif # CONFIG_RTE_LIBRTE_FSLMC_BUS
247 _LDLIBS-
$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL
) += -lrte_mempool_octeontx
248 _LDLIBS-
$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD
) += -lrte_pmd_octeontx
249 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_OPDL_EVENTDEV
) += -lrte_pmd_opdl_event
250 endif # CONFIG_RTE_LIBRTE_EVENTDEV
252 ifeq ($(CONFIG_RTE_LIBRTE_RAWDEV
),y
)
253 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_SKELETON_RAWDEV
) += -lrte_pmd_skeleton_rawdev
254 ifeq ($(CONFIG_RTE_EAL_VFIO
)$(CONFIG_RTE_LIBRTE_FSLMC_BUS
),yy
)
255 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_DPAA2_CMDIF_RAWDEV
) += -lrte_pmd_dpaa2_cmdif
256 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_DPAA2_QDMA_RAWDEV
) += -lrte_pmd_dpaa2_qdma
257 endif # CONFIG_RTE_LIBRTE_FSLMC_BUS
258 _LDLIBS-
$(CONFIG_RTE_LIBRTE_IFPGA_BUS
) += -lrte_bus_ifpga
259 ifeq ($(CONFIG_RTE_LIBRTE_IFPGA_BUS
),y
)
260 _LDLIBS-
$(CONFIG_RTE_LIBRTE_PMD_IFPGA_RAWDEV
) += -lrte_pmd_ifpga_rawdev
261 endif # CONFIG_RTE_LIBRTE_IFPGA_BUS
262 endif # CONFIG_RTE_LIBRTE_RAWDEV
264 endif # !CONFIG_RTE_BUILD_SHARED_LIBS
266 _LDLIBS-y
+= --no-whole-archive
268 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB
),n
)
269 # The static libraries do not know their dependencies.
270 # So linking with static library requires explicit dependencies.
271 _LDLIBS-
$(CONFIG_RTE_LIBRTE_EAL
) += -lrt
272 ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP
)$(CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES
),yy
)
273 _LDLIBS-
$(CONFIG_RTE_LIBRTE_EAL
) += -lnuma
275 ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP
)$(CONFIG_RTE_USE_LIBBSD
),yy
)
276 _LDLIBS-
$(CONFIG_RTE_LIBRTE_EAL
) += -lbsd
278 _LDLIBS-
$(CONFIG_RTE_LIBRTE_SCHED
) += -lm
279 _LDLIBS-
$(CONFIG_RTE_LIBRTE_SCHED
) += -lrt
280 _LDLIBS-
$(CONFIG_RTE_LIBRTE_MEMBER
) += -lm
281 _LDLIBS-
$(CONFIG_RTE_LIBRTE_METER
) += -lm
282 ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA
),y
)
283 _LDLIBS-
$(CONFIG_RTE_LIBRTE_VHOST
) += -lnuma
285 _LDLIBS-
$(CONFIG_RTE_PORT_PCAP
) += -lpcap
286 endif # !CONFIG_RTE_BUILD_SHARED_LIBS
288 _LDLIBS-y
+= $(EXECENV_LDLIBS
)
290 LDLIBS
+= $(_LDLIBS-y
) $(CPU_LDLIBS
) $(EXTRA_LDLIBS
)
292 # all the words except the first one
293 allbutfirst
= $(wordlist
2,$(words $(1)),$(1))
295 # Eliminate duplicates without sorting, only keep the last occurrence
300 $(filter $(firstword $(1)),$(call allbutfirst
,$(1))),\
301 $(filter -l
%,$(firstword $(1)))),\
304 $(call filter-libs
,$(call allbutfirst
,$(1)))))
306 LDLIBS
:= $(call filter-libs
,$(LDLIBS
))
308 ifeq ($(RTE_DEVEL_BUILD
)$(CONFIG_RTE_BUILD_SHARED_LIB
),yy
)
309 LDFLAGS
+= -rpath
=$(RTE_SDK_BIN
)/lib
312 MAPFLAGS
= -Map
=$@.map
--cref
318 install: build _postinstall
325 exe2cmd
= $(strip $(call dotfile
,$(patsubst %,%.cmd
,$(1))))
327 ifeq ($(LINK_USING_CC
),1)
328 O_TO_EXE
= $(CC
) -o
$@
$(CFLAGS
) $(EXTRA_CFLAGS
) $(OBJS-y
) $(call linkerprefix
, \
329 $(LDLIBS
) $(LDFLAGS
) $(LDFLAGS_
$(@
)) $(EXTRA_LDFLAGS
) \
332 O_TO_EXE
= $(LD
) -o
$@
$(OBJS-y
) \
333 $(LDLIBS
) $(LDFLAGS
) $(LDFLAGS_
$(@
)) $(EXTRA_LDFLAGS
) \
336 O_TO_EXE_STR
= $(subst ','\'',$(O_TO_EXE)) #'# fix syntax highlight
337 O_TO_EXE_DISP
= $(if
$(V
),"$(O_TO_EXE_STR)"," LD $(@)")
338 O_TO_EXE_CMD
= "cmd_$@ = $(O_TO_EXE_STR)"
339 O_TO_EXE_DO
= @set
-e
; \
340 echo
$(O_TO_EXE_DISP
); \
342 echo
$(O_TO_EXE_CMD
) > $(call exe2cmd
,$(@
))
346 # path where libraries are retrieved
347 LDLIBS_PATH
:= $(subst -Wl
$(comma
)-L
,,$(filter -Wl
$(comma
)-L
%,$(LDLIBS
)))
348 LDLIBS_PATH
+= $(subst -L
,,$(filter -L
%,$(LDLIBS
)))
350 # list of .a files that are linked to this application
351 LDLIBS_NAMES
:= $(patsubst -l
%,lib
%.a
,$(filter -l
%,$(LDLIBS
)))
352 LDLIBS_NAMES
+= $(patsubst -Wl
$(comma
)-l
%,lib
%.a
,$(filter -Wl
$(comma
)-l
%,$(LDLIBS
)))
354 # list of found libraries files (useful for deps). If not found, the
355 # library is silently ignored and dep won't be checked
356 LDLIBS_FILES
:= $(sort $(wildcard $(foreach dir,$(LDLIBS_PATH
),\
357 $(addprefix $(dir)/,$(LDLIBS_NAMES
)))))
360 # Compile executable file if needed
362 $(APP
): $(OBJS-y
) $(LDLIBS_FILES
) $(DEP_
$(APP
)) $(LDSCRIPT
) FORCE
363 @
[ -d
$(dir $@
) ] || mkdir
-p
$(dir $@
)
365 @echo
-n
"$< -> $@ " ; \
366 echo
-n
"file_missing=$(call boolean,$(file_missing)) " ; \
367 echo
-n
"cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_EXE_STR))) " ; \
368 echo
-n
"depfile_missing=$(call boolean,$(depfile_missing)) " ; \
369 echo
"depfile_newer=$(call boolean,$(depfile_newer)) ")
372 $(call cmdline_changed
,$(O_TO_EXE_STR
)),\
378 # install app in $(RTE_OUTPUT)/app
380 $(RTE_OUTPUT
)/app
/$(APP
): $(APP
)
381 @echo
" INSTALL-APP $(APP)"
382 @
[ -d
$(RTE_OUTPUT
)/app
] || mkdir
-p
$(RTE_OUTPUT
)/app
383 $(Q
)cp
-f
$(APP
) $(RTE_OUTPUT
)/app
386 # install app map file in $(RTE_OUTPUT)/app
388 $(RTE_OUTPUT
)/app
/$(APP
).map
: $(APP
)
389 @echo
" INSTALL-MAP $(APP).map"
390 @
[ -d
$(RTE_OUTPUT
)/app
] || mkdir
-p
$(RTE_OUTPUT
)/app
391 $(Q
)cp
-f
$(APP
).map
$(RTE_OUTPUT
)/app
394 # Clean all generated files
398 $(Q
)rm -f
$(_BUILD_TARGETS
) $(_INSTALL_TARGETS
) $(_CLEAN_TARGETS
)
402 $(Q
)rm -rf
$(APP
) $(OBJS-all
) $(DEPS-all
) $(DEPSTMP-all
) \
403 $(CMDS-all
) $(INSTALL-FILES-all
) .
$(APP
).cmd
$(APP
).map
406 include $(RTE_SDK
)/mk
/internal
/rte.compile-post.mk
407 include $(RTE_SDK
)/mk
/internal
/rte.install-post.mk
408 include $(RTE_SDK
)/mk
/internal
/rte.clean-post.mk
409 include $(RTE_SDK
)/mk
/internal
/rte.build-post.mk
411 ifneq ($(wildcard $(RTE_SDK
)/mk
/target
/$(RTE_TARGET
)/rte.app.mk
),)
412 include $(RTE_SDK
)/mk
/target
/$(RTE_TARGET
)/rte.app.mk
414 include $(RTE_SDK
)/mk
/target
/generic
/rte.app.mk