xref: /dpdk/app/test/meson.build (revision 1c3ffb95)
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        ['ticketlock_autotest', true],
250        ['timer_autotest', false],
251        ['user_delay_us', true],
252        ['version_autotest', true],
253        ['crc_autotest', true],
254        ['delay_us_sleep_autotest', true],
255        ['distributor_autotest', false],
256        ['eventdev_common_autotest', true],
257        ['fbarray_autotest', true],
258        ['hash_readwrite_func_autotest', false],
259        ['ipsec_autotest', true],
260        ['kni_autotest', false],
261        ['kvargs_autotest', true],
262        ['member_autotest', true],
263        ['metrics_autotest', true],
264        ['power_cpufreq_autotest', false],
265        ['power_autotest', true],
266        ['power_kvm_vm_autotest', false],
267        ['reorder_autotest', true],
268        ['service_autotest', true],
269        ['thash_autotest', true],
270        ['trace_autotest', true],
271]
272
273perf_test_names = [
274        'ring_perf_autotest',
275        'mempool_perf_autotest',
276        'memcpy_perf_autotest',
277        'hash_perf_autotest',
278        'timer_perf_autotest',
279        'reciprocal_division',
280        'reciprocal_division_perf',
281        'lpm_perf_autotest',
282        'rib_slow_autotest',
283        'fib_slow_autotest',
284        'fib_perf_autotest',
285        'red_all',
286        'barrier_autotest',
287        'hash_multiwriter_autotest',
288        'timer_racecond_autotest',
289        'efd_autotest',
290        'hash_functions_autotest',
291        'member_perf_autotest',
292        'efd_perf_autotest',
293        'lpm6_perf_autotest',
294        'rib6_slow_autotest',
295        'fib6_slow_autotest',
296        'fib6_perf_autotest',
297        'rcu_qsbr_perf_autotest',
298        'red_perf',
299        'distributor_perf_autotest',
300        'pmd_perf_autotest',
301        'stack_perf_autotest',
302        'stack_lf_perf_autotest',
303        'rand_perf_autotest',
304        'hash_readwrite_perf_autotest',
305        'hash_readwrite_lf_perf_autotest',
306        'trace_perf_autotest',
307	'ipsec_perf_autotest',
308]
309
310driver_test_names = [
311        'cryptodev_aesni_mb_autotest',
312        'cryptodev_aesni_gcm_autotest',
313        'cryptodev_dpaa_sec_autotest',
314        'cryptodev_dpaa2_sec_autotest',
315        'cryptodev_null_autotest',
316        'cryptodev_octeontx2_autotest',
317        'cryptodev_openssl_autotest',
318        'cryptodev_openssl_asym_autotest',
319        'cryptodev_qat_autotest',
320        'cryptodev_sw_armv8_autotest',
321        'cryptodev_sw_kasumi_autotest',
322        'cryptodev_sw_mvsam_autotest',
323        'cryptodev_sw_snow3g_autotest',
324        'cryptodev_sw_zuc_autotest',
325        'eventdev_selftest_octeontx',
326        'eventdev_selftest_sw',
327        'rawdev_autotest',
328]
329
330dump_test_names = [
331        'dump_struct_sizes',
332        'dump_mempool',
333        'dump_malloc_stats',
334        'dump_devargs',
335        'dump_log_types',
336        'dump_ring',
337        'dump_physmem',
338        'dump_memzone',
339]
340
341# The following linkages are an exception to allow running the
342# unit tests without requiring that the developer install the
343# DPDK libraries.  Explicit linkage of drivers (plugin libraries)
344# in applications should not be used.
345if dpdk_conf.has('RTE_MEMPOOL_RING')
346	test_deps += 'mempool_ring'
347endif
348if dpdk_conf.has('RTE_MEMPOOL_STACK')
349	test_deps += 'mempool_stack'
350endif
351if dpdk_conf.has('RTE_EVENT_SKELETON')
352	test_deps += 'event_skeleton'
353endif
354if dpdk_conf.has('RTE_LIB_TELEMETRY')
355	test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
356	fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
357endif
358
359# The following linkages of drivers are required because
360# they are used via a driver-specific API.
361if dpdk_conf.has('RTE_NET_BOND')
362	test_deps += 'net_bond'
363	test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
364	driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
365	if dpdk_conf.has('RTE_NET_RING')
366		test_sources += 'test_link_bonding_mode4.c'
367		driver_test_names += 'link_bonding_mode4_autotest'
368	endif
369endif
370if dpdk_conf.has('RTE_NET_RING')
371	test_deps += 'net_ring'
372	test_sources += 'test_pmd_ring_perf.c'
373	test_sources += 'test_pmd_ring.c'
374	test_sources += 'test_event_eth_tx_adapter.c'
375	test_sources += 'test_bitratestats.c'
376	test_sources += 'test_latencystats.c'
377	test_sources += 'sample_packet_forward.c'
378	test_sources += 'test_pdump.c'
379	fast_tests += [['ring_pmd_autotest', true]]
380	perf_test_names += 'ring_pmd_perf_autotest'
381	fast_tests += [['event_eth_tx_adapter_autotest', false]]
382	fast_tests += [['bitratestats_autotest', true]]
383	fast_tests += [['latencystats_autotest', true]]
384	fast_tests += [['pdump_autotest', true]]
385endif
386
387if dpdk_conf.has('RTE_LIB_POWER')
388	test_deps += 'power'
389endif
390if dpdk_conf.has('RTE_LIB_KNI')
391	test_deps += 'kni'
392endif
393if dpdk_conf.has('RTE_LIB_PDUMP')
394	test_deps += 'pdump'
395endif
396
397if cc.has_argument('-Wno-format-truncation')
398    cflags += '-Wno-format-truncation'
399endif
400
401# specify -D_GNU_SOURCE unconditionally
402cflags += '-D_GNU_SOURCE'
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)
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
429test_dep_objs += cc.find_library('execinfo', required: false)
430
431link_libs = []
432if get_option('default_library') == 'static'
433	link_libs = dpdk_static_libraries + dpdk_drivers
434endif
435
436dpdk_test = executable('dpdk-test',
437	test_sources,
438	link_whole: link_libs,
439	dependencies: test_dep_objs,
440	c_args: cflags,
441	install_rpath: join_paths(get_option('prefix'),
442			 driver_install_path),
443	install: true)
444
445has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
446message('hugepage availability: @0@'.format(has_hugepage))
447
448# some perf tests (eg: memcpy perf autotest)take very long
449# to complete, so timeout to 10 minutes
450timeout_seconds = 600
451timeout_seconds_fast = 10
452
453get_coremask = find_program('get-coremask.sh')
454num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
455
456default_test_args = [num_cores_arg]
457
458foreach arg : fast_tests
459	test_args = default_test_args
460	run_test = true
461	if not has_hugepage
462		if arg[1]
463			test_args += ['--no-huge', '-m', '2048']
464		else
465			run_test = false
466		endif
467	endif
468
469	if (get_option('default_library') == 'shared' and
470		arg[0] == 'event_eth_tx_adapter_autotest')
471		foreach drv:dpdk_drivers
472			test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
473		endforeach
474	endif
475	if is_linux
476		test_args += ['--file-prefix=@0@'.format(arg[0])]
477	endif
478
479	if run_test
480		test(arg[0], dpdk_test,
481			env : ['DPDK_TEST=' + arg[0]],
482			args : test_args,
483			timeout : timeout_seconds_fast,
484			is_parallel : false,
485			suite : 'fast-tests')
486	endif
487endforeach
488
489foreach arg : perf_test_names
490	test(arg, dpdk_test,
491	env : ['DPDK_TEST=' + arg],
492	args : default_test_args,
493	timeout : timeout_seconds,
494	is_parallel : false,
495	suite : 'perf-tests')
496endforeach
497
498foreach arg : driver_test_names
499	test(arg, dpdk_test,
500		env : ['DPDK_TEST=' + arg],
501		args : default_test_args,
502		timeout : timeout_seconds,
503		is_parallel : false,
504		suite : 'driver-tests')
505endforeach
506
507foreach arg : dump_test_names
508	test(arg, dpdk_test,
509		env : ['DPDK_TEST=' + arg],
510		args : default_test_args,
511		timeout : timeout_seconds,
512		is_parallel : false,
513		suite : 'debug-tests')
514endforeach
515