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