From: Kevin Laatz <kevin.laatz@intel.com> To: dev@dpdk.org Cc: thomas@monjalon.net, david.marchand@redhat.com, bruce.richardson@intel.com, ray.kinsella@intel.com, Kevin Laatz <kevin.laatz@intel.com> Subject: [dpdk-dev] [PATCH v4 2/3] build: add abi checks to meson Date: Wed, 11 Dec 2019 18:21:46 +0000 Message-ID: <20191211182147.19355-3-kevin.laatz@intel.com> (raw) In-Reply-To: <20191211182147.19355-1-kevin.laatz@intel.com> This patch adds a script to generate ABI dump files. These files will be required to perform ABI compatibility checks during the build later in the patchset. This script should be run on a DPDK version with a stable ABI. Since this is a tool designed for human use, we simplify it to just work off a whole build directory, taking the parameter of the builddir and generating the lib|drivers/abi dir. This is hardcoded into the script since the meson build expects the .dump files in these directories. The running of the scripts can be enabled/disabled using the new meson option added in this patch. If enabled, the lib and drivers .so files will be compared against any existing ABI dump files in lib|drivers/abi of the source directory. If there are any incompatibilities, the build will fail and display the incompatibility. Signed-off-by: Kevin Laatz <kevin.laatz@intel.com> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> --- v2: - fixed conditional around abi check custom target v3: - fix typo in meson option name v4: - squash commits 3,4,5,6 into a single commit - changes meson option from type boolean to feature - update travis packages - move check for windows to earlier in build - add abignore file to suppress experimental functions - make the directories we store dump files in hidden --- .travis.yml | 9 +++++++-- buildtools/dpdk.abignore | 2 ++ buildtools/meson.build | 3 +++ config/meson.build | 10 ++++++++++ devtools/gen-abi-dump.sh | 24 ++++++++++++++++++++++++ drivers/meson.build | 13 +++++++++++++ lib/meson.build | 13 +++++++++++++ meson.build | 4 ++++ meson_options.txt | 2 ++ 9 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 buildtools/dpdk.abignore create mode 100755 devtools/gen-abi-dump.sh diff --git a/.travis.yml b/.travis.yml index 8f90d06f2..c5654a530 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ aarch64_packages: &aarch64_packages extra_packages: &extra_packages - *required_packages - - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4] + - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4, abigail-tools] build_32b_packages: &build_32b_packages - *required_packages @@ -115,6 +115,11 @@ matrix: apt: packages: - *extra_packages - + - env: DEF_LIB="static" OPTS="-Dcompat_checks=enabled -Dbuildtype=debug" EXTRA_PACKAGES=1 + compiler: gcc + addons: + apt: + packages: + - *extra_packages script: ./.ci/${TRAVIS_OS_NAME}-build.sh diff --git a/buildtools/dpdk.abignore b/buildtools/dpdk.abignore new file mode 100644 index 000000000..b866b7f26 --- /dev/null +++ b/buildtools/dpdk.abignore @@ -0,0 +1,2 @@ +[suppress_function] + symbol_version = EXPERIMENTAL diff --git a/buildtools/meson.build b/buildtools/meson.build index 6ef2c5721..378f8d07e 100644 --- a/buildtools/meson.build +++ b/buildtools/meson.build @@ -7,6 +7,9 @@ pmdinfo = find_program('gen-pmdinfo-cfile.sh') check_experimental_syms = find_program('check-experimental-syms.sh') +abidiff = find_program('abidiff', required: compat_checks) +abignore = files('dpdk.abignore') + # set up map-to-def script using python, either built-in or external python3 = import('python').find_installation(required: false) if python3.found() diff --git a/config/meson.build b/config/meson.build index 01911ecf9..ea680af33 100644 --- a/config/meson.build +++ b/config/meson.build @@ -34,6 +34,16 @@ stable_so_version = abi_va.length() == 2 ? abi_va[0] : abi_va[0] + '.' + abi_va[ experimental_abi_version = '0.' + ''.join(abi_va) experimental_so_version = '0.' + ''.join(stable_so_version.split('.')) +# compatibility checks not available on windows +compat_checks = disabler() +if not is_windows + compat_checks = get_option('compat_checks') +endif + +if not get_option('debug') and compat_checks.enabled() + error('Build type must have debug symbols when compat_checks=enabled') +endif + # extract all version information into the build configuration dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int()) dpdk_conf.set('RTE_VER_MONTH', pver.get(1).to_int()) diff --git a/devtools/gen-abi-dump.sh b/devtools/gen-abi-dump.sh new file mode 100755 index 000000000..bc6eac8c8 --- /dev/null +++ b/devtools/gen-abi-dump.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +builddir=$1 + +if [ -z "$builddir" ] ; then + echo "Usage: $(basename $0) build_dir" + exit 1 +fi + +if [ ! -d "$builddir" ] ; then + echo "Error: build directory, '$builddir', doesn't exist" + exit 1 +fi + +for d in lib drivers ; do + mkdir -p $d/.abi + + for f in $builddir/$d/*.so* ; do + test -L "$f" && continue + + libname=$(basename $f) + abidw --out-file $d/.abi/${libname%.so*}.dump $f || exit 1 + done +done diff --git a/drivers/meson.build b/drivers/meson.build index 4b17662b7..db58a67b9 100644 --- a/drivers/meson.build +++ b/drivers/meson.build @@ -196,6 +196,19 @@ foreach class:dpdk_driver_classes include_directories: includes, dependencies: static_deps) + if abidiff.found() + custom_target('lib' + lib_name + '.abi_chk', + command: [abidiff, '--no-added-syms', + '--suppr', abignore, + files('.abi/lib' + lib_name + '.dump'), + '@INPUT@'], + input: shared_lib, + output: 'lib' + lib_name + '.abi_chk', + capture: true, + install: false, + build_by_default: is_experimental == 0) + endif + dpdk_drivers += static_lib set_variable('shared_@0@'.format(lib_name), shared_dep) diff --git a/lib/meson.build b/lib/meson.build index 0af3efab2..f0aba6635 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -180,6 +180,19 @@ foreach l:libraries include_directories: includes, dependencies: shared_deps) + if abidiff.found() + custom_target(dir_name + '.abi_chk', + command: [abidiff, '--no-added-syms', + '--suppr', abignore, + files('.abi/' + dir_name + '.dump'), + '@INPUT@'], + input: shared_lib, + output: dir_name + '.abi_chk', + capture: true, + install: false, + build_by_default: is_experimental == 0) + endif + dpdk_libraries = [shared_lib] + dpdk_libraries dpdk_static_libraries = [static_lib] + dpdk_static_libraries endif # sources.length() > 0 diff --git a/meson.build b/meson.build index b7ae9c8d9..e840ccea7 100644 --- a/meson.build +++ b/meson.build @@ -128,3 +128,7 @@ foreach drv:dpdk_drvs_disabled output_message += drv + ':\t' + reason + '\n\t' endforeach message(output_message + '\n') + +if compat_checks.auto() and not get_option('debug') + warning('Build type must be have debug symbols to run compatibility checks!\n') +endif diff --git a/meson_options.txt b/meson_options.txt index bc369d06c..0c651cef3 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,5 +1,7 @@ # Please keep these options sorted alphabetically. +option('compat_checks', type: 'feature', value: 'auto', + description: 'Enable abi compatibility checks and experimental syms checks to run during the build. This requires debug build to be enabled.') option('disable_drivers', type: 'string', value: '', description: 'Comma-separated list of drivers to explicitly disable.') option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>', -- 2.17.1
next prev parent reply index Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-10-23 1:07 [dpdk-dev] [RFC 0/6] Add ABI compatibility checks to the meson build Kevin Laatz 2019-10-23 1:07 ` [dpdk-dev] [RFC 1/6] build: enable debug info by default in meson builds Kevin Laatz 2019-10-23 1:07 ` [dpdk-dev] [RFC 2/6] build: use meson warning levels Kevin Laatz 2019-10-23 1:07 ` [dpdk-dev] [RFC 3/6] devtools: add abi dump generation script Kevin Laatz 2019-10-23 1:07 ` [dpdk-dev] [RFC 4/6] build: add meson option for abi related checks Kevin Laatz 2019-10-23 1:07 ` [dpdk-dev] [RFC 5/6] build: add lib abi checks to meson Kevin Laatz 2019-10-23 1:07 ` [dpdk-dev] [RFC 6/6] build: add drivers " Kevin Laatz 2019-11-29 12:13 ` [dpdk-dev] [RFC 0/6] Add ABI compatibility checks to the meson build David Marchand 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 0/7] " Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 1/7] build: enable debug info by default in meson builds Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 2/7] build: use meson warning levels Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 3/7] devtools: add abi dump generation script Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 4/7] build: add meson option for abi related checks Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 5/7] build: add lib abi checks to meson Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 6/7] build: add drivers " Kevin Laatz 2019-11-29 17:10 ` [dpdk-dev] [PATCH v2 7/7] build: clean up experimental syms check Kevin Laatz 2019-11-29 21:08 ` [dpdk-dev] [PATCH v3 0/7] Add ABI compatibility checks to the meson build Kevin Laatz 2019-11-29 21:08 ` [dpdk-dev] [PATCH v3 1/7] build: enable debug info by default in meson builds Kevin Laatz 2019-11-29 21:09 ` [dpdk-dev] [PATCH v3 2/7] build: use meson warning levels Kevin Laatz 2019-11-29 21:09 ` [dpdk-dev] [PATCH v3 3/7] devtools: add abi dump generation script Kevin Laatz 2019-11-29 21:09 ` [dpdk-dev] [PATCH v3 4/7] build: add meson option for abi related checks Kevin Laatz 2019-11-29 21:09 ` [dpdk-dev] [PATCH v3 5/7] build: add lib abi checks to meson Kevin Laatz 2019-11-29 21:09 ` [dpdk-dev] [PATCH v3 6/7] build: add drivers " Kevin Laatz 2019-11-29 21:09 ` [dpdk-dev] [PATCH v3 7/7] build: clean up experimental syms check Kevin Laatz 2019-12-03 11:03 ` [dpdk-dev] [PATCH v3 0/7] Add ABI compatibility checks to the meson build David Marchand 2019-12-03 15:27 ` Laatz, Kevin 2019-12-04 8:47 ` David Marchand 2019-12-04 10:46 ` Bruce Richardson 2019-12-04 11:56 ` Neil Horman 2019-12-04 12:00 ` David Marchand 2019-12-10 11:07 ` David Marchand 2019-12-10 11:36 ` Laatz, Kevin 2019-12-11 18:21 ` [dpdk-dev] [PATCH v4 0/3] " Kevin Laatz 2019-12-11 18:21 ` Kevin Laatz [this message] 2019-12-11 18:21 ` [dpdk-dev] [PATCH v4 3/3] build: clean up experimental syms check Kevin Laatz [not found] ` <20191211182147.19355-2-kevin.laatz@intel.com> 2019-12-12 8:43 ` [dpdk-dev] [PATCH v4 1/3] build: add dump files for v20.0 ABI David Marchand 2019-12-12 9:36 ` David Marchand 2019-12-12 9:45 ` Laatz, Kevin 2019-12-12 9:45 ` Laatz, Kevin 2019-12-13 14:02 ` [dpdk-dev] [PATCH v5 0/3] Add ABI compatibility checks to the meson build Kevin Laatz 2019-12-13 14:03 ` [dpdk-dev] [PATCH v5 2/3] build: add abi checks to meson Kevin Laatz 2019-12-13 14:03 ` [dpdk-dev] [PATCH v5 3/3] build: clean up experimental syms check Kevin Laatz 2019-12-13 16:40 ` [dpdk-dev] [PATCH v6 00/11] Add ABI compatibility checks to the meson build Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 01/11] lib: add dump files for v20.0 ABI Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 02/11] drivers/bus: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 03/11] drivers/mempool: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 04/11] drivers/common: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 05/11] drivers/raw: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 06/11] drivers/crypto: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 07/11] drivers/compress: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 08/11] drivers/net: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 09/11] drivers/net/intel: " Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 10/11] build: add abi checks to meson Kevin Laatz 2019-12-13 16:41 ` [dpdk-dev] [PATCH v6 11/11] build: clean up experimental syms check Kevin Laatz 2019-12-19 21:58 ` [dpdk-dev] [PATCH v6 00/11] Add ABI compatibility checks to the meson build David Marchand 2019-12-20 10:20 ` Thomas Monjalon 2019-12-20 11:04 ` Bruce Richardson 2019-12-20 13:19 ` David Marchand 2019-12-20 14:17 ` Bruce Richardson 2020-01-06 13:20 ` Aaron Conole
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191211182147.19355-3-kevin.laatz@intel.com \ --to=kevin.laatz@intel.com \ --cc=bruce.richardson@intel.com \ --cc=david.marchand@redhat.com \ --cc=dev@dpdk.org \ --cc=ray.kinsella@intel.com \ --cc=thomas@monjalon.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK-dev Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/dpdk-dev/0 dpdk-dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dpdk-dev dpdk-dev/ https://lore.kernel.org/dpdk-dev \ dev@dpdk.org public-inbox-index dpdk-dev Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git