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