xref: /dpdk/app/meson.build (revision be22019a58c484c0b43ec32de8cd4e58a91aa53f)
1# SPDX-License-Identifier: BSD-3-Clause
2# Copyright(c) 2017-2019 Intel Corporation
3
4if is_ms_compiler
5    subdir_done()
6endif
7
8disable_apps = ',' + get_option('disable_apps')
9disable_apps = run_command(list_dir_globs, disable_apps, check: true).stdout().split()
10
11enable_apps = ',' + get_option('enable_apps')
12enable_apps = run_command(list_dir_globs, enable_apps, check: true).stdout().split()
13require_apps = true
14if enable_apps.length() == 0
15    require_apps = false
16    enable_apps = run_command(list_dir_globs, '*', check: true).stdout().split()
17endif
18
19apps = [
20        'dumpcap',
21        'graph',
22        'pdump',
23        'proc-info',
24        'test-acl',
25        'test-bbdev',
26        'test-cmdline',
27        'test-compress-perf',
28        'test-crypto-perf',
29        'test-dma-perf',
30        'test-eventdev',
31        'test-fib',
32        'test-flow-perf',
33        'test-gpudev',
34        'test-mldev',
35        'test-pipeline',
36        'test-pmd',
37        'test-regex',
38        'test-sad',
39        'test-security-perf',
40]
41
42if get_option('tests')
43# build the auto test app if enabled.
44    apps += 'test'
45endif
46
47default_cflags = machine_args + ['-DALLOW_EXPERIMENTAL_API']
48default_ldflags = []
49if get_option('default_library') == 'static' and not is_windows
50    default_ldflags += ['-Wl,--export-dynamic']
51endif
52
53foreach app:apps
54    name = app
55    build = true
56    reason = '<unknown reason>' # set if build == false to explain
57    sources = []
58    resources = []
59    includes = []
60    cflags = default_cflags
61    ldflags = default_ldflags
62    objs = [] # other object files to link against, used e.g. for
63              # instruction-set optimized versions of code
64
65    # use "deps" for internal DPDK dependencies, and "ext_deps" for
66    # external package/library requirements
67    ext_deps = []
68    deps = []
69
70    if not enable_apps.contains(app)
71        build = false
72        reason = 'not in enabled apps build config'
73    elif disable_apps.contains(app)
74        build = false
75        reason = 'explicitly disabled via build config'
76    endif
77
78    if build
79        subdir(name)
80        if not build and require_apps
81            error('Cannot build explicitly requested app "@0@".\n'.format(name)
82                  + '\tReason: ' + reason)
83        endif
84    endif
85
86    if build
87        dep_objs = []
88        foreach d:deps
89            var_name = get_option('default_library') + '_rte_' + d
90            if not is_variable(var_name)
91                build = false
92                reason = 'missing internal dependency, "@0@"'.format(d)
93                message('Missing dependency "@0@" for app "@1@"'.format(d, name))
94                if require_apps
95                    error('Cannot build explicitly requested app "@0@".\n'.format(name)
96                          + '\tPlease add missing dependency "@0@" to "enable_libs" option'.format(d))
97                endif
98                break
99            endif
100            dep_objs += [get_variable(var_name)]
101        endforeach
102    endif
103
104    if not build
105        if reason != ''
106            dpdk_apps_disabled += app
107            set_variable('app_' + app.underscorify() + '_disable_reason', reason)
108        endif
109        continue
110    endif
111
112    dpdk_apps_enabled += app
113    link_libs = []
114    if get_option('default_library') == 'static'
115        link_libs = dpdk_static_libraries + dpdk_drivers
116    endif
117
118    exec = executable('dpdk-' + name,
119            [ sources, resources ],
120            c_args: cflags,
121            link_args: ldflags,
122            link_whole: link_libs,
123            dependencies: ext_deps + dep_objs,
124            include_directories: includes,
125            install_rpath: join_paths(get_option('prefix'), driver_install_path),
126            install: true)
127    if name == 'test'
128        dpdk_test = exec
129        autotest_sources = sources
130        subdir('test/suites')  # define the pre-canned test suites
131    endif
132endforeach
133