xref: /f-stack/dpdk/meson.build (revision 2d9fd380)
1d30ea906Sjfb8856606# SPDX-License-Identifier: BSD-3-Clause
24418919fSjohnjiang# Copyright(c) 2017-2019 Intel Corporation
3d30ea906Sjfb8856606
4d30ea906Sjfb8856606project('DPDK', 'C',
54418919fSjohnjiang	# Get version number from file.
64418919fSjohnjiang	# Fallback to "more" for Windows compatibility.
74418919fSjohnjiang	version: run_command(find_program('cat', 'more'),
84418919fSjohnjiang		files('VERSION')).stdout().strip(),
9d30ea906Sjfb8856606	license: 'BSD',
10d30ea906Sjfb8856606	default_options: ['buildtype=release', 'default_library=static'],
114418919fSjohnjiang	meson_version: '>= 0.47.1'
12d30ea906Sjfb8856606)
13d30ea906Sjfb8856606
14d30ea906Sjfb8856606# set up some global vars for compiler, platform, configuration, etc.
15d30ea906Sjfb8856606cc = meson.get_compiler('c')
16d30ea906Sjfb8856606dpdk_conf = configuration_data()
17d30ea906Sjfb8856606dpdk_libraries = []
18d30ea906Sjfb8856606dpdk_static_libraries = []
194418919fSjohnjiangdpdk_driver_classes = []
20d30ea906Sjfb8856606dpdk_drivers = []
21d30ea906Sjfb8856606dpdk_extra_ldflags = []
224418919fSjohnjiangdpdk_libs_disabled = []
234418919fSjohnjiangdpdk_drvs_disabled = []
244418919fSjohnjiangabi_version_file = files('ABI_VERSION')
25d30ea906Sjfb8856606
26*2d9fd380Sjfb8856606if host_machine.cpu_family().startswith('x86')
27*2d9fd380Sjfb8856606	arch_subdir = 'x86'
28*2d9fd380Sjfb8856606elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch')
29*2d9fd380Sjfb8856606	arch_subdir = 'arm'
30*2d9fd380Sjfb8856606elif host_machine.cpu_family().startswith('ppc')
31*2d9fd380Sjfb8856606	arch_subdir = 'ppc'
32*2d9fd380Sjfb8856606endif
33*2d9fd380Sjfb8856606
34d30ea906Sjfb8856606# configure the build, and make sure configs here and in config folder are
35d30ea906Sjfb8856606# able to be included in any file. We also store a global array of include dirs
36d30ea906Sjfb8856606# for passing to pmdinfogen scripts
374418919fSjohnjiangglobal_inc = include_directories('.', 'config',
38*2d9fd380Sjfb8856606	'lib/librte_eal/include',
39*2d9fd380Sjfb8856606	'lib/librte_eal/@0@/include'.format(host_machine.system()),
40*2d9fd380Sjfb8856606	'lib/librte_eal/@0@/include'.format(arch_subdir),
414418919fSjohnjiang)
42*2d9fd380Sjfb8856606
43*2d9fd380Sjfb8856606# do configuration and get tool paths
44*2d9fd380Sjfb8856606subdir('buildtools')
45d30ea906Sjfb8856606subdir('config')
46d30ea906Sjfb8856606
47d30ea906Sjfb8856606# build libs and drivers
48*2d9fd380Sjfb8856606subdir('buildtools/pmdinfogen')
494418919fSjohnjiangsubdir('lib')
50d30ea906Sjfb8856606subdir('drivers')
51d30ea906Sjfb8856606
52d30ea906Sjfb8856606# build binaries and installable tools
53d30ea906Sjfb8856606subdir('usertools')
54d30ea906Sjfb8856606subdir('app')
55d30ea906Sjfb8856606
56d30ea906Sjfb8856606# build docs
57d30ea906Sjfb8856606subdir('doc')
58d30ea906Sjfb8856606
594418919fSjohnjiang# build any examples explicitly requested - useful for developers - and
604418919fSjohnjiang# install any example code into the appropriate install path
61d30ea906Sjfb8856606subdir('examples')
620c6bd470Sfengbojianginstall_subdir('examples',
630c6bd470Sfengbojiang	install_dir: get_option('datadir') + '/dpdk',
640c6bd470Sfengbojiang	exclude_files: 'meson.build')
65d30ea906Sjfb8856606
66d30ea906Sjfb8856606# build kernel modules if enabled
67d30ea906Sjfb8856606if get_option('enable_kmods')
68d30ea906Sjfb8856606	subdir('kernel')
69d30ea906Sjfb8856606endif
70d30ea906Sjfb8856606
71d30ea906Sjfb8856606# write the build config
72d30ea906Sjfb8856606build_cfg = 'rte_build_config.h'
73d30ea906Sjfb8856606configure_file(output: build_cfg,
74d30ea906Sjfb8856606		configuration: dpdk_conf,
75d30ea906Sjfb8856606		install_dir: join_paths(get_option('includedir'),
76d30ea906Sjfb8856606				get_option('include_subdir_arch')))
77d30ea906Sjfb8856606
780c6bd470Sfengbojiang# build pkg-config files for dpdk
790c6bd470Sfengbojiangsubdir('buildtools/pkg-config')
80d30ea906Sjfb8856606
81d30ea906Sjfb8856606# final output, list all the libs and drivers to be built
82d30ea906Sjfb8856606# this does not affect any part of the build, for information only.
83d30ea906Sjfb8856606output_message = '\n=================\nLibraries Enabled\n=================\n'
84d30ea906Sjfb8856606output_message += '\nlibs:\n\t'
85d30ea906Sjfb8856606output_count = 0
86d30ea906Sjfb8856606foreach lib:enabled_libs
87d30ea906Sjfb8856606	output_message += lib + ', '
88d30ea906Sjfb8856606	output_count += 1
89d30ea906Sjfb8856606	if output_count == 8
90d30ea906Sjfb8856606		output_message += '\n\t'
91d30ea906Sjfb8856606		output_count = 0
92d30ea906Sjfb8856606	endif
93d30ea906Sjfb8856606endforeach
94d30ea906Sjfb8856606message(output_message + '\n')
95d30ea906Sjfb8856606
96d30ea906Sjfb8856606output_message = '\n===============\nDrivers Enabled\n===============\n'
974418919fSjohnjiangforeach class:dpdk_driver_classes
98d30ea906Sjfb8856606	class_drivers = get_variable(class + '_drivers')
99d30ea906Sjfb8856606	output_message += '\n' + class + ':\n\t'
100d30ea906Sjfb8856606	output_count = 0
101d30ea906Sjfb8856606	foreach drv:class_drivers
102d30ea906Sjfb8856606		output_message += drv + ', '
103d30ea906Sjfb8856606		output_count += 1
104d30ea906Sjfb8856606		if output_count == 8
105d30ea906Sjfb8856606			output_message += '\n\t'
106d30ea906Sjfb8856606			output_count = 0
107d30ea906Sjfb8856606		endif
108d30ea906Sjfb8856606	endforeach
109d30ea906Sjfb8856606endforeach
110d30ea906Sjfb8856606message(output_message + '\n')
1114418919fSjohnjiang
1124418919fSjohnjiangoutput_message = '\n=================\nContent Skipped\n=================\n'
1134418919fSjohnjiangoutput_message += '\nlibs:\n\t'
1144418919fSjohnjiangforeach lib:dpdk_libs_disabled
1154418919fSjohnjiang	reason = get_variable(lib.underscorify() + '_disable_reason')
1164418919fSjohnjiang	output_message += lib + ':\t' + reason + '\n\t'
1174418919fSjohnjiangendforeach
1184418919fSjohnjiangoutput_message += '\ndrivers:\n\t'
1194418919fSjohnjiangforeach drv:dpdk_drvs_disabled
1204418919fSjohnjiang	reason = get_variable(drv.underscorify() + '_disable_reason')
1214418919fSjohnjiang	output_message += drv + ':\t' + reason + '\n\t'
1224418919fSjohnjiangendforeach
1234418919fSjohnjiangmessage(output_message + '\n')
124