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