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