8847d5a1eab7bfc006f6a9b043a59e989c304529
[dpdk.git] / app / test / meson.build
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2017 Intel Corporation
3
4 if not get_option('tests')
5         subdir_done()
6 endif
7
8 test_sources = files('commands.c',
9         'packet_burst_generator.c',
10         'sample_packet_forward.c',
11         'test.c',
12         'test_acl.c',
13         'test_alarm.c',
14         'test_atomic.c',
15         'test_barrier.c',
16         'test_bitratestats.c',
17         'test_bpf.c',
18         'test_byteorder.c',
19         'test_cmdline.c',
20         'test_cmdline_cirbuf.c',
21         'test_cmdline_etheraddr.c',
22         'test_cmdline_ipaddr.c',
23         'test_cmdline_lib.c',
24         'test_cmdline_num.c',
25         'test_cmdline_portlist.c',
26         'test_cmdline_string.c',
27         'test_common.c',
28         'test_cpuflags.c',
29         'test_crc.c',
30         'test_cryptodev.c',
31         'test_cryptodev_asym.c',
32         'test_cryptodev_blockcipher.c',
33         'test_cryptodev_security_pdcp.c',
34         'test_cycles.c',
35         'test_debug.c',
36         'test_distributor.c',
37         'test_distributor_perf.c',
38         'test_eal_flags.c',
39         'test_eal_fs.c',
40         'test_efd.c',
41         'test_efd_perf.c',
42         'test_errno.c',
43         'test_event_crypto_adapter.c',
44         'test_event_eth_rx_adapter.c',
45         'test_event_ring.c',
46         'test_event_eth_tx_adapter.c',
47         'test_event_timer_adapter.c',
48         'test_eventdev.c',
49         'test_external_mem.c',
50         'test_fbarray.c',
51         'test_fib.c',
52         'test_fib_perf.c',
53         'test_fib6.c',
54         'test_fib6_perf.c',
55         'test_func_reentrancy.c',
56         'test_flow_classify.c',
57         'test_hash.c',
58         'test_hash_functions.c',
59         'test_hash_multiwriter.c',
60         'test_hash_readwrite.c',
61         'test_hash_perf.c',
62         'test_hash_readwrite_lf.c',
63         'test_interrupts.c',
64         'test_ipsec.c',
65         'test_ipsec_sad.c',
66         'test_kni.c',
67         'test_kvargs.c',
68         'test_latencystats.c',
69         'test_link_bonding.c',
70         'test_link_bonding_mode4.c',
71         'test_link_bonding_rssconf.c',
72         'test_logs.c',
73         'test_lpm.c',
74         'test_lpm6.c',
75         'test_lpm6_perf.c',
76         'test_lpm_perf.c',
77         'test_malloc.c',
78         'test_mbuf.c',
79         'test_member.c',
80         'test_member_perf.c',
81         'test_memcpy.c',
82         'test_memcpy_perf.c',
83         'test_memory.c',
84         'test_mempool.c',
85         'test_mempool_perf.c',
86         'test_memzone.c',
87         'test_meter.c',
88         'test_metrics.c',
89         'test_mcslock.c',
90         'test_mp_secondary.c',
91         'test_pdump.c',
92         'test_per_lcore.c',
93         'test_pmd_perf.c',
94         'test_pmd_ring.c',
95         'test_pmd_ring_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_perf.c',
112         'test_rwlock.c',
113         'test_sched.c',
114         'test_service_cores.c',
115         'test_spinlock.c',
116         'test_stack.c',
117         'test_stack_perf.c',
118         'test_string_fns.c',
119         'test_table.c',
120         'test_table_acl.c',
121         'test_table_combined.c',
122         'test_table_pipeline.c',
123         'test_table_ports.c',
124         'test_table_tables.c',
125         'test_tailq.c',
126         'test_thash.c',
127         'test_timer.c',
128         'test_timer_perf.c',
129         'test_timer_racecond.c',
130         'test_timer_secondary.c',
131         'test_ticketlock.c',
132         'test_version.c',
133         'virtual_pmd.c'
134 )
135
136 test_deps = ['acl',
137         'bitratestats',
138         'bpf',
139         'cfgfile',
140         'cmdline',
141         'cryptodev',
142         'distributor',
143         'efd',
144         'ethdev',
145         'eventdev',
146         'fib',
147         'flow_classify',
148         'hash',
149         'ipsec',
150         'latencystats',
151         'lpm',
152         'member',
153         'metrics',
154         'pipeline',
155         'port',
156         'rawdev',
157         'rcu',
158         'reorder',
159         'rib',
160         'ring',
161         'stack',
162         'timer'
163 ]
164
165 fast_test_names = [
166         'acl_autotest',
167         'alarm_autotest',
168         'atomic_autotest',
169         'byteorder_autotest',
170         'cmdline_autotest',
171         'common_autotest',
172         'cpuflags_autotest',
173         'cycles_autotest',
174         'debug_autotest',
175         'eal_flags_c_opt_autotest',
176         'eal_flags_master_opt_autotest',
177         'eal_flags_n_opt_autotest',
178         'eal_flags_hpet_autotest',
179         'eal_flags_no_huge_autotest',
180         'eal_flags_w_opt_autotest',
181         'eal_flags_b_opt_autotest',
182         'eal_flags_vdev_opt_autotest',
183         'eal_flags_r_opt_autotest',
184         'eal_flags_mem_autotest',
185         'eal_flags_file_prefix_autotest',
186         'eal_flags_misc_autotest',
187         'eal_fs_autotest',
188         'errno_autotest',
189         'event_ring_autotest',
190         'fib_autotest',
191         'fib6_autotest',
192         'func_reentrancy_autotest',
193         'flow_classify_autotest',
194         'hash_autotest',
195         'interrupt_autotest',
196         'logs_autotest',
197         'lpm_autotest',
198         'lpm6_autotest',
199         'malloc_autotest',
200         'mbuf_autotest',
201         'mcslock_autotest',
202         'memcpy_autotest',
203         'memory_autotest',
204         'mempool_autotest',
205         'memzone_autotest',
206         'meter_autotest',
207         'multiprocess_autotest',
208         'per_lcore_autotest',
209         'prefetch_autotest',
210         'rcu_qsbr_autotest',
211         'red_autotest',
212         'rib_autotest',
213         'rib6_autotest',
214         'ring_autotest',
215         'ring_pmd_autotest',
216         'rwlock_test1_autotest',
217         'rwlock_rda_autotest',
218         'rwlock_rds_wrm_autotest',
219         'rwlock_rde_wro_autotest',
220         'sched_autotest',
221         'spinlock_autotest',
222         'stack_autotest',
223         'stack_lf_autotest',
224         'string_autotest',
225         'table_autotest',
226         'tailq_autotest',
227         'timer_autotest',
228         'user_delay_us',
229         'version_autotest',
230         'bitratestats_autotest',
231         'crc_autotest',
232         'delay_us_sleep_autotest',
233         'distributor_autotest',
234         'eventdev_common_autotest',
235         'fbarray_autotest',
236         'hash_readwrite_autotest',
237         'hash_readwrite_lf_autotest',
238         'ipsec_autotest',
239         'kni_autotest',
240         'kvargs_autotest',
241         'latencystats_autotest',
242         'member_autotest',
243         'metrics_autotest',
244         'pdump_autotest',
245         'power_cpufreq_autotest',
246         'power_autotest',
247         'power_kvm_vm_autotest',
248         'reorder_autotest',
249         'service_autotest',
250         'thash_autotest',
251 ]
252
253 perf_test_names = [
254         'ring_perf_autotest',
255         'mempool_perf_autotest',
256         'memcpy_perf_autotest',
257         'hash_perf_autotest',
258         'timer_perf_autotest',
259         'reciprocal_division',
260         'reciprocal_division_perf',
261         'lpm_perf_autotest',
262         'rib_slow_autotest',
263         'fib_slow_autotest',
264         'fib_perf_autotest',
265         'red_all',
266         'barrier_autotest',
267         'hash_multiwriter_autotest',
268         'timer_racecond_autotest',
269         'efd_autotest',
270         'hash_functions_autotest',
271         'member_perf_autotest',
272         'efd_perf_autotest',
273         'lpm6_perf_autotest',
274         'fib6_slow_autotest',
275         'fib6_perf_autotest',
276         'rcu_qsbr_perf_autotest',
277         'red_perf',
278         'distributor_perf_autotest',
279         'ring_pmd_perf_autotest',
280         'pmd_perf_autotest',
281         'stack_perf_autotest',
282         'stack_lf_perf_autotest',
283         'rand_perf_autotest',
284 ]
285
286 driver_test_names = [
287         'cryptodev_aesni_mb_autotest',
288         'cryptodev_aesni_gcm_autotest',
289         'cryptodev_dpaa_sec_autotest',
290         'cryptodev_dpaa2_sec_autotest',
291         'cryptodev_null_autotest',
292         'cryptodev_octeontx2_autotest',
293         'cryptodev_openssl_autotest',
294         'cryptodev_openssl_asym_autotest',
295         'cryptodev_qat_autotest',
296         'cryptodev_sw_armv8_autotest',
297         'cryptodev_sw_kasumi_autotest',
298         'cryptodev_sw_mvsam_autotest',
299         'cryptodev_sw_snow3g_autotest',
300         'cryptodev_sw_zuc_autotest',
301         'eventdev_selftest_octeontx',
302         'eventdev_selftest_sw',
303         'link_bonding_autotest',
304         'link_bonding_mode4_autotest',
305         'link_bonding_rssconf_autotest',
306         'rawdev_autotest',
307 ]
308
309 dump_test_names = [
310         'dump_struct_sizes',
311         'dump_mempool',
312         'dump_malloc_stats',
313         'dump_devargs',
314         'dump_log_types',
315         'dump_ring',
316         'dump_physmem',
317         'dump_memzone',
318 ]
319
320 # The following linkages are an exception to allow running the
321 # unit tests without requiring that the developer install the
322 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
323 # in applications should not be used.
324 if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
325         test_deps += 'mempool_ring'
326 endif
327 if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
328         test_deps += 'mempool_stack'
329 endif
330 if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
331         test_deps += 'pmd_skeleton_event'
332 endif
333
334 # The following linkages of drivers are required because
335 # they are used via a driver-specific API.
336 if dpdk_conf.has('RTE_LIBRTE_BOND_PMD')
337         test_deps += 'pmd_bond'
338 endif
339 if dpdk_conf.has('RTE_LIBRTE_RING_PMD')
340         test_deps += 'pmd_ring'
341 endif
342
343 if dpdk_conf.has('RTE_LIBRTE_POWER')
344         test_deps += 'power'
345 endif
346 if dpdk_conf.has('RTE_LIBRTE_KNI')
347         test_deps += 'kni'
348 endif
349 if dpdk_conf.has('RTE_LIBRTE_PDUMP')
350         test_deps += 'pdump'
351 endif
352
353 cflags = machine_args
354 if cc.has_argument('-Wno-format-truncation')
355     cflags += '-Wno-format-truncation'
356 endif
357
358 # specify -D_GNU_SOURCE unconditionally
359 cflags += '-D_GNU_SOURCE'
360
361 test_dep_objs = []
362 if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
363         compress_test_dep = dependency('zlib', required: false)
364         if compress_test_dep.found()
365                 test_dep_objs += compress_test_dep
366                 test_sources += 'test_compressdev.c'
367                 test_deps += 'compressdev'
368                 fast_test_names += 'compressdev_autotest'
369         endif
370 endif
371
372 if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
373         driver_test_names += 'cryptodev_scheduler_autotest'
374 endif
375
376 foreach d:test_deps
377         def_lib = get_option('default_library')
378         test_dep_objs += get_variable(def_lib + '_rte_' + d)
379 endforeach
380 test_dep_objs += cc.find_library('execinfo', required: false)
381
382 link_libs = []
383 if get_option('default_library') == 'static'
384         link_libs = dpdk_drivers
385 endif
386
387 dpdk_test = executable('dpdk-test',
388         test_sources,
389         link_whole: link_libs,
390         dependencies: test_dep_objs,
391         c_args: [cflags, '-DALLOW_EXPERIMENTAL_API'],
392         install_rpath: driver_install_path,
393         install: true)
394
395 # some perf tests (eg: memcpy perf autotest)take very long
396 # to complete, so timeout to 10 minutes
397 timeout_seconds = 600
398 timeout_seconds_fast = 10
399
400 # Retrieve the number of CPU cores, defaulting to 4.
401 num_cores = '0-3'
402 if host_machine.system() == 'linux'
403         num_cores = run_command('cat',
404                                 '/sys/devices/system/cpu/present'
405                                ).stdout().strip()
406 elif host_machine.system() == 'freebsd'
407         snum_cores = run_command('/sbin/sysctl', '-n',
408                                  'hw.ncpu').stdout().strip()
409         inum_cores = snum_cores.to_int() - 1
410         num_cores = '0-@0@'.format(inum_cores)
411 endif
412
413 num_cores_arg = '-l ' + num_cores
414
415 test_args = [num_cores_arg]
416 foreach arg : fast_test_names
417         if host_machine.system() == 'linux'
418                 test(arg, dpdk_test,
419                           env : ['DPDK_TEST=' + arg],
420                           args : test_args +
421                                  ['--file-prefix=@0@'.format(arg)],
422                 timeout : timeout_seconds_fast,
423                 is_parallel : false,
424                 suite : 'fast-tests')
425         else
426                 test(arg, dpdk_test,
427                         env : ['DPDK_TEST=' + arg],
428                         args : test_args,
429                 timeout : timeout_seconds_fast,
430                 is_parallel : false,
431                 suite : 'fast-tests')
432         endif
433 endforeach
434
435 foreach arg : perf_test_names
436         test(arg, dpdk_test,
437         env : ['DPDK_TEST=' + arg],
438         args : test_args,
439         timeout : timeout_seconds,
440         is_parallel : false,
441         suite : 'perf-tests')
442 endforeach
443
444 foreach arg : driver_test_names
445         test(arg, dpdk_test,
446                 env : ['DPDK_TEST=' + arg],
447                 args : test_args,
448                 timeout : timeout_seconds,
449                 is_parallel : false,
450                 suite : 'driver-tests')
451 endforeach
452
453 foreach arg : dump_test_names
454         test(arg, dpdk_test,
455                 env : ['DPDK_TEST=' + arg],
456                 args : test_args,
457                 timeout : timeout_seconds,
458                 is_parallel : false,
459                 suite : 'debug-tests')
460 endforeach
461