On Thu, Oct 24, 2019 at 11:46 AM Anatoly Burakov <anatoly.bura...@intel.com> wrote: > > From: Marcin Baran <marcinx.ba...@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.ba...@intel.com> > Signed-off-by: Pawel Modrak <pawelx.mod...@intel.com> > Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com> > Acked-by: Bruce Richardson <bruce.richard...@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