[v5,01/10] config: change ABI versioning to global

Message ID c1b57cd88380cc0dc8f1888fa64905f5ed1fd065.1571910363.git.anatoly.burakov@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Implement the new ABI policy and add helper scripts |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Anatoly Burakov Oct. 24, 2019, 9:46 a.m. UTC
  From: Marcin Baran <marcinx.baran@intel.com>

As per new ABI policy, all of the libraries are now versioned using
one global ABI version. Changes in this patch implement the
necessary steps to enable that.

Signed-off-by: Marcin Baran <marcinx.baran@intel.com>
Signed-off-by: Pawel Modrak <pawelx.modrak@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---

Notes:
    v3:
    - Removed Windows support from Makefile changes
    - Removed unneeded path conversions from meson files

 buildtools/meson.build |  2 ++
 config/ABI_VERSION     |  1 +
 config/meson.build     |  4 +++-
 drivers/meson.build    | 20 ++++++++++++--------
 lib/meson.build        | 18 +++++++++++-------
 meson_options.txt      |  2 --
 mk/rte.lib.mk          | 13 ++++---------
 7 files changed, 33 insertions(+), 27 deletions(-)
 create mode 100644 config/ABI_VERSION
  

Comments

David Marchand Nov. 5, 2019, 11:05 a.m. UTC | #1
On Thu, Oct 24, 2019 at 11:46 AM Anatoly Burakov
<anatoly.burakov@intel.com> wrote:
>
> From: Marcin Baran <marcinx.baran@intel.com>
>
> As per new ABI policy, all of the libraries are now versioned using
> one global ABI version. Changes in this patch implement the
> necessary steps to enable that.
>
> Signed-off-by: Marcin Baran <marcinx.baran@intel.com>
> Signed-off-by: Pawel Modrak <pawelx.modrak@intel.com>
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>
> Notes:
>     v3:
>     - Removed Windows support from Makefile changes
>     - Removed unneeded path conversions from meson files
>
>  buildtools/meson.build |  2 ++
>  config/ABI_VERSION     |  1 +
>  config/meson.build     |  4 +++-
>  drivers/meson.build    | 20 ++++++++++++--------
>  lib/meson.build        | 18 +++++++++++-------
>  meson_options.txt      |  2 --
>  mk/rte.lib.mk          | 13 ++++---------
>  7 files changed, 33 insertions(+), 27 deletions(-)
>  create mode 100644 config/ABI_VERSION
>
> diff --git a/buildtools/meson.build b/buildtools/meson.build
> index 32c79c1308..78ce69977d 100644
> --- a/buildtools/meson.build
> +++ b/buildtools/meson.build
> @@ -12,3 +12,5 @@ if python3.found()
>  else
>         map_to_def_cmd = ['meson', 'runpython', files('map_to_def.py')]
>  endif
> +
> +is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']

Traces from the windows stuff?


