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