xref: /dpdk/app/test/meson.build (revision cfe4ca10)
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
399# Enable using internal APIs in unit tests
400cflags += ['-DALLOW_INTERNAL_API']
401
402test_dep_objs = []
403if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
404	compress_test_dep = dependency('zlib', required: false)
405	if compress_test_dep.found()
406		test_dep_objs += compress_test_dep
407		test_sources += 'test_compressdev.c'
408		test_deps += 'compressdev'
409		fast_tests += [['compressdev_autotest', false]]
410	endif
411endif
412
413if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
414	driver_test_names += 'cryptodev_scheduler_autotest'
415endif
416
417foreach d:test_deps
418	def_lib = get_option('default_library')
419	test_dep_objs += get_variable(def_lib + '_rte_' + d)
420endforeach
421test_dep_objs += cc.find_library('execinfo', required: false)
422
423link_libs = []
424if get_option('default_library') == 'static'
425	link_libs = dpdk_static_libraries + dpdk_drivers
426endif
427
428dpdk_test = executable('dpdk-test',
429	test_sources,
430	link_whole: link_libs,
431	dependencies: test_dep_objs,
432	c_args: cflags,
433	install_rpath: join_paths(get_option('prefix'),
434			 driver_install_path),
435	install: true)
436
437has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
438message('hugepage availability: @0@'.format(has_hugepage))
439
440# some perf tests (eg: memcpy perf autotest)take very long
441# to complete, so timeout to 10 minutes
442timeout_seconds = 600
443timeout_seconds_fast = 10
444
445get_coremask = find_program('get-coremask.sh')
446num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
447
448default_test_args = [num_cores_arg]
449
450foreach arg : fast_tests
451	test_args = default_test_args
452	run_test = true
453	if not has_hugepage
454		if arg[1]
455			test_args += ['--no-huge', '-m', '2048']
456		else
457			run_test = false
458		endif
459	endif
460
461	if (get_option('default_library') == 'shared' and
462		arg[0] == 'event_eth_tx_adapter_autotest')
463		foreach drv:dpdk_drivers
464			test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
465		endforeach
466	endif
467	if is_linux
468		test_args += ['--file-prefix=@0@'.format(arg[0])]
469	endif
470
471	if run_test
472		test(arg[0], dpdk_test,
473			env : ['DPDK_TEST=' + arg[0]],
474			args : test_args,
475			timeout : timeout_seconds_fast,
476			is_parallel : false,
477			suite : 'fast-tests')
478	endif
479endforeach
480
481foreach arg : perf_test_names
482	test(arg, dpdk_test,
483	env : ['DPDK_TEST=' + arg],
484	args : default_test_args,
485	timeout : timeout_seconds,
486	is_parallel : false,
487	suite : 'perf-tests')
488endforeach
489
490foreach arg : driver_test_names
491	test(arg, dpdk_test,
492		env : ['DPDK_TEST=' + arg],
493		args : default_test_args,
494		timeout : timeout_seconds,
495		is_parallel : false,
496		suite : 'driver-tests')
497endforeach
498
499foreach arg : dump_test_names
500	test(arg, dpdk_test,
501		env : ['DPDK_TEST=' + arg],
502		args : default_test_args,
503		timeout : timeout_seconds,
504		is_parallel : false,
505		suite : 'debug-tests')
506endforeach
507