summaryrefslogtreecommitdiffstats
path: root/src/spdk/dpdk/meson.build
blob: b72b03a9b7f454581695fa978f179e5010ea916a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017-2019 Intel Corporation

project('DPDK', 'C',
	# Get version number from file.
	# Fallback to "more" for Windows compatibility.
	version: run_command(find_program('cat', 'more'),
		files('VERSION')).stdout().strip(),
	license: 'BSD',
	default_options: ['buildtype=release', 'default_library=static'],
	meson_version: '>= 0.47.1'
)

# set up some global vars for compiler, platform, configuration, etc.
cc = meson.get_compiler('c')
dpdk_conf = configuration_data()
dpdk_libraries = []
dpdk_static_libraries = []
dpdk_graph_nodes = []
dpdk_driver_classes = []
dpdk_drivers = []
dpdk_extra_ldflags = []
dpdk_app_link_libraries = []
dpdk_libs_disabled = []
dpdk_drvs_disabled = []
abi_version_file = files('ABI_VERSION')

if host_machine.cpu_family().startswith('x86')
	arch_subdir = 'x86'
elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch')
	arch_subdir = 'arm'
elif host_machine.cpu_family().startswith('ppc')
	arch_subdir = 'ppc'
endif

# configure the build, and make sure configs here and in config folder are
# able to be included in any file. We also store a global array of include dirs
# for passing to pmdinfogen scripts
global_inc = include_directories('.', 'config',
	'lib/librte_eal/include',
	'lib/librte_eal/@0@/include'.format(host_machine.system()),
	'lib/librte_eal/@0@/include'.format(arch_subdir),
)
subdir('config')

# build libs and drivers
subdir('buildtools')
subdir('lib')
subdir('drivers')

# build binaries and installable tools
subdir('usertools')
#subdir('app')

# build docs
subdir('doc')

# build any examples explicitly requested - useful for developers - and
# install any example code into the appropriate install path
subdir('examples')

# build kernel modules if enabled
if get_option('enable_kmods')
	subdir('kernel')
endif

# write the build config
build_cfg = 'rte_build_config.h'
configure_file(output: build_cfg,
		configuration: dpdk_conf,
		install_dir: join_paths(get_option('includedir'),
				get_option('include_subdir_arch')))

# for static builds, include the drivers as libs and we need to "whole-archive"
# them.
dpdk_drivers = ['-Wl,--whole-archive'] + dpdk_drivers + ['-Wl,--no-whole-archive']

pkg = import('pkgconfig')
pkg_extra_cflags = ['-include', 'rte_config.h'] + machine_args
if is_freebsd
	pkg_extra_cflags += ['-D__BSD_VISIBLE']
endif
pkg.generate(name: meson.project_name(),
	filebase: 'lib' + meson.project_name().to_lower(),
	version: meson.project_version(),
	libraries: dpdk_libraries,
	libraries_private: dpdk_drivers + dpdk_static_libraries +
			['-Wl,-Bdynamic'] + dpdk_extra_ldflags,
	requires: libbsd, # apps using rte_string_fns.h may need this if enabled
	                  # if libbsd is not enabled, then this is blank
	description: '''The Data Plane Development Kit (DPDK).
Note that CFLAGS might contain an -march flag higher than typical baseline.
This is required for a number of static inline functions in the public headers.''',
	subdirs: [get_option('include_subdir_arch'), '.'],
	extra_cflags: pkg_extra_cflags
)

# final output, list all the libs and drivers to be built
# this does not affect any part of the build, for information only.
output_message = '\n=================\nLibraries Enabled\n=================\n'
output_message += '\nlibs:\n\t'
output_count = 0
foreach lib:enabled_libs
	output_message += lib + ', '
	output_count += 1
	if output_count == 8
		output_message += '\n\t'
		output_count = 0
	endif
endforeach
message(output_message + '\n')

output_message = '\n===============\nDrivers Enabled\n===============\n'
foreach class:dpdk_driver_classes
	class_drivers = get_variable(class + '_drivers')
	output_message += '\n' + class + ':\n\t'
	output_count = 0
	foreach drv:class_drivers
		output_message += drv + ', '
		output_count += 1
		if output_count == 8
			output_message += '\n\t'
			output_count = 0
		endif
	endforeach
endforeach
message(output_message + '\n')

output_message = '\n=================\nContent Skipped\n=================\n'
output_message += '\nlibs:\n\t'
foreach lib:dpdk_libs_disabled
	reason = get_variable(lib.underscorify() + '_disable_reason')
	output_message += lib + ':\t' + reason + '\n\t'
endforeach
output_message += '\ndrivers:\n\t'
foreach drv:dpdk_drvs_disabled
	reason = get_variable(drv.underscorify() + '_disable_reason')
	output_message += drv + ':\t' + reason + '\n\t'
endforeach
message(output_message + '\n')