xref: /dpdk/examples/meson.build (revision bb9cd910)
1# SPDX-License-Identifier: BSD-3-Clause
2# Copyright(c) 2017-2019 Intel Corporation
3
4link_whole_libs = []
5if get_option('default_library') == 'static'
6    link_whole_libs = dpdk_static_libraries + dpdk_drivers
7endif
8
9# list of all example apps. Keep 1-3 per line, in alphabetical order.
10all_examples = [
11        'bbdev_app',
12        'bond',
13        'cmdline',
14        'distributor',
15        'dma',
16        'ethtool',
17        'eventdev_pipeline',
18        'fips_validation',
19        'flow_classify',
20        'flow_filtering',
21        'helloworld',
22        'ip_fragmentation',
23        'ip_pipeline',
24        'ip_reassembly',
25        'ipsec-secgw',
26        'ipv4_multicast',
27        'kni',
28        'l2fwd',
29        'l2fwd-cat',
30        'l2fwd-crypto',
31        'l2fwd-event',
32        'l2fwd-jobstats',
33        'l2fwd-keepalive',
34        'l3fwd',
35        'l3fwd-acl',
36        'l3fwd-graph',
37        'l3fwd-power',
38        'link_status_interrupt',
39        'multi_process/client_server_mp/mp_client',
40        'multi_process/client_server_mp/mp_server',
41        'multi_process/hotplug_mp',
42        'multi_process/simple_mp',
43        'multi_process/symmetric_mp',
44        'ntb',
45        'packet_ordering',
46        'performance-thread/l3fwd-thread',
47        'performance-thread/pthread_shim',
48        'pipeline',
49        'ptpclient',
50        'qos_meter',
51        'qos_sched',
52        'rxtx_callbacks',
53        'server_node_efd/node',
54        'server_node_efd/server',
55        'service_cores',
56        'skeleton',
57        'timer',
58        'vdpa',
59        'vhost',
60        'vhost_blk',
61        'vhost_crypto',
62        'vm_power_manager',
63        'vm_power_manager/guest_cli',
64        'vmdq',
65        'vmdq_dcb',
66]
67
68# on install, skip copying all meson.build files
69ex_file_excludes = ['meson.build']
70foreach ex:all_examples
71    ex_file_excludes += [ex + '/meson.build']
72endforeach
73
74if get_option('examples') == ''
75    subdir_done()
76endif
77
78if get_option('examples').to_lower() == 'all'
79    examples = all_examples
80    allow_skips = true # don't flag an error if we can't build an app
81else
82    examples = get_option('examples').split(',')
83    allow_skips = false # error out if we can't build a requested app
84endif
85default_cflags = machine_args
86if cc.has_argument('-Wno-format-truncation')
87    default_cflags += '-Wno-format-truncation'
88endif
89default_ldflags = dpdk_extra_ldflags
90if get_option('default_library') == 'static' and not is_windows
91    default_ldflags += ['-Wl,--export-dynamic']
92endif
93
94foreach example: examples
95    name = example.split('/')[-1]
96    build = true
97    sources = []
98    allow_experimental_apis = false
99    cflags = default_cflags
100    ldflags = default_ldflags
101
102    ext_deps = []
103    includes = [include_directories(example)]
104    deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
105    subdir(example)
106
107    if build
108        dep_objs = ext_deps
109        foreach d:deps
110            var_name = get_option('default_library') + '_rte_' + d
111            if not is_variable(var_name)
112                build = false
113                message('Missing dependency "@0@" for example "@1@"'.format(d, name))
114                break
115            endif
116            dep_objs += [get_variable(var_name)]
117        endforeach
118    endif
119
120    if not build
121        if not allow_skips
122            error('Cannot build requested example "' + name + '"')
123        endif
124        message('Skipping example "' + name + '"')
125        continue
126    endif
127
128    if allow_experimental_apis
129        cflags += '-DALLOW_EXPERIMENTAL_API'
130    endif
131    executable('dpdk-' + name, sources,
132            include_directories: includes,
133            link_whole: link_whole_libs,
134            link_args: ldflags,
135            c_args: cflags,
136            dependencies: dep_objs)
137endforeach
138