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