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