> diff --git a/config/ABI_VERSION b/config/ABI_VERSION
> new file mode 100644
> index 0000000000..9a7c1e503f
> --- /dev/null
> +++ b/config/ABI_VERSION
> @@ -0,0 +1 @@
> +20.0
> diff --git a/config/meson.build b/config/meson.build
> index acacba704a..40ad34345f 100644
> --- a/config/meson.build
> +++ b/config/meson.build
> @@ -18,6 +18,8 @@ endforeach
>  # depending on the configuration options
>  pver = meson.project_version().split('.')
>  major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
> +abi_version = run_command(find_program('cat', 'more'),

Idem.


> +       files('ABI_VERSION')).stdout().strip()
>
>  # extract all version information into the build configuration
>  dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
> @@ -37,7 +39,7 @@ endif
>
>  pmd_subdir_opt = get_option('drivers_install_subdir')
>  if pmd_subdir_opt.contains('<VERSION>')
> -       pmd_subdir_opt = major_version.join(pmd_subdir_opt.split('<VERSION>'))
> +       pmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))
>  endif
>  driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)
>  eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 4a1cb8b5be..1c1190053e 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -119,12 +119,19 @@ foreach class:dpdk_driver_classes
>                                         output: out_filename,
>                                         depends: [pmdinfogen, tmp_lib])
>
> -                       if get_option('per_library_versions')
> -                               lib_version = '@0@.1'.format(version)
> -                               so_version = '@0@'.format(version)
> +                       version_map = '@0@/@1@/@2@_version.map'.format(
> +                                       meson.current_source_dir(),
> +                                       drv_path, lib_name)
> +
> +                       is_experimental = run_command(is_experimental_cmd,
> +                               files(version_map)).returncode()
> +
> +                       if is_experimental != 0
> +                               lib_version = '0.1'
> +                               so_version = '0'
>                         else
> -                               lib_version = major_version
> -                               so_version = major_version
> +                               lib_version = abi_version
> +                               so_version = abi_version
>                         endif
>
>                         # now build the static driver
> @@ -137,9 +144,6 @@ foreach class:dpdk_driver_classes
>                                 install: true)
>
>                         # now build the shared driver
> -                       version_map = '@0@/@1@/@2@_version.map'.format(
> -                                       meson.current_source_dir(),
> -                                       drv_path, lib_name)
>                         shared_lib = shared_library(lib_name,
>                                 sources,
>                                 objects: objs,
> diff --git a/lib/meson.build b/lib/meson.build
> index 8ea3671c04..6302c0b680 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -100,12 +100,18 @@ foreach l:libraries
>                                 cflags += '-DALLOW_EXPERIMENTAL_API'
>                         endif
>
> -                       if get_option('per_library_versions')
> -                               lib_version = '@0@.1'.format(version)
> -                               so_version = '@0@'.format(version)
> +                       version_map = '@0@/@1@/rte_@2@_version.map'.format(
> +                                       meson.current_source_dir(), dir_name, name)
> +
> +                       is_experimental = run_command(is_experimental_cmd,
> +                                       files(version_map)).returncode()
> +
> +                       if is_experimental != 0
> +                               lib_version = '0.1'
> +                               so_version = '0'
>                         else
> -                               lib_version = major_version
> -                               so_version = major_version
> +                               lib_version = abi_version
> +                               so_version = abi_version
>                         endif
>
>                         # first build static lib
> @@ -123,8 +129,6 @@ foreach l:libraries
>                         # then use pre-build objects to build shared lib
>                         sources = []
>                         objs += static_lib.extract_all_objects(recursive: false)
> -                       version_map = '@0@/@1@/rte_@2@_version.map'.format(
> -                                       meson.current_source_dir(), dir_name, name)
>                         implib = dir_name + '.dll.a'
>
>                         def_file = custom_target(name + '_def',
> diff --git a/meson_options.txt b/meson_options.txt
> index 89650b0e9c..da6a7f0302 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -30,8 +30,6 @@ option('max_lcores', type: 'integer', value: 128,
>         description: 'maximum number of cores/threads supported by EAL')
>  option('max_numa_nodes', type: 'integer', value: 4,
>         description: 'maximum number of NUMA nodes supported by EAL')
> -option('per_library_versions', type: 'boolean', value: true,
> -       description: 'true: each lib gets its own version number, false: DPDK version used for each lib')
>  option('tests', type: 'boolean', value: true,
>         description: 'build unit tests')
>  option('use_hpet', type: 'boolean', value: false,
> diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk
> index 4df8849a08..e1ea292b6e 100644
> --- a/mk/rte.lib.mk
> +++ b/mk/rte.lib.mk
> @@ -11,20 +11,15 @@ EXTLIB_BUILD ?= n
>  # VPATH contains at least SRCDIR
>  VPATH += $(SRCDIR)
>
> -ifneq ($(CONFIG_RTE_MAJOR_ABI),)
> -ifneq ($(LIBABIVER),)
> -LIBABIVER := $(CONFIG_RTE_MAJOR_ABI)
> -endif
> +ifneq ($(shell grep "^DPDK_" $(SRCDIR)/$(EXPORT_MAP)),)

This generates noise for the ethtool lib in the associated example:

== ethtool
== lib
grep: /home/dmarchan/dpdk/examples/ethtool/lib/: Is a directory
  LD librte_ethtool.so.0
  INSTALL-LIB librte_ethtool.so.0
== ethtool-app

So either we add a map file for this example lib (a bit odd), or we
silence this warning.


> +LIBABIVER := $(shell cat $(RTE_SRCDIR)/config/ABI_VERSION)
> +else
> +LIBABIVER := 0
>  endif
>
>  ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
>  LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB))
>  ifeq ($(EXTLIB_BUILD),n)
> -ifeq ($(CONFIG_RTE_MAJOR_ABI),)
> -ifeq ($(CONFIG_RTE_NEXT_ABI),y)
> -LIB := $(LIB).1
> -endif
> -endif
>  CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
>  endif
>  endif
> --
> 2.17.1
  
Bruce Richardson Nov. 5, 2019, 1:50 p.m. UTC | #2
On Tue, Nov 05, 2019 at 12:05:15PM +0100, David Marchand wrote:
> On Thu, Oct 24, 2019 at 11:46 AM Anatoly Burakov
> <anatoly.burakov@intel.com> wrote:
> >
> > From: Marcin Baran <marcinx.baran@intel.com>
> >
> > As per new ABI policy, all of the libraries are now versioned using
> > one global ABI version. Changes in this patch implement the
> > necessary steps to enable that.
> >
> > Signed-off-by: Marcin Baran <marcinx.baran@intel.com>
> > Signed-off-by: Pawel Modrak <pawelx.modrak@intel.com>
> > Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> > Acked-by: Bruce Richardson <bruce.richardson@intel.com>
> > ---
> >
> > Notes:
> >     v3:
> >     - Removed Windows support from Makefile changes
> >     - Removed unneeded path conversions from meson files
> >
> >  buildtools/meson.build |  2 ++
> >  config/ABI_VERSION     |  1 +
> >  config/meson.build     |  4 +++-
> >  drivers/meson.build    | 20 ++++++++++++--------
> >  lib/meson.build        | 18 +++++++++++-------
> >  meson_options.txt      |  2 --
> >  mk/rte.lib.mk          | 13 ++++---------
> >  7 files changed, 33 insertions(+), 27 deletions(-)
> >  create mode 100644 config/ABI_VERSION
> >
> > diff --git a/buildtools/meson.build b/buildtools/meson.build
> > index 32c79c1308..78ce69977d 100644
> > --- a/buildtools/meson.build
> > +++ b/buildtools/meson.build
> > @@ -12,3 +12,5 @@ if python3.found()
> >  else
> >         map_to_def_cmd = ['meson', 'runpython', files('map_to_def.py')]
> >  endif
> > +
> > +is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']
> 
> Traces from the windows stuff?
> 
Yes, it's needed to ensure this doesn't error out on windows.
  

Patch

diff --git a/buildtools/meson.build b/buildtools/meson.build
index 32c79c1308..78ce69977d 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -12,3 +12,5 @@  if python3.found()
 else
 	map_to_def_cmd = ['meson', 'runpython', files('map_to_def.py')]
 endif
+
+is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']
diff --git a/config/ABI_VERSION b/config/ABI_VERSION
new file mode 100644
index 0000000000..9a7c1e503f
--- /dev/null
+++ b/config/ABI_VERSION
@@ -0,0 +1 @@ 
+20.0
diff --git a/config/meson.build b/config/meson.build
index acacba704a..40ad34345f 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -18,6 +18,8 @@  endforeach
 # depending on the configuration options
 pver = meson.project_version().split('.')
 major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
+abi_version = run_command(find_program('cat', 'more'),
+	files('ABI_VERSION')).stdout().strip()
 
 # extract all version information into the build configuration
 dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
@@ -37,7 +39,7 @@  endif
 
 pmd_subdir_opt = get_option('drivers_install_subdir')
 if pmd_subdir_opt.contains('<VERSION>')
-	pmd_subdir_opt = major_version.join(pmd_subdir_opt.split('<VERSION>'))
+	pmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))
 endif
 driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)
 eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
