On Fri, 27 Sep 2019 20:49:30 +0100 Bruce Richardson <bruce.richard...@intel.com> wrote:
> 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. > > 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 + > ...rte_compat.h => rte_function_versioning.h} | 23 ++++++------------- > 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 ++++++++++--- > 17 files changed, 41 insertions(+), 29 deletions(-) > rename lib/librte_eal/common/include/{rte_compat.h => > rte_function_versioning.h} (89%) > Looks fine. Acked-by: Stephen Hemminger <step...@networkplumber.org>