xref: /dpdk/app/test/meson.build (revision 444e5567)
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_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
140test_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.
176fast_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
263perf_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
300driver_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
320dump_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.
335if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
336	test_deps += 'mempool_ring'
337endif
338if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
339	test_deps += 'mempool_stack'
340endif
341if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
342	test_deps += 'pmd_skeleton_event'
343endif
344if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
345	test_sources += 'test_telemetry_json.c'
346	fast_tests += [['telemetry_json_autotest', true]]
347endif
348
349# The following linkages of drivers are required because
350# they are used via a driver-specific API.
351if 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']
355endif
356if 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]]
373endif
374
375if dpdk_conf.has('RTE_LIBRTE_POWER')
376	test_deps += 'power'
377endif
378if dpdk_conf.has('RTE_LIBRTE_KNI')
379	test_deps += 'kni'
380endif
381if dpdk_conf.has('RTE_LIBRTE_PDUMP')
382	test_deps += 'pdump'
383endif
384
385if cc.has_argument('-Wno-format-truncation')
386    cflags += '-Wno-format-truncation'
387endif
388
389# specify -D_GNU_SOURCE unconditionally
390cflags += '-D_GNU_SOURCE'
391# Strict-aliasing rules are violated by uint8_t[] to context size casts.
392cflags += '-fno-strict-aliasing'
393
394test_dep_objs = []
395if 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
403endif
404
405if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
406	driver_test_names += 'cryptodev_scheduler_autotest'
407endif
408
409foreach d:test_deps
410	def_lib = get_option('default_library')
411	test_dep_objs += get_variable(def_lib + '_rte_' + d)
412endforeach
413test_dep_objs += cc.find_library('execinfo', required: false)
414
415link_libs = []
416link_nodes = []
417if get_option('default_library') == 'static'
418	link_libs = dpdk_drivers
419	link_nodes = dpdk_graph_nodes
420endif
421
422dpdk_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
430has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
431message('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
435timeout_seconds = 600
436timeout_seconds_fast = 10
437
438get_coremask = find_program('get-coremask.sh')
439num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
440
441default_test_args = [num_cores_arg]
442
443foreach 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
472endforeach
473
474foreach 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')
481endforeach
482
483foreach 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')
490endforeach
491
492foreach 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')
499endforeach
500