68b1f1cda5
Rather than checking the binutils version number, which can lead to unnecessary disabling of AVX512 if fixes have been backported to distro versions, we can instead check the output of "as" from binutils to see if it is correct. The check in the script uses the minimal assembly reproduction code posted to the public bug tracker for gcc/binutils for those issues [1]. If the binutils bug is present, the instruction parameters - specifically the displacement parameter - will be different in the disassembled output compared to the input. Therefore the check involves assembling a single instruction and disassembling it again, checking that the two match. [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90028 Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Tested-by: Harry van Haaren <harry.van.haaren@intel.com>
121 lines
3.4 KiB
Meson
121 lines
3.4 KiB
Meson
# 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_driver_classes = []
|
|
dpdk_drivers = []
|
|
dpdk_extra_ldflags = []
|
|
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),
|
|
)
|
|
|
|
# do configuration and get tool paths
|
|
subdir('buildtools')
|
|
subdir('config')
|
|
|
|
# build libs and drivers
|
|
subdir('buildtools/pmdinfogen')
|
|
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')))
|
|
|
|
# build pkg-config files for dpdk
|
|
subdir('buildtools/pkg-config')
|
|
|
|
# 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')
|