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