bb06a92431c02c5ba6facc5d6e37f2a34c7c6094
[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         ['timer_autotest', false],
250         ['user_delay_us', true],
251         ['version_autotest', true],
252         ['crc_autotest', true],
253         ['delay_us_sleep_autotest', true],
254         ['distributor_autotest', false],
255         ['eventdev_common_autotest', true],
256         ['fbarray_autotest', true],
257         ['hash_readwrite_func_autotest', false],
258         ['ipsec_autotest', true],
259         ['kni_autotest', false],
260         ['kvargs_autotest', true],
261         ['member_autotest', true],
262         ['metrics_autotest', true],
263         ['power_cpufreq_autotest', false],
264         ['power_autotest', true],
265         ['power_kvm_vm_autotest', false],
266         ['reorder_autotest', true],
267         ['service_autotest', true],
268         ['thash_autotest', true],
269         ['trace_autotest', true],
270 ]
271
272 perf_test_names = [
273         'ring_perf_autotest',
274         'mempool_perf_autotest',
275         'memcpy_perf_autotest',
276         'hash_perf_autotest',
277         'timer_perf_autotest',
278         'reciprocal_division',
279         'reciprocal_division_perf',
280         'lpm_perf_autotest',
281         'rib_slow_autotest',
282         'fib_slow_autotest',
283         'fib_perf_autotest',
284         'red_all',
285         'barrier_autotest',
286         'hash_multiwriter_autotest',
287         'timer_racecond_autotest',
288         'efd_autotest',
289         'hash_functions_autotest',
290         'member_perf_autotest',
291         'efd_perf_autotest',
292         'lpm6_perf_autotest',
293         'rib6_slow_autotest',
294         'fib6_slow_autotest',
295         'fib6_perf_autotest',
296         'rcu_qsbr_perf_autotest',
297         'red_perf',
298         'distributor_perf_autotest',
299         'pmd_perf_autotest',
300         'stack_perf_autotest',
301         'stack_lf_perf_autotest',
302         'rand_perf_autotest',
303         'hash_readwrite_perf_autotest',
304         'hash_readwrite_lf_perf_autotest',
305         'trace_perf_autotest',
306         'ipsec_perf_autotest',
307 ]
308
309 driver_test_names = [
310         'cryptodev_aesni_mb_autotest',
311         'cryptodev_aesni_gcm_autotest',
312         'cryptodev_dpaa_sec_autotest',
313         'cryptodev_dpaa2_sec_autotest',
314         'cryptodev_null_autotest',
315         'cryptodev_octeontx2_autotest',
316         'cryptodev_openssl_autotest',
317         'cryptodev_openssl_asym_autotest',
318         'cryptodev_qat_autotest',
319         'cryptodev_sw_armv8_autotest',
320         'cryptodev_sw_kasumi_autotest',
321         'cryptodev_sw_mvsam_autotest',
322         'cryptodev_sw_snow3g_autotest',
323         'cryptodev_sw_zuc_autotest',
324         'eventdev_selftest_octeontx',
325         'eventdev_selftest_sw',
326         'rawdev_autotest',
327 ]
328
329 dump_test_names = [
330         'dump_struct_sizes',
331         'dump_mempool',
332         'dump_malloc_stats',
333         'dump_devargs',
334         'dump_log_types',
335         'dump_ring',
336         'dump_physmem',
337         'dump_memzone',
338 ]
339
340 # The following linkages are an exception to allow running the
341 # unit tests without requiring that the developer install the
342 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
343 # in applications should not be used.
344 if dpdk_conf.has('RTE_MEMPOOL_RING')
345         test_deps += 'mempool_ring'
346 endif
347 if dpdk_conf.has('RTE_MEMPOOL_STACK')
348         test_deps += 'mempool_stack'
349 endif
350 if dpdk_conf.has('RTE_EVENT_SKELETON')
351         test_deps += 'event_skeleton'
352 endif
353 if dpdk_conf.has('RTE_LIB_TELEMETRY')
354         test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
355         fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
356 endif
357
358 # The following linkages of drivers are required because
359 # they are used via a driver-specific API.
360 if dpdk_conf.has('RTE_NET_BOND')
361         test_deps += 'net_bond'
362         test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
363         driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
364         if dpdk_conf.has('RTE_NET_RING')
365                 test_sources += 'test_link_bonding_mode4.c'
366                 driver_test_names += 'link_bonding_mode4_autotest'
367         endif
368 endif
369 if dpdk_conf.has('RTE_NET_RING')
370         test_deps += 'net_ring'
371         test_sources += 'test_pmd_ring_perf.c'
372         test_sources += 'test_pmd_ring.c'
373         test_sources += 'test_event_eth_tx_adapter.c'
374         test_sources += 'test_bitratestats.c'
375         test_sources += 'test_latencystats.c'
376         test_sources += 'sample_packet_forward.c'
377         test_sources += 'test_pdump.c'
378         fast_tests += [['ring_pmd_autotest', true]]
379         perf_test_names += 'ring_pmd_perf_autotest'
380         fast_tests += [['event_eth_tx_adapter_autotest', false]]
381         fast_tests += [['bitratestats_autotest', true]]
382         fast_tests += [['latencystats_autotest', true]]
383         fast_tests += [['pdump_autotest', true]]
384 endif
385
386 if dpdk_conf.has('RTE_LIB_POWER')
387         test_deps += 'power'
388 endif
389 if dpdk_conf.has('RTE_LIB_KNI')
390         test_deps += 'kni'
391 endif
392 if dpdk_conf.has('RTE_LIB_PDUMP')
393         test_deps += 'pdump'
394 endif
395
396 if cc.has_argument('-Wno-format-truncation')
397     cflags += '-Wno-format-truncation'
398 endif
399
400 # specify -D_GNU_SOURCE unconditionally
401 cflags += '-D_GNU_SOURCE'
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)
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 test_dep_objs += cc.find_library('execinfo', required: false)
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