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