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