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