099895fc8753549ed5ed1a874ade6ddd052bbf39
[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_pmd_perf.c',
94         'test_power.c',
95         'test_power_cpufreq.c',
96         'test_power_kvm_vm.c',
97         'test_prefetch.c',
98         'test_rand_perf.c',
99         'test_rawdev.c',
100         'test_rcu_qsbr.c',
101         'test_rcu_qsbr_perf.c',
102         'test_reciprocal_division.c',
103         'test_reciprocal_division_perf.c',
104         'test_red.c',
105         'test_reorder.c',
106         'test_rib.c',
107         'test_rib6.c',
108         'test_ring.c',
109         'test_ring_mpmc_stress.c',
110         'test_ring_hts_stress.c',
111         'test_ring_mt_peek_stress.c',
112         'test_ring_mt_peek_stress_zc.c',
113         'test_ring_perf.c',
114         'test_ring_rts_stress.c',
115         'test_ring_st_peek_stress.c',
116         'test_ring_st_peek_stress_zc.c',
117         'test_ring_stress.c',
118         'test_rwlock.c',
119         'test_sched.c',
120         'test_security.c',
121         'test_service_cores.c',
122         'test_spinlock.c',
123         'test_stack.c',
124         'test_stack_perf.c',
125         'test_string_fns.c',
126         'test_table.c',
127         'test_table_acl.c',
128         'test_table_combined.c',
129         'test_table_pipeline.c',
130         'test_table_ports.c',
131         'test_table_tables.c',
132         'test_tailq.c',
133         'test_thash.c',
134         'test_timer.c',
135         'test_timer_perf.c',
136         'test_timer_racecond.c',
137         'test_timer_secondary.c',
138         'test_ticketlock.c',
139         'test_trace.c',
140         'test_trace_register.c',
141         'test_trace_perf.c',
142         'test_version.c',
143         'virtual_pmd.c'
144 )
145
146 test_deps = ['acl',
147         'bus_pci',
148         'bus_vdev',
149         'bitratestats',
150         'bpf',
151         'cfgfile',
152         'cmdline',
153         'cryptodev',
154         'distributor',
155         'efd',
156         'ethdev',
157         'eventdev',
158         'fib',
159         'flow_classify',
160         'graph',
161         'hash',
162         'ipsec',
163         'latencystats',
164         'lpm',
165         'member',
166         'metrics',
167         'node',
168         'pipeline',
169         'port',
170         'rawdev',
171         'rcu',
172         'reorder',
173         'rib',
174         'ring',
175         'security',
176         'stack',
177         'telemetry',
178         'timer'
179 ]
180
181 # Each test is marked with flag true/false
182 # to indicate whether it can run in no-huge mode.
183 fast_tests = [
184         ['acl_autotest', true],
185         ['alarm_autotest', false],
186         ['atomic_autotest', false],
187         ['bitops_autotest', true],
188         ['byteorder_autotest', true],
189         ['cmdline_autotest', true],
190         ['common_autotest', true],
191         ['cpuflags_autotest', true],
192         ['cycles_autotest', true],
193         ['debug_autotest', true],
194         ['eal_flags_c_opt_autotest', false],
195         ['eal_flags_main_opt_autotest', false],
196         ['eal_flags_n_opt_autotest', false],
197         ['eal_flags_hpet_autotest', false],
198         ['eal_flags_no_huge_autotest', false],
199         ['eal_flags_a_opt_autotest', false],
200         ['eal_flags_b_opt_autotest', false],
201         ['eal_flags_vdev_opt_autotest', false],
202         ['eal_flags_r_opt_autotest', false],
203         ['eal_flags_mem_autotest', false],
204         ['eal_flags_file_prefix_autotest', false],
205         ['eal_flags_misc_autotest', false],
206         ['eal_fs_autotest', true],
207         ['errno_autotest', true],
208         ['ethdev_link_status', true],
209         ['event_ring_autotest', true],
210         ['fib_autotest', true],
211         ['fib6_autotest', true],
212         ['func_reentrancy_autotest', false],
213         ['flow_classify_autotest', false],
214         ['hash_autotest', true],
215         ['interrupt_autotest', true],
216         ['ipfrag_autotest', false],
217         ['lcores_autotest', true],
218         ['logs_autotest', true],
219         ['lpm_autotest', true],
220         ['lpm6_autotest', true],
221         ['malloc_autotest', false],
222         ['mbuf_autotest', false],
223         ['mcslock_autotest', false],
224         ['memcpy_autotest', true],
225         ['memory_autotest', false],
226         ['mempool_autotest', false],
227         ['memzone_autotest', false],
228         ['meter_autotest', true],
229         ['multiprocess_autotest', false],
230         ['per_lcore_autotest', true],
231         ['prefetch_autotest', true],
232         ['rcu_qsbr_autotest', true],
233         ['red_autotest', true],
234         ['rib_autotest', true],
235         ['rib6_autotest', true],
236         ['ring_autotest', true],
237         ['rwlock_test1_autotest', true],
238         ['rwlock_rda_autotest', true],
239         ['rwlock_rds_wrm_autotest', true],
240         ['rwlock_rde_wro_autotest', true],
241         ['sched_autotest', true],
242                 ['security_autotest', false],
243         ['spinlock_autotest', true],
244         ['stack_autotest', false],
245         ['stack_lf_autotest', false],
246         ['string_autotest', true],
247         ['table_autotest', true],
248         ['tailq_autotest', true],
249         ['ticketlock_autotest', true],
250         ['timer_autotest', false],
251         ['user_delay_us', true],
252         ['version_autotest', true],
253         ['crc_autotest', true],
254         ['delay_us_sleep_autotest', true],
255         ['distributor_autotest', false],
256         ['eventdev_common_autotest', true],
257         ['fbarray_autotest', true],
258         ['hash_readwrite_func_autotest', false],
259         ['ipsec_autotest', true],
260         ['kni_autotest', false],
261         ['kvargs_autotest', true],
262         ['member_autotest', true],
263         ['metrics_autotest', true],
264         ['power_cpufreq_autotest', false],
265         ['power_autotest', true],
266         ['power_kvm_vm_autotest', false],
267         ['reorder_autotest', true],
268         ['service_autotest', true],
269         ['thash_autotest', true],
270         ['trace_autotest', true],
271 ]
272
273 perf_test_names = [
274         'ring_perf_autotest',
275         'mempool_perf_autotest',
276         'memcpy_perf_autotest',
277         'hash_perf_autotest',
278         'timer_perf_autotest',
279         'reciprocal_division',
280         'reciprocal_division_perf',
281         'lpm_perf_autotest',
282         'rib_slow_autotest',
283         'fib_slow_autotest',
284         'fib_perf_autotest',
285         'red_all',
286         'barrier_autotest',
287         'hash_multiwriter_autotest',
288         'timer_racecond_autotest',
289         'efd_autotest',
290         'hash_functions_autotest',
291         'member_perf_autotest',
292         'efd_perf_autotest',
293         'lpm6_perf_autotest',
294         'rib6_slow_autotest',
295         'fib6_slow_autotest',
296         'fib6_perf_autotest',
297         'rcu_qsbr_perf_autotest',
298         'red_perf',
299         'distributor_perf_autotest',
300         'pmd_perf_autotest',
301         'stack_perf_autotest',
302         'stack_lf_perf_autotest',
303         'rand_perf_autotest',
304         'hash_readwrite_perf_autotest',
305         'hash_readwrite_lf_perf_autotest',
306         'trace_perf_autotest',
307         'ipsec_perf_autotest',
308 ]
309
310 driver_test_names = [
311         'cryptodev_aesni_mb_autotest',
312         'cryptodev_aesni_gcm_autotest',
313         'cryptodev_dpaa_sec_autotest',
314         'cryptodev_dpaa2_sec_autotest',
315         'cryptodev_null_autotest',
316         'cryptodev_octeontx2_autotest',
317         'cryptodev_openssl_autotest',
318         'cryptodev_openssl_asym_autotest',
319         'cryptodev_qat_autotest',
320         'cryptodev_sw_armv8_autotest',
321         'cryptodev_sw_kasumi_autotest',
322         'cryptodev_sw_mvsam_autotest',
323         'cryptodev_sw_snow3g_autotest',
324         'cryptodev_sw_zuc_autotest',
325         'eventdev_selftest_octeontx',
326         'eventdev_selftest_sw',
327         'rawdev_autotest',
328 ]
329
330 dump_test_names = [
331         'dump_struct_sizes',
332         'dump_mempool',
333         'dump_malloc_stats',
334         'dump_devargs',
335         'dump_log_types',
336         'dump_ring',
337         'dump_physmem',
338         'dump_memzone',
339 ]
340
341 # The following linkages are an exception to allow running the
342 # unit tests without requiring that the developer install the
343 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
344 # in applications should not be used.
345 if dpdk_conf.has('RTE_MEMPOOL_RING')
346         test_deps += 'mempool_ring'
347 endif
348 if dpdk_conf.has('RTE_MEMPOOL_STACK')
349         test_deps += 'mempool_stack'
350 endif
351 if dpdk_conf.has('RTE_EVENT_SKELETON')
352         test_deps += 'event_skeleton'
353 endif
354 if dpdk_conf.has('RTE_LIB_TELEMETRY')
355         test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
356         fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
357 endif
358
359 # The following linkages of drivers are required because
360 # they are used via a driver-specific API.
361 if dpdk_conf.has('RTE_NET_BOND')
362         test_deps += 'net_bond'
363         test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
364         driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
365         if dpdk_conf.has('RTE_NET_RING')
366                 test_sources += 'test_link_bonding_mode4.c'
367                 driver_test_names += 'link_bonding_mode4_autotest'
368         endif
369 endif
370 if dpdk_conf.has('RTE_NET_RING')
371         test_deps += 'net_ring'
372         test_sources += 'test_pmd_ring_perf.c'
373         test_sources += 'test_pmd_ring.c'
374         test_sources += 'test_event_eth_tx_adapter.c'
375         test_sources += 'test_bitratestats.c'
376         test_sources += 'test_latencystats.c'
377         test_sources += 'sample_packet_forward.c'
378         test_sources += 'test_pdump.c'
379         fast_tests += [['ring_pmd_autotest', true]]
380         perf_test_names += 'ring_pmd_perf_autotest'
381         fast_tests += [['event_eth_tx_adapter_autotest', false]]
382         fast_tests += [['bitratestats_autotest', true]]
383         fast_tests += [['latencystats_autotest', true]]
384         fast_tests += [['pdump_autotest', true]]
385 endif
386
387 if dpdk_conf.has('RTE_LIB_POWER')
388         test_deps += 'power'
389 endif
390 if dpdk_conf.has('RTE_LIB_KNI')
391         test_deps += 'kni'
392 endif
393 if dpdk_conf.has('RTE_LIB_PDUMP')
394         test_deps += 'pdump'
395 endif
396
397 if cc.has_argument('-Wno-format-truncation')
398     cflags += '-Wno-format-truncation'
399 endif
400
401 # specify -D_GNU_SOURCE unconditionally
402 cflags += '-D_GNU_SOURCE'
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