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