eal: register non-EAL threads as lcores
[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 test_dep_objs = []
400 if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
401         compress_test_dep = dependency('zlib', required: false)
402         if compress_test_dep.found()
403                 test_dep_objs += compress_test_dep
404                 test_sources += 'test_compressdev.c'
405                 test_deps += 'compressdev'
406                 fast_tests += [['compressdev_autotest', false]]
407         endif
408 endif
409
410 if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
411         driver_test_names += 'cryptodev_scheduler_autotest'
412 endif
413
414 foreach d:test_deps
415         def_lib = get_option('default_library')
416         test_dep_objs += get_variable(def_lib + '_rte_' + d)
417 endforeach
418 test_dep_objs += cc.find_library('execinfo', required: false)
419
420 link_libs = []
421 if get_option('default_library') == 'static'
422         link_libs = dpdk_static_libraries + dpdk_drivers
423 endif
424
425 dpdk_test = executable('dpdk-test',
426         test_sources,
427         link_whole: link_libs,
428         dependencies: test_dep_objs,
429         c_args: cflags,
430         install_rpath: join_paths(get_option('prefix'),
431                          driver_install_path),
432         install: true)
433
434 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
435 message('hugepage availability: @0@'.format(has_hugepage))
436
437 # some perf tests (eg: memcpy perf autotest)take very long
438 # to complete, so timeout to 10 minutes
439 timeout_seconds = 600
440 timeout_seconds_fast = 10
441
442 get_coremask = find_program('get-coremask.sh')
443 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
444
445 default_test_args = [num_cores_arg]
446
447 foreach arg : fast_tests
448         test_args = default_test_args
449         run_test = true
450         if not has_hugepage
451                 if arg[1]
452                         test_args += ['--no-huge', '-m', '2048']
453                 else
454                         run_test = false
455                 endif
456         endif
457
458         if (get_option('default_library') == 'shared' and
459                 arg[0] == 'event_eth_tx_adapter_autotest')
460                 foreach drv:dpdk_drivers
461                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
462                 endforeach
463         endif
464         if is_linux
465                 test_args += ['--file-prefix=@0@'.format(arg[0])]
466         endif
467
468         if run_test
469                 test(arg[0], dpdk_test,
470                         env : ['DPDK_TEST=' + arg[0]],
471                         args : test_args,
472                         timeout : timeout_seconds_fast,
473                         is_parallel : false,
474                         suite : 'fast-tests')
475         endif
476 endforeach
477
478 foreach arg : perf_test_names
479         test(arg, dpdk_test,
480         env : ['DPDK_TEST=' + arg],
481         args : default_test_args,
482         timeout : timeout_seconds,
483         is_parallel : false,
484         suite : 'perf-tests')
485 endforeach
486
487 foreach arg : driver_test_names
488         test(arg, dpdk_test,
489                 env : ['DPDK_TEST=' + arg],
490                 args : default_test_args,
491                 timeout : timeout_seconds,
492                 is_parallel : false,
493                 suite : 'driver-tests')
494 endforeach
495
496 foreach arg : dump_test_names
497         test(arg, dpdk_test,
498                 env : ['DPDK_TEST=' + arg],
499                 args : default_test_args,
500                 timeout : timeout_seconds,
501                 is_parallel : false,
502                 suite : 'debug-tests')
503 endforeach