39f295d7378a9203cd1abb0664b953254024a2c2
[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 if get_option('default_library') == 'static'
420         link_libs = dpdk_static_libraries + dpdk_drivers
421 endif
422
423 dpdk_test = executable('dpdk-test',
424         test_sources,
425         link_whole: link_libs,
426         dependencies: test_dep_objs,
427         c_args: cflags,
428         install_rpath: join_paths(get_option('prefix'),
429                          driver_install_path),
430         install: true)
431
432 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
433 message('hugepage availability: @0@'.format(has_hugepage))
434
435 # some perf tests (eg: memcpy perf autotest)take very long
436 # to complete, so timeout to 10 minutes
437 timeout_seconds = 600
438 timeout_seconds_fast = 10
439
440 get_coremask = find_program('get-coremask.sh')
441 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
442
443 default_test_args = [num_cores_arg]
444
445 foreach arg : fast_tests
446         test_args = default_test_args
447         run_test = true
448         if not has_hugepage
449                 if arg[1]
450                         test_args += ['--no-huge', '-m', '2048']
451                 else
452                         run_test = false
453                 endif
454         endif
455
456         if (get_option('default_library') == 'shared' and
457                 arg[0] == 'event_eth_tx_adapter_autotest')
458                 foreach drv:dpdk_drivers
459                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
460                 endforeach
461         endif
462         if is_linux
463                 test_args += ['--file-prefix=@0@'.format(arg[0])]
464         endif
465
466         if run_test
467                 test(arg[0], dpdk_test,
468                         env : ['DPDK_TEST=' + arg[0]],
469                         args : test_args,
470                         timeout : timeout_seconds_fast,
471                         is_parallel : false,
472                         suite : 'fast-tests')
473         endif
474 endforeach
475
476 foreach arg : perf_test_names
477         test(arg, dpdk_test,
478         env : ['DPDK_TEST=' + arg],
479         args : default_test_args,
480         timeout : timeout_seconds,
481         is_parallel : false,
482         suite : 'perf-tests')
483 endforeach
484
485 foreach arg : driver_test_names
486         test(arg, dpdk_test,
487                 env : ['DPDK_TEST=' + arg],
488                 args : default_test_args,
489                 timeout : timeout_seconds,
490                 is_parallel : false,
491                 suite : 'driver-tests')
492 endforeach
493
494 foreach arg : dump_test_names
495         test(arg, dpdk_test,
496                 env : ['DPDK_TEST=' + arg],
497                 args : default_test_args,
498                 timeout : timeout_seconds,
499                 is_parallel : false,
500                 suite : 'debug-tests')
501 endforeach