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