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