76eaaea45746434f7eaa627cb7f5abe7cbd4b0a1
[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 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
402 cflags += '-fno-strict-aliasing'
403
404 # Enable using internal APIs in unit tests
405 cflags += ['-DALLOW_INTERNAL_API']
406
407 test_dep_objs = []
408 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
409         compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
410         if compress_test_dep.found()
411                 test_dep_objs += compress_test_dep
412                 test_sources += 'test_compressdev.c'
413                 test_deps += 'compressdev'
414                 fast_tests += [['compressdev_autotest', false]]
415         endif
416 endif
417
418 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
419         driver_test_names += 'cryptodev_scheduler_autotest'
420         test_deps += 'crypto_scheduler'
421 endif
422
423 foreach d:test_deps
424         def_lib = get_option('default_library')
425         test_dep_objs += get_variable(def_lib + '_rte_' + d)
426 endforeach
427
428 link_libs = []
429 if get_option('default_library') == 'static'
430         link_libs = dpdk_static_libraries + dpdk_drivers
431 endif
432
433 dpdk_test = executable('dpdk-test',
434         test_sources,
435         link_whole: link_libs,
436         dependencies: test_dep_objs,
437         c_args: cflags,
438         install_rpath: join_paths(get_option('prefix'),
439                          driver_install_path),
440         install: true)
441
442 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
443 message('hugepage availability: @0@'.format(has_hugepage))
444
445 # some perf tests (eg: memcpy perf autotest)take very long
446 # to complete, so timeout to 10 minutes
447 timeout_seconds = 600
448 timeout_seconds_fast = 10
449
450 get_coremask = find_program('get-coremask.sh')
451 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
452
453 default_test_args = [num_cores_arg]
454
455 foreach arg : fast_tests
456         test_args = default_test_args
457         run_test = true
458         if not has_hugepage
459                 if arg[1]
460                         test_args += ['--no-huge', '-m', '2048']
461                 else
462                         run_test = false
463                 endif
464         endif
465
466         if (get_option('default_library') == 'shared' and
467                 arg[0] == 'event_eth_tx_adapter_autotest')
468                 foreach drv:dpdk_drivers
469                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
470                 endforeach
471         endif
472         if is_linux
473                 test_args += ['--file-prefix=@0@'.format(arg[0])]
474         endif
475
476         if run_test
477                 test(arg[0], dpdk_test,
478                         env : ['DPDK_TEST=' + arg[0]],
479                         args : test_args,
480                         timeout : timeout_seconds_fast,
481                         is_parallel : false,
482                         suite : 'fast-tests')
483         endif
484 endforeach
485
486 foreach arg : perf_test_names
487         test(arg, dpdk_test,
488         env : ['DPDK_TEST=' + arg],
489         args : default_test_args,
490         timeout : timeout_seconds,
491         is_parallel : false,
492         suite : 'perf-tests')
493 endforeach
494
495 foreach arg : driver_test_names
496         test(arg, dpdk_test,
497                 env : ['DPDK_TEST=' + arg],
498                 args : default_test_args,
499                 timeout : timeout_seconds,
500                 is_parallel : false,
501                 suite : 'driver-tests')
502 endforeach
503
504 foreach arg : dump_test_names
505         test(arg, dpdk_test,
506                 env : ['DPDK_TEST=' + arg],
507                 args : default_test_args,
508                 timeout : timeout_seconds,
509                 is_parallel : false,
510                 suite : 'debug-tests')
511 endforeach