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