[dpdk-dev] [PATCH v2 0/2] Improve function versioning meson support

Bruce Richardson bruce.richardson at intel.com
Fri Sep 27 22:59:29 CEST 2019


Adding support for LTO has exposed some issues with how the functions
versioning was supported by meson, which was always set to build both
shared and static libraries.

For plain C code, so long as the -fPIC compiler flag was passed, the
output is identical whether or not the code is to be included in a
static library or a dynamic one. Unfortunately, when using function
versioning that no longer held as different macros were used for the
versioned functions depending on which type of build it was. This means
that any files that use versioning need to be built twice, with
different defines in each case.

While the trivial solution here is just to rebuild everything twice,
that involves a lot of unnecessary work when building DPDK. A better
option is to identify those files or components which need multiple
builds and rebuild only those. To do this, we add a new meson.build
setting for libraries "use_function_versioning" and when that is set, we
rebuild all source files twice, initially for static library and then
with -DRTE_BUILD_SHARED_LIB for the shared library.

If the flag is not set, then the static versioning setting only is used,
which could lead to the build succeeding but later causing problems. To
avoid that, we add a new define which must be set when the versioning
header is included. This addition while solving 1 problem raises 2
other, more minor problems:
* what to do with make builds? since make only builds one library type,
  we can just always define the new value.
* what about files that include rte_compat.h for the macro for
  "experimental"? To solve this, we can split compat.h in two, since the
  versioning macro should be internal only to DPDK (as no public header
  should expose anything but the latest APIs), while the experimental
  macros are primarily for public use.

V2: added in file that missed a "git add" when doing V1

Bruce Richardson (2):
  eal: split compat header file
  build: support building ABI versioned files twice

 config/common_base                            |  1 +
 config/rte_config.h                           |  3 -
 doc/api/doxy-api-index.md                     |  3 +-
 doc/guides/contributing/coding_style.rst      |  7 ++
 doc/guides/contributing/versioning.rst        |  4 +-
 lib/librte_distributor/meson.build            |  1 +
 lib/librte_distributor/rte_distributor.c      |  2 +-
 lib/librte_distributor/rte_distributor_v20.c  |  2 +-
 lib/librte_eal/common/Makefile                |  1 +
 lib/librte_eal/common/include/rte_compat.h    | 70 ----------------
 .../common/include/rte_function_versioning.h  | 83 +++++++++++++++++++
 lib/librte_lpm/meson.build                    |  1 +
 lib/librte_lpm/rte_lpm.c                      |  1 +
 lib/librte_lpm/rte_lpm.h                      |  1 -
 lib/librte_lpm/rte_lpm6.c                     |  1 +
 lib/librte_timer/meson.build                  |  1 +
 lib/librte_timer/rte_timer.c                  |  2 +-
 lib/meson.build                               | 16 +++-
 18 files changed, 117 insertions(+), 83 deletions(-)
 create mode 100644 lib/librte_eal/common/include/rte_function_versioning.h

-- 
2.21.0



More information about the dev mailing list