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