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