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