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