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