On Wed, Oct 16, 2019 at 01:43:16PM +0100, Anatoly Burakov wrote: > From: Marcin Baran <marcinx.ba...@intel.com> > > The libraries should be maintained using global > ABI versioning. The changes includes adding global > ABI version support for both makefile and meson > build system. Experimental libraries should be > marked as 0. > > 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> > ---
Some comments inline below. /Bruce > buildtools/meson.build | 2 ++ > config/ABI_VERSION | 1 + > config/meson.build | 3 ++- > drivers/meson.build | 20 ++++++++++++++------ > lib/meson.build | 18 +++++++++++++----- > meson_options.txt | 2 -- > mk/rte.lib.mk | 19 +++++++++++-------- > 7 files changed, 43 insertions(+), 22 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_'] > 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 a27f731f85..25ecf928e4 100644 > --- a/config/meson.build > +++ b/config/meson.build > @@ -17,7 +17,8 @@ endforeach > # set the major version, which might be used by drivers and libraries > # depending on the configuration options > pver = meson.project_version().split('.') > -major_version = '@0@.@1@'.format(pver.get(0), pver.get(1)) > +major_version = run_command(find_program('cat', 'more'), > + files('ABI_VERSION')).stdout().strip() > I wonder if we should rename this to abi_version rather than major_version? > # extract all version information into the build configuration > dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int()) > diff --git a/drivers/meson.build b/drivers/meson.build > index 2ed2e95411..5c5fe87c7e 100644 > --- a/drivers/meson.build > +++ b/drivers/meson.build > @@ -110,9 +110,20 @@ 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) > + > + if is_windows > + version_map = '\\'.join(version_map.split('/')) > + endif Don't think this block should be needed. Windows generally supports using "/" as a separator, even if traditionally "\" was used. > + > + 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 > @@ -128,9 +139,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 e5ff838934..3892c16e8f 100644 > --- a/lib/meson.build > +++ b/lib/meson.build > @@ -97,9 +97,19 @@ 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) > + > + if is_windows > + version_map = '\\'.join(version_map.split('/')) > + endif As above. > + > + 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 > @@ -120,8 +130,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 448f3e63dc..000e38fd98 100644 > --- a/meson_options.txt > +++ b/meson_options.txt > @@ -28,8 +28,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..f84161c6d5 100644 > --- a/mk/rte.lib.mk > +++ b/mk/rte.lib.mk > @@ -11,20 +11,23 @@ EXTLIB_BUILD ?= n > # VPATH contains at least SRCDIR > VPATH += $(SRCDIR) > > -ifneq ($(CONFIG_RTE_MAJOR_ABI),) > -ifneq ($(LIBABIVER),) > -LIBABIVER := $(CONFIG_RTE_MAJOR_ABI) > +ifeq ($(OS), Windows_NT) > +search_cmd = findstr > +print_cmd = more > +else > +search_cmd = grep > +print_cmd = cat We don't support make on windows, so no need for using findstr. > endif > + > +ifneq ($(shell $(search_cmd) "^DPDK_" $(SRCDIR)/$(EXPORT_MAP)),) > +LIBABIVER := $(shell $(print_cmd) $(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