build: remove special versioning for non stable libraries

Having a special versioning for experimental/internal libraries put a
additional maintenance cost while this status is already announced in
MAINTAINERS and the library headers/documentation.
Following discussions and vote at 05/20 TB meeting [1], use a single
versioning for all libraries in DPDK.

Note: for the ABI check, an exception [2] had been added when tweaking
this special versioning [3].
Prefer explicit libabigail rules (which will be dropped in 20.11).

1: https://mails.dpdk.org/archives/dev/2020-May/168450.html
2: https://git.dpdk.org/dpdk/commit/?id=23d7ad5db41c
3: https://git.dpdk.org/dpdk/commit/?id=ec2b8cd7ed69

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Ray Kinsella <mdr@ashroe.eu>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
This commit is contained in:
David Marchand 2020-06-26 10:16:36 +02:00 committed by Thomas Monjalon
parent f6d7f40576
commit 7762e0139b
9 changed files with 37 additions and 62 deletions

View File

@ -17,6 +17,3 @@ 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')
# stable ABI always starts with "DPDK_"
is_stable_cmd = [find_program('grep', 'findstr'), '^DPDK_']

View File

@ -25,18 +25,14 @@ major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
abi_version = run_command(find_program('cat', 'more'), abi_version = run_command(find_program('cat', 'more'),
abi_version_file).stdout().strip() abi_version_file).stdout().strip()
# Regular libraries have the abi_version as the filename extension # Libraries have the abi_version as the filename extension
# and have the soname be all but the final part of the abi_version. # and have the soname be all but the final part of the abi_version.
# Experimental libraries have soname with '0.major' # e.g. v20.1 => librte_foo.so.20.1
# and the filename suffix as 0.majorminor versions, # sonames => librte_foo.so.20
# e.g. v20.1 => librte_stable.so.20.1, librte_experimental.so.0.201 # e.g. v20.0.1 => librte_foo.so.20.0.1
# sonames => librte_stable.so.20, librte_experimental.so.0.20 # sonames => librte_foo.so.20.0
# e.g. v20.0.1 => librte_stable.so.20.0.1, librte_experimental.so.0.2001
# sonames => librte_stable.so.20.0, librte_experimental.so.0.200
abi_va = abi_version.split('.') abi_va = abi_version.split('.')
stable_so_version = abi_va.length() == 2 ? abi_va[0] : abi_va[0] + '.' + abi_va[1] so_version = abi_va.length() == 2 ? abi_va[0] : abi_va[0] + '.' + abi_va[1]
experimental_abi_version = '0.' + abi_va[0] + abi_va[1] + '.' + abi_va[2]
experimental_so_version = experimental_abi_version
# extract all version information into the build configuration # extract all version information into the build configuration
dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int()) dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())

View File

@ -44,11 +44,6 @@ for dump in $(find $refdir -name "*.dump"); do
echo "Skipped glue library $name." echo "Skipped glue library $name."
continue continue
fi fi
# skip experimental libraries, with a sover starting with 0.
if grep -qE "\<soname='[^']*\.so\.0\.[^']*'" $dump; then
echo "Skipped experimental library $name."
continue
fi
dump2=$(find $newdir -name $name) dump2=$(find $newdir -name $name)
if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then if [ -z "$dump2" ] || [ ! -e "$dump2" ]; then
echo "Error: can't find $name in $newdir" echo "Error: can't find $name in $newdir"

View File

@ -50,9 +50,9 @@
name = rte_crypto_aead_algorithm_strings name = rte_crypto_aead_algorithm_strings
;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;
; Temporary exceptions for new __rte_internal marking till DPDK 20.11 ; Temporary exceptions till DPDK 20.11
;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;
; Ignore moving OCTEONTX2 stable functions to INTERNAL tag ; Ignore moving OCTEONTX2 stable functions to INTERNAL
[suppress_file] [suppress_file]
file_name_regexp = ^librte_common_octeontx2\. file_name_regexp = ^librte_common_octeontx2\.
[suppress_file] [suppress_file]
@ -77,3 +77,28 @@
name = rte_dpaa2_mbuf_alloc_bulk name = rte_dpaa2_mbuf_alloc_bulk
[suppress_function] [suppress_function]
name_regexp = ^dpaa2?_.*tach$ name_regexp = ^dpaa2?_.*tach$
; Ignore soname changes for experimental libraries
[suppress_file]
file_name_regexp = ^librte_bbdev\.
[suppress_file]
file_name_regexp = ^librte_bpf\.
[suppress_file]
file_name_regexp = ^librte_compressdev\.
[suppress_file]
file_name_regexp = ^librte_fib\.
[suppress_file]
file_name_regexp = ^librte_flow_classify\.
[suppress_file]
file_name_regexp = ^librte_graph\.
[suppress_file]
file_name_regexp = ^librte_ipsec\.
[suppress_file]
file_name_regexp = ^librte_node\.
[suppress_file]
file_name_regexp = ^librte_rcu\.
[suppress_file]
file_name_regexp = ^librte_rib\.
[suppress_file]
file_name_regexp = ^librte_telemetry\.
[suppress_file]
file_name_regexp = ^librte_stack\.