diff --git a/drivers/meson.build b/drivers/meson.build
index 4a1cb8b5be..1c1190053e 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -119,12 +119,19 @@  foreach class:dpdk_driver_classes
 					output: out_filename,
 					depends: [pmdinfogen, tmp_lib])
 
-			if get_option('per_library_versions')
-				lib_version = '@0@.1'.format(version)
-				so_version = '@0@'.format(version)
+			version_map = '@0@/@1@/@2@_version.map'.format(
+					meson.current_source_dir(),
+					drv_path, lib_name)
+
+			is_experimental = run_command(is_experimental_cmd,
+				files(version_map)).returncode()
+
+			if is_experimental != 0
+				lib_version = '0.1'
+				so_version = '0'
 			else
-				lib_version = major_version
-				so_version = major_version
+				lib_version = abi_version
+				so_version = abi_version
 			endif
 
 			# now build the static driver
@@ -137,9 +144,6 @@  foreach class:dpdk_driver_classes
 				install: true)
 
 			# now build the shared driver
-			version_map = '@0@/@1@/@2@_version.map'.format(
-					meson.current_source_dir(),
-					drv_path, lib_name)
 			shared_lib = shared_library(lib_name,
 				sources,
 				objects: objs,
diff --git a/lib/meson.build b/lib/meson.build
index 8ea3671c04..6302c0b680 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -100,12 +100,18 @@  foreach l:libraries
 				cflags += '-DALLOW_EXPERIMENTAL_API'
 			endif
 
-			if get_option('per_library_versions')
-				lib_version = '@0@.1'.format(version)
-				so_version = '@0@'.format(version)
+			version_map = '@0@/@1@/rte_@2@_version.map'.format(
+					meson.current_source_dir(), dir_name, name)
+
+			is_experimental = run_command(is_experimental_cmd,
+					files(version_map)).returncode()
+
+			if is_experimental != 0
+				lib_version = '0.1'
+				so_version = '0'
 			else
-				lib_version = major_version
-				so_version = major_version
+				lib_version = abi_version
+				so_version = abi_version
 			endif
 
 			# first build static lib
@@ -123,8 +129,6 @@  foreach l:libraries
 			# then use pre-build objects to build shared lib
 			sources = []
 			objs += static_lib.extract_all_objects(recursive: false)
-			version_map = '@0@/@1@/rte_@2@_version.map'.format(
-					meson.current_source_dir(), dir_name, name)
 			implib = dir_name + '.dll.a'
 
 			def_file = custom_target(name + '_def',
diff --git a/meson_options.txt b/meson_options.txt
index 89650b0e9c..da6a7f0302 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -30,8 +30,6 @@  option('max_lcores', type: 'integer', value: 128,
 	description: 'maximum number of cores/threads supported by EAL')
 option('max_numa_nodes', type: 'integer', value: 4,
 	description: 'maximum number of NUMA nodes supported by EAL')
-option('per_library_versions', type: 'boolean', value: true,
-	description: 'true: each lib gets its own version number, false: DPDK version used for each lib')
 option('tests', type: 'boolean', value: true,
 	description: 'build unit tests')
 option('use_hpet', type: 'boolean', value: false,
diff --git a/mk/rte.lib.mk b/mk/rte.lib.mk
index 4df8849a08..e1ea292b6e 100644
--- a/mk/rte.lib.mk
+++ b/mk/rte.lib.mk
@@ -11,20 +11,15 @@  EXTLIB_BUILD ?= n
 # VPATH contains at least SRCDIR
 VPATH += $(SRCDIR)
 
-ifneq ($(CONFIG_RTE_MAJOR_ABI),)
-ifneq ($(LIBABIVER),)
-LIBABIVER := $(CONFIG_RTE_MAJOR_ABI)
-endif
+ifneq ($(shell grep "^DPDK_" $(SRCDIR)/$(EXPORT_MAP)),)
+LIBABIVER := $(shell cat $(RTE_SRCDIR)/config/ABI_VERSION)
+else
+LIBABIVER := 0
 endif
 
 ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
 LIB := $(patsubst %.a,%.so.$(LIBABIVER),$(LIB))
 ifeq ($(EXTLIB_BUILD),n)
-ifeq ($(CONFIG_RTE_MAJOR_ABI),)
-ifeq ($(CONFIG_RTE_NEXT_ABI),y)
-LIB := $(LIB).1
-endif
-endif
 CPU_LDFLAGS += --version-script=$(SRCDIR)/$(EXPORT_MAP)
 endif
 endif