buildtools: use Python pmdinfogen

Use the same interpreter to run pmdinfogen as for other build scripts.
Adjust wrapper script accordingly and also don't suppress stderr from ar
and pmdinfogen. Add configure-time check for elftools Python module for
Unix hosts.

Add pyelftools to CI configuration and build requirements for Linux and
FreeBSD. Windows targets are not currently using pmdinfogen.

Suppress ABI warnings about generated PMD information strings.

Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Jie Zhou <jizh@microsoft.com>
This commit is contained in:
Dmitry Kozlyuk 2021-01-24 23:51:56 +03:00 committed by Thomas Monjalon
parent 6c4bf8f424
commit f0f93a7adf
9 changed files with 34 additions and 9 deletions

View File

@ -91,8 +91,8 @@ jobs:
run: sudo apt update run: sudo apt update
- name: Install packages - name: Install packages
run: sudo apt install -y ccache libnuma-dev python3-setuptools run: sudo apt install -y ccache libnuma-dev python3-setuptools
python3-wheel python3-pip ninja-build libbsd-dev libpcap-dev python3-wheel python3-pip python3-pyelftools ninja-build libbsd-dev
libibverbs-dev libcrypto++-dev libfdt-dev libjansson-dev libpcap-dev libibverbs-dev libcrypto++-dev libfdt-dev libjansson-dev
- name: Install libabigail build dependencies if no cache is available - name: Install libabigail build dependencies if no cache is available
if: env.ABI_CHECKS == 'true' && steps.libabigail-cache.outputs.cache-hit != 'true' if: env.ABI_CHECKS == 'true' && steps.libabigail-cache.outputs.cache-hit != 'true'
run: sudo apt install -y autoconf automake libtool pkg-config libxml2-dev run: sudo apt install -y autoconf automake libtool pkg-config libxml2-dev

View File

@ -14,7 +14,7 @@ addons:
apt: apt:
update: true update: true
packages: &required_packages packages: &required_packages
- [libnuma-dev, python3-setuptools, python3-wheel, python3-pip, ninja-build] - [libnuma-dev, python3-setuptools, python3-wheel, python3-pip, python3-pyelftools, ninja-build]
- [libbsd-dev, libpcap-dev, libibverbs-dev, libcrypto++-dev, libfdt-dev, libjansson-dev] - [libbsd-dev, libpcap-dev, libibverbs-dev, libcrypto++-dev, libfdt-dev, libjansson-dev]
_aarch64_packages: &aarch64_packages _aarch64_packages: &aarch64_packages

View File

@ -4,11 +4,11 @@
arfile=$1 arfile=$1
output=$2 output=$2
pmdinfogen=$3 shift 2
pmdinfogen=$*
# The generated file must not be empty if compiled in pedantic mode # The generated file must not be empty if compiled in pedantic mode
echo 'static __attribute__((unused)) const char *generator = "'$0'";' > $output echo 'static __attribute__((unused)) const char *generator = "'$0'";' > $output
for ofile in `ar t $arfile` ; do for ofile in `ar t $arfile` ; do
ar p $arfile $ofile | $pmdinfogen - - >> $output 2> /dev/null ar p $arfile $ofile | $pmdinfogen - - >> $output
done done
exit 0

View File

@ -17,3 +17,18 @@ else
endif endif
map_to_win_cmd = py3 + files('map_to_win.py') map_to_win_cmd = py3 + files('map_to_win.py')
sphinx_wrapper = py3 + files('call-sphinx-build.py') sphinx_wrapper = py3 + files('call-sphinx-build.py')
pmdinfogen = py3 + files('pmdinfogen.py')
# TODO: starting from Meson 0.51.0 use
# python3 = import('python').find_installation('python',
# modules : python3_required_modules)
python3_required_modules = []
if host_machine.system() != 'windows'
python3_required_modules = ['elftools']
endif
foreach module : python3_required_modules
script = 'import importlib.util; import sys; exit(importlib.util.find_spec("@0@") is None)'
if run_command(py3, '-c', script.format(module)).returncode() != 0
error('missing python module: @0@'.format(module))
endif
endforeach

View File

@ -8,6 +8,10 @@
[suppress_variable] [suppress_variable]
symbol_version = INTERNAL symbol_version = INTERNAL
; Ignore generated PMD information strings
[suppress_variable]
name_regexp = _pmd_info$
; Explicit ignore for driver-only ABI ; Explicit ignore for driver-only ABI
[suppress_type] [suppress_type]
name = eth_dev_ops name = eth_dev_ops

View File

@ -14,10 +14,11 @@ The following FreeBSD packages are required to build DPDK:
* meson * meson
* ninja * ninja
* pkgconf * pkgconf
* py37-pyelftools
These can be installed using (as root):: These can be installed using (as root)::
pkg install meson pkgconf pkg install meson pkgconf py37-pyelftools
To compile the required kernel modules for memory management and working To compile the required kernel modules for memory management and working
with physical NIC devices, the kernel sources for FreeBSD also with physical NIC devices, the kernel sources for FreeBSD also

View File

@ -52,6 +52,12 @@ Compilation of the DPDK
* If the packaged version is below the minimum version, the latest versions * If the packaged version is below the minimum version, the latest versions
can be installed from Python's "pip" repository: ``pip3 install meson ninja`` can be installed from Python's "pip" repository: ``pip3 install meson ninja``
* ``pyelftools`` (version 0.22+)
* For RHEL/Fedora systems it can be installed using ``dnf install python-pyelftools``
* For Ubuntu/Debian it can be installed using ``apt install python3-pyelftools``
* Library for handling NUMA (Non Uniform Memory Access). * Library for handling NUMA (Non Uniform Memory Access).
* ``numactl-devel`` in RHEL/Fedora; * ``numactl-devel`` in RHEL/Fedora;

View File

@ -132,7 +132,7 @@ foreach subpath:subdirs
command: [pmdinfo, tmp_lib.full_path(), command: [pmdinfo, tmp_lib.full_path(),
'@OUTPUT@', pmdinfogen], '@OUTPUT@', pmdinfogen],
output: out_filename, output: out_filename,
depends: [pmdinfogen, tmp_lib]) depends: [tmp_lib])
endif endif
# now build the static driver # now build the static driver

View File

@ -45,7 +45,6 @@ subdir('buildtools')
subdir('config') subdir('config')
# build libs and drivers # build libs and drivers
subdir('buildtools/pmdinfogen')
subdir('lib') subdir('lib')
subdir('drivers') subdir('drivers')