08c82d3d23a0cc0acec720a896c9a3448d2edc8f
[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         ['alarm_autotest', false],
189         ['atomic_autotest', false],
190         ['bitops_autotest', true],
191         ['byteorder_autotest', true],
192         ['cmdline_autotest', true],
193         ['common_autotest', true],
194         ['cpuflags_autotest', true],
195         ['cycles_autotest', true],
196         ['debug_autotest', true],
197         ['eal_flags_c_opt_autotest', false],
198         ['eal_flags_main_opt_autotest', false],
199         ['eal_flags_n_opt_autotest', false],
200         ['eal_flags_hpet_autotest', false],
201         ['eal_flags_no_huge_autotest', false],
202         ['eal_flags_a_opt_autotest', false],
203         ['eal_flags_b_opt_autotest', false],
204         ['eal_flags_vdev_opt_autotest', false],
205         ['eal_flags_r_opt_autotest', false],
206         ['eal_flags_mem_autotest', false],
207         ['eal_flags_file_prefix_autotest', false],
208         ['eal_flags_misc_autotest', false],
209         ['eal_fs_autotest', true],
210         ['errno_autotest', true],
211         ['ethdev_link_status', true],
212         ['event_ring_autotest', true],
213         ['fib_autotest', true],
214         ['fib6_autotest', true],
215         ['func_reentrancy_autotest', false],
216         ['flow_classify_autotest', false],
217         ['hash_autotest', true],
218         ['interrupt_autotest', true],
219         ['ipfrag_autotest', false],
220         ['lcores_autotest', true],
221         ['logs_autotest', true],
222         ['lpm_autotest', true],
223         ['lpm6_autotest', true],
224         ['malloc_autotest', false],
225         ['mbuf_autotest', false],
226         ['mcslock_autotest', false],
227         ['memcpy_autotest', true],
228         ['memory_autotest', false],
229         ['mempool_autotest', false],
230         ['memzone_autotest', false],
231         ['meter_autotest', true],
232         ['multiprocess_autotest', false],
233         ['per_lcore_autotest', true],
234         ['pflock_autotest', true],
235         ['prefetch_autotest', true],
236         ['rcu_qsbr_autotest', true],
237         ['red_autotest', true],
238         ['rib_autotest', true],
239         ['rib6_autotest', true],
240         ['ring_autotest', true],
241         ['rwlock_test1_autotest', true],
242         ['rwlock_rda_autotest', true],
243         ['rwlock_rds_wrm_autotest', true],
244         ['rwlock_rde_wro_autotest', true],
245         ['sched_autotest', true],
246         ['security_autotest', false],
247         ['spinlock_autotest', true],
248         ['stack_autotest', false],
249         ['stack_lf_autotest', false],
250         ['string_autotest', true],
251         ['table_autotest', true],
252         ['tailq_autotest', true],
253         ['ticketlock_autotest', true],
254         ['timer_autotest', false],
255         ['user_delay_us', true],
256         ['version_autotest', true],
257         ['crc_autotest', true],
258         ['delay_us_sleep_autotest', true],
259         ['distributor_autotest', false],
260         ['eventdev_common_autotest', true],
261         ['fbarray_autotest', true],
262         ['hash_readwrite_func_autotest', false],
263         ['ipsec_autotest', true],
264         ['kni_autotest', false],
265         ['kvargs_autotest', true],
266         ['member_autotest', true],
267         ['metrics_autotest', true],
268         ['power_cpufreq_autotest', false],
269         ['power_autotest', true],
270         ['power_kvm_vm_autotest', false],
271         ['reorder_autotest', true],
272         ['service_autotest', true],
273         ['thash_autotest', true],
274         ['trace_autotest', true],
275 ]
276
277 perf_test_names = [
278         'ring_perf_autotest',
279         'mempool_perf_autotest',
280         'memcpy_perf_autotest',
281         'hash_perf_autotest',
282         'timer_perf_autotest',
283         'reciprocal_division',
284         'reciprocal_division_perf',
285         'lpm_perf_autotest',
286         'rib_slow_autotest',
287         'fib_slow_autotest',
288         'fib_perf_autotest',
289         'red_all',
290         'barrier_autotest',
291         'hash_multiwriter_autotest',
292         'timer_racecond_autotest',
293         'efd_autotest',
294         'hash_functions_autotest',
295         'member_perf_autotest',
296         'efd_perf_autotest',
297         'lpm6_perf_autotest',
298         'rib6_slow_autotest',
299         'fib6_slow_autotest',
300         'fib6_perf_autotest',
301         'rcu_qsbr_perf_autotest',
302         'red_perf',
303         'distributor_perf_autotest',
304         'pmd_perf_autotest',
305         'stack_perf_autotest',
306         'stack_lf_perf_autotest',
307         'rand_perf_autotest',
308         'hash_readwrite_perf_autotest',
309         'hash_readwrite_lf_perf_autotest',
310         'trace_perf_autotest',
311         'ipsec_perf_autotest',
312 ]
313
314 driver_test_names = [
315         'cryptodev_aesni_mb_autotest',
316         'cryptodev_aesni_gcm_autotest',
317         'cryptodev_dpaa_sec_autotest',
318         'cryptodev_dpaa2_sec_autotest',
319         'cryptodev_null_autotest',
320         'cryptodev_octeontx2_autotest',
321         'cryptodev_openssl_autotest',
322         'cryptodev_openssl_asym_autotest',
323         'cryptodev_qat_autotest',
324         'cryptodev_sw_armv8_autotest',
325         'cryptodev_sw_kasumi_autotest',
326         'cryptodev_sw_mvsam_autotest',
327         'cryptodev_sw_snow3g_autotest',
328         'cryptodev_sw_zuc_autotest',
329         'eventdev_selftest_octeontx',
330         'eventdev_selftest_sw',
331         'rawdev_autotest',
332 ]
333
334 dump_test_names = [
335         'dump_struct_sizes',
336         'dump_mempool',
337         'dump_malloc_stats',
338         'dump_devargs',
339         'dump_log_types',
340         'dump_ring',
341         'dump_physmem',
342         'dump_memzone',
343 ]
344
345 # The following linkages are an exception to allow running the
346 # unit tests without requiring that the developer install the
347 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
348 # in applications should not be used.
349 if dpdk_conf.has('RTE_MEMPOOL_RING')
350     test_deps += 'mempool_ring'
351 endif
352 if dpdk_conf.has('RTE_MEMPOOL_STACK')
353     test_deps += 'mempool_stack'
354 endif
355 if dpdk_conf.has('RTE_EVENT_SKELETON')
356     test_deps += 'event_skeleton'
357 endif
358 if dpdk_conf.has('RTE_LIB_TELEMETRY')
359     test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
360     fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
361 endif
362
363 # The following linkages of drivers are required because
364 # they are used via a driver-specific API.
365 if dpdk_conf.has('RTE_NET_BOND')
366     test_deps += 'net_bond'
367     test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
368     driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
369     if dpdk_conf.has('RTE_NET_RING')
370         test_sources += 'test_link_bonding_mode4.c'
371         driver_test_names += 'link_bonding_mode4_autotest'
372     endif
373 endif
374 if dpdk_conf.has('RTE_NET_RING')
375     test_deps += 'net_ring'
376     test_sources += 'test_pmd_ring_perf.c'
377     test_sources += 'test_pmd_ring.c'
378     test_sources += 'test_event_eth_tx_adapter.c'
379     test_sources += 'test_bitratestats.c'
380     test_sources += 'test_latencystats.c'
381     test_sources += 'sample_packet_forward.c'
382     test_sources += 'test_pdump.c'
383     fast_tests += [['ring_pmd_autotest', true]]
384     perf_test_names += 'ring_pmd_perf_autotest'
385     fast_tests += [['event_eth_tx_adapter_autotest', false]]
386     fast_tests += [['bitratestats_autotest', true]]
387     fast_tests += [['latencystats_autotest', true]]
388     fast_tests += [['pdump_autotest', true]]
389 endif
390
391 if dpdk_conf.has('RTE_LIB_POWER')
392     test_deps += 'power'
393 endif
394 if dpdk_conf.has('RTE_LIB_KNI')
395     test_deps += 'kni'
396 endif
397 if dpdk_conf.has('RTE_LIB_PDUMP')
398     test_deps += 'pdump'
399 endif
400
401 if cc.has_argument('-Wno-format-truncation')
402     cflags += '-Wno-format-truncation'
403 endif
404
405 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
406 cflags += '-fno-strict-aliasing'
407
408 # Enable using internal APIs in unit tests
409 cflags += ['-DALLOW_INTERNAL_API']
410
411 test_dep_objs = []
412 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
413     compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
414     if compress_test_dep.found()
415         test_dep_objs += compress_test_dep
416         test_sources += 'test_compressdev.c'
417         test_deps += 'compressdev'
418         fast_tests += [['compressdev_autotest', false]]
419     endif
420 endif
421
422 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
423     driver_test_names += 'cryptodev_scheduler_autotest'
424     test_deps += 'crypto_scheduler'
425 endif
426
427 foreach d:test_deps
428     def_lib = get_option('default_library')
429     test_dep_objs += get_variable(def_lib + '_rte_' + d)
430 endforeach
431
432 link_libs = []
433 if get_option('default_library') == 'static'
434     link_libs = dpdk_static_libraries + dpdk_drivers
435 endif
436
437 dpdk_test = executable('dpdk-test',
438         test_sources,
439         link_whole: link_libs,
440         dependencies: test_dep_objs,
441         c_args: cflags,
442         install_rpath: join_paths(get_option('prefix'),
443              driver_install_path),
444         install: true)
445
446 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
447 message('hugepage availability: @0@'.format(has_hugepage))
448
449 # some perf tests (eg: memcpy perf autotest)take very long
450 # to complete, so timeout to 10 minutes
451 timeout_seconds = 600
452 timeout_seconds_fast = 10
453
454 get_coremask = find_program('get-coremask.sh')
455 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
456
457 default_test_args = [num_cores_arg]
458
459 foreach arg : fast_tests
460     test_args = default_test_args
461     run_test = true
462     if not has_hugepage
463         if arg[1]
464             test_args += ['--no-huge', '-m', '2048']
465         else
466             run_test = false
467         endif
468     endif
469
470     if (get_option('default_library') == 'shared' and
471         arg[0] == 'event_eth_tx_adapter_autotest')
472         foreach drv:dpdk_drivers
473             test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
474         endforeach
475     endif
476     if is_linux
477         test_args += ['--file-prefix=@0@'.format(arg[0])]
478     endif
479
480     if run_test
481         test(arg[0], dpdk_test,
482                 env : ['DPDK_TEST=' + arg[0]],
483                 args : test_args,
484                 timeout : timeout_seconds_fast,
485                 is_parallel : false,
486                 suite : 'fast-tests')
487     endif
488 endforeach
489
490 foreach arg : perf_test_names
491     test(arg, dpdk_test,
492             env : ['DPDK_TEST=' + arg],
493             args : default_test_args,
494             timeout : timeout_seconds,
495             is_parallel : false,
496             suite : 'perf-tests')
497 endforeach
498
499 foreach arg : driver_test_names
500     test(arg, dpdk_test,
501             env : ['DPDK_TEST=' + arg],
502             args : default_test_args,
503             timeout : timeout_seconds,
504             is_parallel : false,
505             suite : 'driver-tests')
506 endforeach
507
508 foreach arg : dump_test_names
509     test(arg, dpdk_test,
510             env : ['DPDK_TEST=' + arg],
511             args : default_test_args,
512             timeout : timeout_seconds,
513             is_parallel : false,
514             suite : 'debug-tests')
515 endforeach