fb49d804ba411f6604e51e1988c631b5dbe9f695
[dpdk.git] / app / test / meson.build
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2017 Intel Corporation
3
4 if not get_option('tests')
5         subdir_done()
6 endif
7
8 test_sources = files('commands.c',
9         'packet_burst_generator.c',
10         'sample_packet_forward.c',
11         'test.c',
12         'test_acl.c',
13         'test_alarm.c',
14         'test_atomic.c',
15         'test_barrier.c',
16         'test_bitratestats.c',
17         'test_bpf.c',
18         'test_byteorder.c',
19         'test_cmdline.c',
20         'test_cmdline_cirbuf.c',
21         'test_cmdline_etheraddr.c',
22         'test_cmdline_ipaddr.c',
23         'test_cmdline_lib.c',
24         'test_cmdline_num.c',
25         'test_cmdline_portlist.c',
26         'test_cmdline_string.c',
27         'test_common.c',
28         'test_cpuflags.c',
29         'test_crc.c',
30         'test_cryptodev.c',
31         'test_cryptodev_asym.c',
32         'test_cryptodev_blockcipher.c',
33         'test_cryptodev_security_pdcp.c',
34         'test_cycles.c',
35         'test_debug.c',
36         'test_distributor.c',
37         'test_distributor_perf.c',
38         'test_eal_flags.c',
39         'test_eal_fs.c',
40         'test_efd.c',
41         'test_efd_perf.c',
42         'test_errno.c',
43         'test_event_crypto_adapter.c',
44         'test_event_eth_rx_adapter.c',
45         'test_event_ring.c',
46         'test_event_eth_tx_adapter.c',
47         'test_event_timer_adapter.c',
48         'test_eventdev.c',
49         'test_external_mem.c',
50         'test_fbarray.c',
51         'test_fib.c',
52         'test_fib_perf.c',
53         'test_fib6.c',
54         'test_fib6_perf.c',
55         'test_func_reentrancy.c',
56         'test_flow_classify.c',
57         'test_hash.c',
58         'test_hash_functions.c',
59         'test_hash_multiwriter.c',
60         'test_hash_readwrite.c',
61         'test_hash_perf.c',
62         'test_hash_readwrite_lf.c',
63         'test_interrupts.c',
64         'test_ipsec.c',
65         'test_ipsec_sad.c',
66         'test_kni.c',
67         'test_kvargs.c',
68         'test_latencystats.c',
69         'test_link_bonding.c',
70         'test_link_bonding_mode4.c',
71         'test_link_bonding_rssconf.c',
72         'test_logs.c',
73         'test_lpm.c',
74         'test_lpm6.c',
75         'test_lpm6_perf.c',
76         'test_lpm_perf.c',
77         'test_malloc.c',
78         'test_mbuf.c',
79         'test_member.c',
80         'test_member_perf.c',
81         'test_memcpy.c',
82         'test_memcpy_perf.c',
83         'test_memory.c',
84         'test_mempool.c',
85         'test_mempool_perf.c',
86         'test_memzone.c',
87         'test_meter.c',
88         'test_metrics.c',
89         'test_mcslock.c',
90         'test_mp_secondary.c',
91         'test_pdump.c',
92         'test_per_lcore.c',
93         'test_pmd_perf.c',
94         'test_pmd_ring.c',
95         'test_pmd_ring_perf.c',
96         'test_power.c',
97         'test_power_cpufreq.c',
98         'test_power_kvm_vm.c',
99         'test_prefetch.c',
100         'test_rand_perf.c',
101         'test_rawdev.c',
102         'test_rcu_qsbr.c',
103         'test_rcu_qsbr_perf.c',
104         'test_reciprocal_division.c',
105         'test_reciprocal_division_perf.c',
106         'test_red.c',
107         'test_reorder.c',
108         'test_rib.c',
109         'test_rib6.c',
110         'test_ring.c',
111         'test_ring_perf.c',
112         'test_rwlock.c',
113         'test_sched.c',
114         'test_service_cores.c',
115         'test_spinlock.c',
116         'test_stack.c',
117         'test_stack_perf.c',
118         'test_string_fns.c',
119         'test_table.c',
120         'test_table_acl.c',
121         'test_table_combined.c',
122         'test_table_pipeline.c',
123         'test_table_ports.c',
124         'test_table_tables.c',
125         'test_tailq.c',
126         'test_thash.c',
127         'test_timer.c',
128         'test_timer_perf.c',
129         'test_timer_racecond.c',
130         'test_timer_secondary.c',
131         'test_ticketlock.c',
132         'test_version.c',
133         'virtual_pmd.c'
134 )
135
136 test_deps = ['acl',
137         'bitratestats',
138         'bpf',
139         'cfgfile',
140         'cmdline',
141         'cryptodev',
142         'distributor',
143         'efd',
144         'ethdev',
145         'eventdev',
146         'fib',
147         'flow_classify',
148         'hash',
149         'ipsec',
150         'latencystats',
151         'lpm',
152         'member',
153         'metrics',
154         'pipeline',
155         'port',
156         'rawdev',
157         'rcu',
158         'reorder',
159         'rib',
160         'ring',
161         'stack',
162         'timer'
163 ]
164
165 fast_test_names = [
166         'acl_autotest',
167         'alarm_autotest',
168         'atomic_autotest',
169         'byteorder_autotest',
170         'cmdline_autotest',
171         'common_autotest',
172         'cpuflags_autotest',
173         'cycles_autotest',
174         'debug_autotest',
175         'eal_flags_c_opt_autotest',
176         'eal_flags_master_opt_autotest',
177         'eal_flags_n_opt_autotest',
178         'eal_flags_hpet_autotest',
179         'eal_flags_no_huge_autotest',
180         'eal_flags_w_opt_autotest',
181         'eal_flags_b_opt_autotest',
182         'eal_flags_vdev_opt_autotest',
183         'eal_flags_r_opt_autotest',
184         'eal_flags_mem_autotest',
185         'eal_flags_file_prefix_autotest',
186         'eal_flags_misc_autotest',
187         'eal_fs_autotest',
188         'errno_autotest',
189         'event_ring_autotest',
190         'fib_autotest',
191         'fib6_autotest',
192         'func_reentrancy_autotest',
193         'flow_classify_autotest',
194         'hash_autotest',
195         'interrupt_autotest',
196         'logs_autotest',
197         'lpm_autotest',
198         'lpm6_autotest',
199         'malloc_autotest',
200         'mbuf_autotest',
201         'mcslock_autotest',
202         'memcpy_autotest',
203         'memory_autotest',
204         'mempool_autotest',
205         'memzone_autotest',
206         'meter_autotest',
207         'multiprocess_autotest',
208         'per_lcore_autotest',
209         'prefetch_autotest',
210         'rcu_qsbr_autotest',
211         'red_autotest',
212         'rib_autotest',
213         'rib6_autotest',
214         'ring_autotest',
215         'ring_pmd_autotest',
216         'rwlock_test1_autotest',
217         'rwlock_rda_autotest',
218         'rwlock_rds_wrm_autotest',
219         'rwlock_rde_wro_autotest',
220         'sched_autotest',
221         'spinlock_autotest',
222         'stack_autotest',
223         'stack_lf_autotest',
224         'string_autotest',
225         'table_autotest',
226         'tailq_autotest',
227         'timer_autotest',
228         'user_delay_us',
229         'version_autotest',
230         'bitratestats_autotest',
231         'crc_autotest',
232         'delay_us_sleep_autotest',
233         'distributor_autotest',
234         'eventdev_common_autotest',
235         'fbarray_autotest',
236         'hash_readwrite_autotest',
237         'hash_readwrite_lf_autotest',
238         'ipsec_autotest',
239         'kni_autotest',
240         'kvargs_autotest',
241         'latencystats_autotest',
242         'member_autotest',
243         'metrics_autotest',
244         'pdump_autotest',
245         'power_cpufreq_autotest',
246         'power_autotest',
247         'power_kvm_vm_autotest',
248         'reorder_autotest',
249         'service_autotest',
250         'thash_autotest',
251 ]
252
253 perf_test_names = [
254         'ring_perf_autotest',
255         'mempool_perf_autotest',
256         'memcpy_perf_autotest',
257         'hash_perf_autotest',
258         'timer_perf_autotest',
259         'reciprocal_division',
260         'reciprocal_division_perf',
261         'lpm_perf_autotest',
262         'rib_slow_autotest',
263         'fib_slow_autotest',
264         'fib_perf_autotest',
265         'red_all',
266         'barrier_autotest',
267         'hash_multiwriter_autotest',
268         'timer_racecond_autotest',
269         'efd_autotest',
270         'hash_functions_autotest',
271         'member_perf_autotest',
272         'efd_perf_autotest',
273         'lpm6_perf_autotest',
274         'rib6_slow_autotest',
275         'fib6_slow_autotest',
276         'fib6_perf_autotest',
277         'rcu_qsbr_perf_autotest',
278         'red_perf',
279         'distributor_perf_autotest',
280         'ring_pmd_perf_autotest',
281         'pmd_perf_autotest',
282         'stack_perf_autotest',
283         'stack_lf_perf_autotest',
284         'rand_perf_autotest',
285 ]
286
287 driver_test_names = [
288         'cryptodev_aesni_mb_autotest',
289         'cryptodev_aesni_gcm_autotest',
290         'cryptodev_dpaa_sec_autotest',
291         'cryptodev_dpaa2_sec_autotest',
292         'cryptodev_null_autotest',
293         'cryptodev_octeontx2_autotest',
294         'cryptodev_openssl_autotest',
295         'cryptodev_openssl_asym_autotest',
296         'cryptodev_qat_autotest',
297         'cryptodev_sw_armv8_autotest',
298         'cryptodev_sw_kasumi_autotest',
299         'cryptodev_sw_mvsam_autotest',
300         'cryptodev_sw_snow3g_autotest',
301         'cryptodev_sw_zuc_autotest',
302         'eventdev_selftest_octeontx',
303         'eventdev_selftest_sw',
304         'link_bonding_autotest',
305         'link_bonding_mode4_autotest',
306         'link_bonding_rssconf_autotest',
307         'rawdev_autotest',
308 ]
309
310 dump_test_names = [
311         'dump_struct_sizes',
312         'dump_mempool',
313         'dump_malloc_stats',
314         'dump_devargs',
315         'dump_log_types',
316         'dump_ring',
317         'dump_physmem',
318         'dump_memzone',
319 ]
320
321 # The following linkages are an exception to allow running the
322 # unit tests without requiring that the developer install the
323 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
324 # in applications should not be used.
325 if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
326         test_deps += 'mempool_ring'
327 endif
328 if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
329         test_deps += 'mempool_stack'
330 endif
331 if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
332         test_deps += 'pmd_skeleton_event'
333 endif
334
335 # The following linkages of drivers are required because
336 # they are used via a driver-specific API.
337 if dpdk_conf.has('RTE_LIBRTE_BOND_PMD')
338         test_deps += 'pmd_bond'
339 endif
340 if dpdk_conf.has('RTE_LIBRTE_RING_PMD')
341         test_deps += 'pmd_ring'
342 endif
343
344 if dpdk_conf.has('RTE_LIBRTE_POWER')
345         test_deps += 'power'
346 endif
347 if dpdk_conf.has('RTE_LIBRTE_KNI')
348         test_deps += 'kni'
349 endif
350 if dpdk_conf.has('RTE_LIBRTE_PDUMP')
351         test_deps += 'pdump'
352 endif
353
354 cflags = machine_args
355 if cc.has_argument('-Wno-format-truncation')
356     cflags += '-Wno-format-truncation'
357 endif
358
359 # specify -D_GNU_SOURCE unconditionally
360 cflags += '-D_GNU_SOURCE'
361
362 test_dep_objs = []
363 if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
364         compress_test_dep = dependency('zlib', required: false)
365         if compress_test_dep.found()
366                 test_dep_objs += compress_test_dep
367                 test_sources += 'test_compressdev.c'
368                 test_deps += 'compressdev'
369                 fast_test_names += 'compressdev_autotest'
370         endif
371 endif
372
373 if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
374         driver_test_names += 'cryptodev_scheduler_autotest'
375 endif
376
377 foreach d:test_deps
378         def_lib = get_option('default_library')
379         test_dep_objs += get_variable(def_lib + '_rte_' + d)
380 endforeach
381 test_dep_objs += cc.find_library('execinfo', required: false)
382
383 link_libs = []
384 if get_option('default_library') == 'static'
385         link_libs = dpdk_drivers
386 endif
387
388 dpdk_test = executable('dpdk-test',
389         test_sources,
390         link_whole: link_libs,
391         dependencies: test_dep_objs,
392         c_args: [cflags, '-DALLOW_EXPERIMENTAL_API'],
393         install_rpath: driver_install_path,
394         install: true)
395
396 # some perf tests (eg: memcpy perf autotest)take very long
397 # to complete, so timeout to 10 minutes
398 timeout_seconds = 600
399 timeout_seconds_fast = 10
400
401 # Retrieve the number of CPU cores, defaulting to 4.
402 num_cores = '0-3'
403 if host_machine.system() == 'linux'
404         num_cores = run_command('cat',
405                                 '/sys/devices/system/cpu/present'
406                                ).stdout().strip()
407 elif host_machine.system() == 'freebsd'
408         snum_cores = run_command('/sbin/sysctl', '-n',
409                                  'hw.ncpu').stdout().strip()
410         inum_cores = snum_cores.to_int() - 1
411         num_cores = '0-@0@'.format(inum_cores)
412 endif
413
414 num_cores_arg = '-l ' + num_cores
415
416 test_args = [num_cores_arg]
417 foreach arg : fast_test_names
418         if host_machine.system() == 'linux'
419                 test(arg, dpdk_test,
420                           env : ['DPDK_TEST=' + arg],
421                           args : test_args +
422                                  ['--file-prefix=@0@'.format(arg)],
423                 timeout : timeout_seconds_fast,
424                 is_parallel : false,
425                 suite : 'fast-tests')
426         else
427                 test(arg, dpdk_test,
428                         env : ['DPDK_TEST=' + arg],
429                         args : test_args,
430                 timeout : timeout_seconds_fast,
431                 is_parallel : false,
432                 suite : 'fast-tests')
433         endif
434 endforeach
435
436 foreach arg : perf_test_names
437         test(arg, dpdk_test,
438         env : ['DPDK_TEST=' + arg],
439         args : test_args,
440         timeout : timeout_seconds,
441         is_parallel : false,
442         suite : 'perf-tests')
443 endforeach
444
445 foreach arg : driver_test_names
446         test(arg, dpdk_test,
447                 env : ['DPDK_TEST=' + arg],
448                 args : test_args,
449                 timeout : timeout_seconds,
450                 is_parallel : false,
451                 suite : 'driver-tests')
452 endforeach
453
454 foreach arg : dump_test_names
455         test(arg, dpdk_test,
456                 env : ['DPDK_TEST=' + arg],
457                 args : test_args,
458                 timeout : timeout_seconds,
459                 is_parallel : false,
460                 suite : 'debug-tests')
461 endforeach