xref: /dpdk/app/test/meson.build (revision 1fe3eef5)
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_pmd_perf.c',
94	'test_power.c',
95	'test_power_cpufreq.c',
96	'test_power_kvm_vm.c',
97	'test_prefetch.c',
98	'test_rand_perf.c',
99	'test_rawdev.c',
100	'test_rcu_qsbr.c',
101	'test_rcu_qsbr_perf.c',
102	'test_reciprocal_division.c',
103	'test_reciprocal_division_perf.c',
104	'test_red.c',
105	'test_reorder.c',
106	'test_rib.c',
107	'test_rib6.c',
108	'test_ring.c',
109	'test_ring_mpmc_stress.c',
110	'test_ring_hts_stress.c',
111	'test_ring_mt_peek_stress.c',
112	'test_ring_mt_peek_stress_zc.c',
113	'test_ring_perf.c',
114	'test_ring_rts_stress.c',
115	'test_ring_st_peek_stress.c',
116	'test_ring_st_peek_stress_zc.c',
117	'test_ring_stress.c',
118	'test_rwlock.c',
119	'test_sched.c',
120	'test_security.c',
121	'test_service_cores.c',
122	'test_spinlock.c',
123	'test_stack.c',
124	'test_stack_perf.c',
125	'test_string_fns.c',
126	'test_table.c',
127	'test_table_acl.c',
128	'test_table_combined.c',
129	'test_table_pipeline.c',
130	'test_table_ports.c',
131	'test_table_tables.c',
132	'test_tailq.c',
133	'test_thash.c',
134	'test_timer.c',
135	'test_timer_perf.c',
136	'test_timer_racecond.c',
137	'test_timer_secondary.c',
138	'test_ticketlock.c',
139	'test_trace.c',
140	'test_trace_register.c',
141	'test_trace_perf.c',
142	'test_version.c',
143	'virtual_pmd.c'
144)
145
146test_deps = ['acl',
147	'bus_pci',
148	'bus_vdev',
149	'bitratestats',
150	'bpf',
151	'cfgfile',
152	'cmdline',
153	'cryptodev',
154	'distributor',
155	'efd',
156	'ethdev',
157	'eventdev',
158	'fib',
159	'flow_classify',
160	'graph',
161	'hash',
162	'ipsec',
163	'latencystats',
164	'lpm',
165	'member',
166	'metrics',
167	'node',
168	'pipeline',
169	'port',
170	'rawdev',
171	'rcu',
172	'reorder',
173	'rib',
174	'ring',
175	'security',
176	'stack',
177	'telemetry',
178	'timer'
179]
180
181# Each test is marked with flag true/false
182# to indicate whether it can run in no-huge mode.
183fast_tests = [
184        ['acl_autotest', true],
185        ['alarm_autotest', false],
186        ['atomic_autotest', false],
187        ['bitops_autotest', true],
188        ['byteorder_autotest', true],
189        ['cmdline_autotest', true],
190        ['common_autotest', true],
191        ['cpuflags_autotest', true],
192        ['cycles_autotest', true],
193        ['debug_autotest', true],
194        ['eal_flags_c_opt_autotest', false],
195        ['eal_flags_main_opt_autotest', false],
196        ['eal_flags_n_opt_autotest', false],
197        ['eal_flags_hpet_autotest', false],
198        ['eal_flags_no_huge_autotest', false],
199        ['eal_flags_a_opt_autotest', false],
200        ['eal_flags_b_opt_autotest', false],
201        ['eal_flags_vdev_opt_autotest', false],
202        ['eal_flags_r_opt_autotest', false],
203        ['eal_flags_mem_autotest', false],
204        ['eal_flags_file_prefix_autotest', false],
205        ['eal_flags_misc_autotest', false],
206        ['eal_fs_autotest', true],
207        ['errno_autotest', true],
208        ['ethdev_link_status', true],
209        ['event_ring_autotest', true],
210        ['fib_autotest', true],
211        ['fib6_autotest', true],
212        ['func_reentrancy_autotest', false],
213        ['flow_classify_autotest', false],
214        ['hash_autotest', true],
215        ['interrupt_autotest', true],
216        ['ipfrag_autotest', false],
217        ['lcores_autotest', true],
218        ['logs_autotest', true],
219        ['lpm_autotest', true],
220        ['lpm6_autotest', true],
221        ['malloc_autotest', false],
222        ['mbuf_autotest', false],
223        ['mcslock_autotest', false],
224        ['memcpy_autotest', true],
225        ['memory_autotest', false],
226        ['mempool_autotest', false],
227        ['memzone_autotest', false],
228        ['meter_autotest', true],
229        ['multiprocess_autotest', false],
230        ['per_lcore_autotest', true],
231        ['prefetch_autotest', true],
232        ['rcu_qsbr_autotest', true],
233        ['red_autotest', true],
234        ['rib_autotest', true],
235        ['rib6_autotest', true],
236        ['ring_autotest', true],
237        ['rwlock_test1_autotest', true],
238        ['rwlock_rda_autotest', true],
239        ['rwlock_rds_wrm_autotest', true],
240        ['rwlock_rde_wro_autotest', true],
241        ['sched_autotest', true],
242		['security_autotest', false],
243        ['spinlock_autotest', true],
244        ['stack_autotest', false],
245        ['stack_lf_autotest', false],
246        ['string_autotest', true],
247        ['table_autotest', true],
248        ['tailq_autotest', true],
249        ['timer_autotest', false],
250        ['user_delay_us', true],
251        ['version_autotest', true],
252        ['crc_autotest', true],
253        ['delay_us_sleep_autotest', true],
254        ['distributor_autotest', false],
255        ['eventdev_common_autotest', true],
256        ['fbarray_autotest', true],
257        ['hash_readwrite_func_autotest', false],
258        ['ipsec_autotest', true],
259        ['kni_autotest', false],
260        ['kvargs_autotest', true],
261        ['member_autotest', true],
262        ['metrics_autotest', true],
263        ['power_cpufreq_autotest', false],
264        ['power_autotest', true],
265        ['power_kvm_vm_autotest', false],
266        ['reorder_autotest', true],
267        ['service_autotest', true],
268        ['thash_autotest', true],
269        ['trace_autotest', true],
270]
271
272perf_test_names = [
273        'ring_perf_autotest',
274        'mempool_perf_autotest',
275        'memcpy_perf_autotest',
276        'hash_perf_autotest',
277        'timer_perf_autotest',
278        'reciprocal_division',
279        'reciprocal_division_perf',
280        'lpm_perf_autotest',
281        'rib_slow_autotest',
282        'fib_slow_autotest',
283        'fib_perf_autotest',
284        'red_all',
285        'barrier_autotest',
286        'hash_multiwriter_autotest',
287        'timer_racecond_autotest',
288        'efd_autotest',
289        'hash_functions_autotest',
290        'member_perf_autotest',
291        'efd_perf_autotest',
292        'lpm6_perf_autotest',
293        'rib6_slow_autotest',
294        'fib6_slow_autotest',
295        'fib6_perf_autotest',
296        'rcu_qsbr_perf_autotest',
297        'red_perf',
298        'distributor_perf_autotest',
299        'pmd_perf_autotest',
300        'stack_perf_autotest',
301        'stack_lf_perf_autotest',
302        'rand_perf_autotest',
303        'hash_readwrite_perf_autotest',
304        'hash_readwrite_lf_perf_autotest',
305        'trace_perf_autotest',
306	'ipsec_perf_autotest',
307]
308
309driver_test_names = [
310        'cryptodev_aesni_mb_autotest',
311        'cryptodev_aesni_gcm_autotest',
312        'cryptodev_dpaa_sec_autotest',
313        'cryptodev_dpaa2_sec_autotest',
314        'cryptodev_null_autotest',
315        'cryptodev_octeontx2_autotest',
316        'cryptodev_openssl_autotest',
317        'cryptodev_openssl_asym_autotest',
318        'cryptodev_qat_autotest',
319        'cryptodev_sw_armv8_autotest',
320        'cryptodev_sw_kasumi_autotest',
321        'cryptodev_sw_mvsam_autotest',
322        'cryptodev_sw_snow3g_autotest',
323        'cryptodev_sw_zuc_autotest',
324        'eventdev_selftest_octeontx',
325        'eventdev_selftest_sw',
326        'rawdev_autotest',
327]
328
329dump_test_names = [
330        'dump_struct_sizes',
331        'dump_mempool',
332        'dump_malloc_stats',
333        'dump_devargs',
334        'dump_log_types',
335        'dump_ring',
336        'dump_physmem',
337        'dump_memzone',
338]
339
340# The following linkages are an exception to allow running the
341# unit tests without requiring that the developer install the
342# DPDK libraries.  Explicit linkage of drivers (plugin libraries)
343# in applications should not be used.
344if dpdk_conf.has('RTE_MEMPOOL_RING')
345	test_deps += 'mempool_ring'
346endif
347if dpdk_conf.has('RTE_MEMPOOL_STACK')
348	test_deps += 'mempool_stack'
349endif
350if dpdk_conf.has('RTE_EVENT_SKELETON')
351	test_deps += 'event_skeleton'
352endif
353if dpdk_conf.has('RTE_LIB_TELEMETRY')
354	test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
355	fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
356endif
357
358# The following linkages of drivers are required because
359# they are used via a driver-specific API.
360if dpdk_conf.has('RTE_NET_BOND')
361	test_deps += 'net_bond'
362	test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
363	driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
364	if dpdk_conf.has('RTE_NET_RING')
365		test_sources += 'test_link_bonding_mode4.c'
366		driver_test_names += 'link_bonding_mode4_autotest'
367	endif
368endif
369if dpdk_conf.has('RTE_NET_RING')
370	test_deps += 'net_ring'
371	test_sources += 'test_pmd_ring_perf.c'
372	test_sources += 'test_pmd_ring.c'
373	test_sources += 'test_event_eth_tx_adapter.c'
374	test_sources += 'test_bitratestats.c'
375	test_sources += 'test_latencystats.c'
376	test_sources += 'sample_packet_forward.c'
377	test_sources += 'test_pdump.c'
378	fast_tests += [['ring_pmd_autotest', true]]
379	perf_test_names += 'ring_pmd_perf_autotest'
380	fast_tests += [['event_eth_tx_adapter_autotest', false]]
381	fast_tests += [['bitratestats_autotest', true]]
382	fast_tests += [['latencystats_autotest', true]]
383	fast_tests += [['pdump_autotest', true]]
384endif
385
386if dpdk_conf.has('RTE_LIB_POWER')
387	test_deps += 'power'
388endif
389if dpdk_conf.has('RTE_LIB_KNI')
390	test_deps += 'kni'
391endif
392if dpdk_conf.has('RTE_LIB_PDUMP')
393	test_deps += 'pdump'
394endif
395
396if cc.has_argument('-Wno-format-truncation')
397    cflags += '-Wno-format-truncation'
398endif
399
400# specify -D_GNU_SOURCE unconditionally
401cflags += '-D_GNU_SOURCE'
402# Strict-aliasing rules are violated by uint8_t[] to context size casts.
403cflags += '-fno-strict-aliasing'
404
405# Enable using internal APIs in unit tests
406cflags += ['-DALLOW_INTERNAL_API']
407
408test_dep_objs = []
409if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
410	compress_test_dep = dependency('zlib', required: false)
411	if compress_test_dep.found()
412		test_dep_objs += compress_test_dep
413		test_sources += 'test_compressdev.c'
414		test_deps += 'compressdev'
415		fast_tests += [['compressdev_autotest', false]]
416	endif
417endif
418
419if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
420	driver_test_names += 'cryptodev_scheduler_autotest'
421	test_deps += 'crypto_scheduler'
422endif
423
424foreach d:test_deps
425	def_lib = get_option('default_library')
426	test_dep_objs += get_variable(def_lib + '_rte_' + d)
427endforeach
428test_dep_objs += cc.find_library('execinfo', required: false)
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