View File

@ -28,7 +28,6 @@ General Guidelines
once approved these will form part of the next ABI version. once approved these will form part of the next ABI version.
#. Libraries or APIs marked as :ref:`experimental <experimental_apis>` may #. Libraries or APIs marked as :ref:`experimental <experimental_apis>` may
change without constraint, as they are not considered part of an ABI version. change without constraint, as they are not considered part of an ABI version.
Experimental libraries have the major ABI version ``0``.
#. Updates to the :ref:`minimum hardware requirements <hw_rqmts>`, which drop #. Updates to the :ref:`minimum hardware requirements <hw_rqmts>`, which drop
support for hardware which was previously supported, should be treated as an support for hardware which was previously supported, should be treated as an
ABI change. ABI change.
@ -331,7 +330,4 @@ Libraries
~~~~~~~~~ ~~~~~~~~~
Libraries marked as ``experimental`` are entirely not considered part of an ABI Libraries marked as ``experimental`` are entirely not considered part of an ABI
version, and may change without warning at any time. Experimental libraries version, and may change without warning at any time.
always have a major ABI version of ``0`` to indicate they exist outside of
:ref:`abi_versioning` , with the minor version incremented with each ABI change
to library.

View File

@ -112,8 +112,7 @@ how this may be done.
At the same time, the major ABI version is changed atomically across all At the same time, the major ABI version is changed atomically across all
libraries by incrementing the major version in the ABI_VERSION file. This is libraries by incrementing the major version in the ABI_VERSION file. This is
done globally for all libraries that declare a stable ABI. For libraries marked done globally for all libraries.
as EXPERIMENTAL, their major ABI version is always set to 0.
Minor ABI versions Minor ABI versions
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

View File

@ -121,20 +121,6 @@ foreach class:dpdk_driver_classes
output: out_filename, output: out_filename,
depends: [pmdinfogen, tmp_lib]) depends: [pmdinfogen, tmp_lib])
endif endif
version_map = '@0@/@1@/@2@_version.map'.format(
meson.current_source_dir(),
drv_path, lib_name)
is_stable = run_command(is_stable_cmd,
files(version_map)).returncode() == 0
if is_stable
lib_version = abi_version
so_version = stable_so_version
else
lib_version = experimental_abi_version
so_version = experimental_so_version
endif
# now build the static driver # now build the static driver
static_lib = static_library(lib_name, static_lib = static_library(lib_name,
@ -190,7 +176,7 @@ foreach class:dpdk_driver_classes
c_args: cflags, c_args: cflags,
link_args: lk_args, link_args: lk_args,
link_depends: lk_deps, link_depends: lk_deps,
version: lib_version, version: abi_version,
soversion: so_version, soversion: so_version,
install: true, install: true,
install_dir: driver_install_path) install_dir: driver_install_path)

View File

@ -116,20 +116,6 @@ foreach l:libraries
cflags += '-DRTE_USE_FUNCTION_VERSIONING' cflags += '-DRTE_USE_FUNCTION_VERSIONING'
endif endif
version_map = '@0@/@1@/rte_@2@_version.map'.format(
meson.current_source_dir(), dir_name, name)
is_stable = run_command(is_stable_cmd,
files(version_map)).returncode() == 0
if is_stable
lib_version = abi_version
so_version = stable_so_version
else
lib_version = experimental_abi_version
so_version = experimental_so_version
endif
# first build static lib # first build static lib
static_lib = static_library(libname, static_lib = static_library(libname,
sources, sources,
@ -197,7 +183,7 @@ foreach l:libraries
include_directories: includes, include_directories: includes,
link_args: lk_args, link_args: lk_args,
link_depends: lk_deps, link_depends: lk_deps,
version: lib_version, version: abi_version,
soversion: so_version, soversion: so_version,
install: true) install: true)
shared_dep = declare_dependency(link_with: shared_lib, shared_dep = declare_dependency(link_with: shared_lib,

View File

@ -13,11 +13,6 @@ VPATH += $(SRCDIR)
LIBABIVER ?= $(shell cat $(RTE_SRCDIR)/ABI_VERSION) LIBABIVER ?= $(shell cat $(RTE_SRCDIR)/ABI_VERSION)
SOVER := $(basename $(LIBABIVER)) SOVER := $(basename $(LIBABIVER))
ifeq ($(shell grep -s "^DPDK_" $(SRCDIR)/$(EXPORT_MAP)),)
# EXPERIMENTAL ABI is versioned as 0.major+minor, e.g. 0.201 for 20.1 ABI
LIBABIVER := 0.$(shell echo $(LIBABIVER) | awk 'BEGIN { FS="." }; { print $$1$$2"."$$3 }')
SOVER := $(LIBABIVER)
endif
ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
SONAME := $(patsubst %.a,%.so.$(SOVER),$(LIB)) SONAME := $(patsubst %.a,%.so.$(SOVER),$(LIB))