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