xref: /dpdk/app/test/meson.build (revision db1162b4)
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_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
142test_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.
178fast_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
266perf_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
303driver_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
323dump_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.
338if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
339	test_deps += 'mempool_ring'
340endif
341if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
342	test_deps += 'mempool_stack'
343endif
344if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
345	test_deps += 'pmd_skeleton_event'
346endif
347if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
348	test_sources += 'test_telemetry_json.c'
349	fast_tests += [['telemetry_json_autotest', true]]
350endif
351
352# The following linkages of drivers are required because
353# they are used via a driver-specific API.
354if 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
362endif
363if 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]]
378endif
379
380if dpdk_conf.has('RTE_LIBRTE_POWER')
381	test_deps += 'power'
382endif
383if dpdk_conf.has('RTE_LIBRTE_KNI')
384	test_deps += 'kni'
385endif
386if dpdk_conf.has('RTE_LIBRTE_PDUMP')
387	test_deps += 'pdump'
388endif
389
390if cc.has_argument('-Wno-format-truncation')
391    cflags += '-Wno-format-truncation'
392endif
393
394# specify -D_GNU_SOURCE unconditionally
395cflags += '-D_GNU_SOURCE'
396# Strict-aliasing rules are violated by uint8_t[] to context size casts.
397cflags += '-fno-strict-aliasing'
398
399test_dep_objs = []
400if 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
408endif
409
410if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
411	driver_test_names += 'cryptodev_scheduler_autotest'
412endif
413
414foreach d:test_deps
415	def_lib = get_option('default_library')
416	test_dep_objs += get_variable(def_lib + '_rte_' + d)
417endforeach
418test_dep_objs += cc.find_library('execinfo', required: false)
419
420link_libs = []
421if get_option('default_library') == 'static'
422	link_libs = dpdk_static_libraries + dpdk_drivers
423endif
424
425dpdk_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
434has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
435message('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
439timeout_seconds = 600
440timeout_seconds_fast = 10
441
442get_coremask = find_program('get-coremask.sh')
443num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
444
445default_test_args = [num_cores_arg]
446
447foreach 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
476endforeach
477
478foreach 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')
485endforeach
486
487foreach 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')
494endforeach
495
496foreach 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')
503endforeach
504