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