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