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